本文为媒矿工厂编译的技术文章
原标题:Six FFmpeg Commands You Can’t Live Without
作者:Jan Ozer
翻译整理:甘文耀
引言
FFmpeg是领先的多媒体框架,本帖将展示六个常用的FFmpeg命令。FFmpeg的官网下载地址为:https://ffmpeg.org/download.html。
1、基础命令
ffmpeg -i input.mp4 output.mp4
命令解释:
- ffmpeg 执行ffmpeg程序,如果你没有将ffmpeg加入环境变量,那么你需要输入ffmpeg的完整路径。
- -i input.mp4 指定输入文件,FFmpeg支持多数容器格式,包括MP4,.ts,MOV,AVI,Y4M,MKV等。
- output.mp4 输出文件
如果你没有指定音频或者视频的编码译码器,那么FFmpeg会根据容器格式使用默认的编码译码器及其参数。例如,输入一个1080p,容器格式为MP4的文件,FFmpeg会使用H.264视频编码译码器(码率为9~10 Mbps),AAC音频编码译码器(码率约为130Kbps),250帧的关键帧间隔,High profile版本,present参数选择为medium的x264。
2、不重新编码就能转换容器格式
可能你正在使用的某个应用只支持MOV容器格式,而你的源文件的容器格式为MP4。你可以使用Adobe Premiere Pro完成上述格式转换,但是Premiere Pro在转换时一定会重新编码,因此很耗时。而使用下面这条FFmpeg命令可以改变容器格式却不需要重新编码:
ffmpeg -i input.mp4 -c:v copy -c:a copy output.mov
命令解释(上述已解释过的命令就不再重述,下同):
- -c:v copy 指定视频的编码译码器为copy,这告诉FFmpeg直接把压缩后的视频流复制到新的文件而不重新编码。
- -c:a copy 指定音频的编码译码器为copy,这告诉FFmpeg直接把压缩后的音频流复制到新的文件而不重新编码。
3、转换.ts文件的容器格式
对于.ts扩展名的MPEG-2容器格式的文件,你需要增加一项命令在传输流文件中处理MPEG-2/4 ADTS头:
ffmpeg -i input.ts -bsf:a aac_adtstoasc -c:v copy -c:a copy outputfromts.mp4
命令解释:
- -bsf:a aac_adtstoasc 处理ADTS转换。较新版本的FFmpeg会自动增加这条命令。
4、不重新编码就能裁剪视频
你可能需要裁剪视频中的部分内容,使用Adobe Premiere Pro来裁剪视频需要渲染以及编码,因此很耗时。而使用下面这条FFmpeg命令可以快速裁剪视频:
ffmpeg -ss 00:00:05 -i input.mp4 -t 00:00:03 -c:v copy -c:a copy excerpt.mp4
命令解释:
- -ss 00:00:05 从视频第5秒开始裁剪。
- -t 00:00:05 裁剪的视频时长为5秒,如果你不设置这项命令,视频会从-ss设置的开始时间一直裁剪到视频末尾。
当编码译码器设为copy时,FFmpeg会根据关键帧进行查找,因此设置的时间不会完全精准,在多数应用场景下这不会有问题,但是如果你需要精准的时间设置,你可能需要其他视频编辑器。
5、转换为原始格式
一些工具只支持原始格式(如YUV或者Y4M),或者当使用新的编码译码器如AV1,而多数工具不支持直接输入AV1编码的文件,因此你需要将你的文件转换为原始格式:
ffmpeg -i input.mp4 -pix_fmt yuv420p -vsync 1 output.y4m
命令解释:
- -pix_fmt yuv420p 指定格式为YUV420p。
- -vsync 1 这条命令告诉FFmpeg在输出文件中保持输入文件中音频和视频的同步关系。
6、转换格式并调整视频分辨率
将文件转换为YUV/Y4M的同时,如果需要调整视频分辨率,可以使用这条命令:
ffmpeg -i input.mp4 -s 1920x1080 -sws_flags lanczos -pix_fmt yuv420p -vsync 1 output.y4m
命令解释:
- -s 1920x1080 把视频分辨率调整为1920x1080。
- -sws_flags lanczos 分辨率缩放方法使用Lanczos。
总结
以上就是常用的六条FFmpeg命令,如果你经常测试视频编码和质量指标,你会发现命令行和FFmpeg非常重要,两者的组合简化并加速了测试和分析工作的流程。