登录
  • 人们都希望被别人需要 却往往事与愿违
  • 软件开发是一场程序员和上帝的竞赛:程序员要开发出更大更好、连傻瓜都会用的软件; 而上帝在努力创造更傻的傻瓜。到目前为止, 一直是上帝赢@Rick Cook

自行编译ffmpeg并压制带字幕的视频、一键编译non-free ffmpeg

IT那些事 Benny小土豆 7780次浏览 7397字 0个评论
文章目录[显示]
这篇文章在 2017年09月29日10:09:47 更新了哦~

有点不好意思啊此文无图... :shock: 还有这个字体咋样呀 :razz:  

一键编译脚本在第三页

话说很久之前,人人影视放出来了一个压片工具,总共有192M的样子,而且只能在Windows上运行。对于我等Linux党,这可怎么行呢?于是我就想到了ffmpeg这个万能的神器。当然了ffmpeg作为自由软件,你从包管理器里安装的、直接configure编译的,是不会带libx264

这类非自由软件,自然想要压制影片就不是那么好玩了……

那既然酱紫,我们就只好手动编译一个non-free的ffmpeg,然后再来使用嘛!

这种压片的方法是把字幕混到视频流中,也就是说视频最终是音频流+视频流,是没有字幕流的,字幕已经是视频的一部分了。这也可以极大程度上的避免盗字幕的行为。

懒虫们,假如你们真的懒得看这么长的文章,并且你确定你的发行版是比较新的发行版,那么请直接翻到本文最后看"一键式编译教程"吧!

准备特效字体

有很多字幕都是用了自定义字体,请记得给你的发行版安装对应的字体呀!桌面版直接双击安装即可。如果是服务器版,把字体复制到/usr/share/fonts/truetype和原来字体一样的位置,或者新建个winFonts目录便于区分也可以。

之后运行

sudo apt install fontconfig
sudo fc-cache –fv

运行fc-list可以看到已安装字体列表

查看中文字体,可以使用

sudo fc-list :lang=zh

并且请注意编码格式的问题,Linux一般使用UTF-8而Windows则是GB2312

 

编译安装ffmpeg

我使用的是Ubuntu,所以这里我就按照官网提供的教程编译啦!

安装必备依赖

sudo apt-get update
sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev


注意,如果是服务器版Ubuntu,可以把第二步替换成如下(你装原来的也行,反正是ffplay和X11的依赖……)

sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
libtheora-dev libtool libvorbis-dev pkg-config texinfo zlib1g-dev

创建一个用来下载源码的目录

mkdir ~/ffmpeg_sources

编译与安装

yasm

如果你的包管理器里的yasm版本号>=1.2.0,那就可以用包管理器安装

(使用sudo apt search yasm查看版本号,就想编译的,我也没意见)

sudo apt-get install yasm

否则请编译安装

cd ~/ffmpeg_sources
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
make distclean

libx264

如果你的包管理器里的libx264版本号>=0.118,那就是用包管理器安装

sudo apt-get install libx264-dev

否则需要编译安装

cd ~/ffmpeg_sources
wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-opencl
PATH="$HOME/bin:$PATH" make
make install
make distclean

libx265

只能选择编译安装啦。

sudo apt-get install cmake mercurial
cd ~/ffmpeg_sources
hg clone https://bitbucket.org/multicoreware/x265
cd ~/ffmpeg_sources/x265/build/linux
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install

libfdk-aac

如果你的包管理器中有libfdk-aac-dev,那就可以使用包管理器安装(没有版本需求)

sudo apt-get install libfdk-aac-dev

否则需要编译安装

cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean

ibmp3lame

如果你的包管理器中有ibmp3lame,版本号>=3.98.3,那么你可以使用包管理器安装

sudo apt-get install libmp3lame-dev

否则需要编译安装

sudo apt-get install nasm
cd ~/ffmpeg_sources
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared
make
make install
make distclean

libopus

如果你的包管理中有libopus,版本号>=1.1,那你可以使用包管理器安装

sudo apt-get install libopus-dev

否则需要编译安装。

cd ~/ffmpeg_sources
wget http://downloads.xiph.org/releases/opus/opus-1.1.2.tar.gz
tar xzvf opus-1.1.2.tar.gz
cd opus-1.1.2
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make clean

libvpx

只能编译安装(注意,这个链接是在Google的服务器上,如果服务器在国内下载不回来,就自己翻墙下载然后上传到服务器吧)

cd ~/ffmpeg_sources
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.5.0.tar.bz2
tar xjvf libvpx-1.5.0.tar.bz2
cd libvpx-1.5.0
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests
PATH="$HOME/bin:$PATH" make
make install
make clean

编译ffmpeg

耗时可能会比较长

cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree
PATH="$HOME/bin:$PATH" make
make install
make distclean
hash –r

注意:

1.如果你直接运行configure,将会是没有non-free软件的ffmpeg;官方的configure配置会在~下生成一个bin(编译之后安装就会在~/bin下)、ffmpeg_build目录;如果不喜欢,那就照猫画虎的改掉$HOME(记得都要改哦),make install的时候就到/bin啦!

2.在Ubuntu中,~/bin默认是被包含到PATH中的,所以当你注销-登录或者

source ~/.profile

之后可以从任何目录运行~/bin中的程序的。再不济,咱把~/bin里的拷贝到/bin里总可以吧?

3.如果需要安装man page,请运行

echo "MANPATH_MAP $HOME/bin $HOME/ffmpeg_build/share/man" >> ~/.manpath


我假设你已经编译好了ffmpeg,并且准备好了你的视频和字幕。

前面提过了,如果你的字幕中使用了自定义字体,请记得同时安装对应的字体!

并且,请注意字幕文件的编码格式,Linux通常会使用UTF-8无BOM,而Windows则是GB2312这类。为了避免出乱码,还是老老实实转换成UTF-8吧!

下一页我会介绍一些压片的方法,关于ffmpeg的更多方法,大家伙就自己搜索、看官方的文档、man page啦!

注意,压制过程中可能会出现这样的警告

Glyph 0x36C not found, selecting one more font for (YouYuan, 700, 0)

不要管他啦……只要是UTF-8编码的,会压出来的!
该看下一页啦~~


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://www.bennythink.com/ffmpeg.html
喜欢 (1)
分享:-)
Benny小土豆
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)