ffmpeg使用笔记
基本命令模式
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}
options
options | 功能说明 | 可选参数 |
---|---|---|
-preset | h264 自带的模式选择,仅影响转码速度,不影响质量,会影响码率。 | ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow和placebo。默认处在medium模式 例子:-preset fast |
-crf | h264 影响最终视频的质量 | 0-51的数值 我貌似见到过低于51的质量 默认是23。例子:-crf 20 指定该参数后码率参数将会失效 |
-b | 码率 | 例如:-b:a 132k 即音频132kbps -b:v 1800k 即视频1800kbps |
-vf | 编辑视频分辨率 | -vf scale=1920:1080 即缩放为1080p -vf crop=1280:720:0:0 即剪辑为720p,后面是剪辑区域左上角坐标 |
-strict -2 | encoder 'acc' | 音频参数,不明,貌似是因为我使用的版本acc编码还在试验阶段 |
-threads | 多线程运算 | 例子:-threads 2 双线程。 |
-ss 和-t | 视频剪辑 | 例子:-ss 00:00:00.00 -t 00:00:10.00 剪辑为前十秒钟的视频输出。 |
-y | 自动覆盖文件 | 略。 |
安装与版本更替
下载合适版本。
1.解压包文件
tar -jxvf ffmpeg-*.tar.bz2
2.进入目录
cd ffmpeg-*
3.配置文件
配置安装时的选项命令如下:
./configure --enable-shared --prefix=/usr/local/ffmpeg
--enable-shared
表示生成动态链接库,添加后ffmpeg程序将依赖这些库,如不使用这是静态依赖,可执行文件将变大。
--prefix=/usr/loacal/ffmpeg
指定了程序安装的目录。
--disable-yasm
没有安装yasm时需要添加该选项保证编译时不使用yasm。
yasm使用了汇编指令,可以提高ffmpeg的编译速度。 不过我使用apt-get安装时报错,无法安装
4.编译安装
make
sudo make install
我在编译过程中出现少量报错和警告,目前未影响使用
5.路径配置
首先解决动态链接库
通过查看/etc/ld.so.conf文件,发现里面只有一句话:
include ld.so.conf.d/*.conf
表明其包含了ld.so.conf.d下所有的conf文件
所以可以在/etc/ld.so.conf.d/目录下创建新的ffmpeg.conf文件,内容为:
/usr/local/ffmpeg/lib
之后执行ldconfig
使修改生效。
解决可执行文件的直接运行
1 通过在/usr/local/bin/文件夹下创建链接文件解决
2 sudo ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/local/bin/
3 sudo ln -s /usr/local/ffmpeg/bin/ffprobe /usr/local/bin/
4 sudo ln -s /usr/local/ffmpeg/bin/ffserver /usr/local/bin/
第三方编码器库
事情的起因是因为我发现版本升到3.0.2之后crf参数报错,所以才意识到h264编码器没有安装,故将解决办法记载下来,以备不时之需。
以下所有内容均以h264为例
1.下载x264工程代码
git clone git://git.videolan.org/x264.git
或者从这里下载:x264
其他常用库:lame libogg libvorbis xvid
libvorbis 依赖于 libogg 所以必须先安装后者
2.库的安装
解包:
tar
配置:
./configure --enable-shared --enable-static
--enable-shared
动态库,会生成.so或者.a在/usr/local/lib下,来被ffmpeg调用。
编译安装:
make
sudo make install
3.重新编译ffmpeg
编译过程基本如前,但是在配置阶段需要加入以下参数:
--enable-gpl
GPL协议
--enable-libx264
允许调用x264库。
4.其他注意事项
ffmpeg程序默认调用的是/usr/lib下调用库文件,可能会报错。
在/etc/ld.so.conf文件修改lib配置解决问题。