六个常用的FFmpeg命令

2019-07-31 16:03:05 浏览数 (1)

本文为媒矿工厂编译的技术文章

原标题:Six FFmpeg Commands You Can’t Live Without

作者:Jan Ozer

翻译整理:甘文耀

引言

FFmpeg是领先的多媒体框架,本帖将展示六个常用的FFmpeg命令。FFmpeg的官网下载地址为:https://ffmpeg.org/download.html。

1、基础命令

代码语言:javascript复制
ffmpeg -i input.mp4 output.mp4

命令解释:

  1. ffmpeg 执行ffmpeg程序,如果你没有将ffmpeg加入环境变量,那么你需要输入ffmpeg的完整路径。
  2. -i input.mp4 指定输入文件,FFmpeg支持多数容器格式,包括MP4,.ts,MOV,AVI,Y4M,MKV等。
  3. 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命令可以改变容器格式却不需要重新编码:

代码语言:javascript复制
ffmpeg -i input.mp4 -c:v copy -c:a copy output.mov

命令解释(上述已解释过的命令就不再重述,下同):

  1. -c:v copy 指定视频的编码译码器为copy,这告诉FFmpeg直接把压缩后的视频流复制到新的文件而不重新编码。
  2. -c:a copy 指定音频的编码译码器为copy,这告诉FFmpeg直接把压缩后的音频流复制到新的文件而不重新编码。

3、转换.ts文件的容器格式

对于.ts扩展名的MPEG-2容器格式的文件,你需要增加一项命令在传输流文件中处理MPEG-2/4 ADTS头:

代码语言:javascript复制
ffmpeg -i input.ts -bsf:a aac_adtstoasc -c:v copy -c:a copy outputfromts.mp4

命令解释:

  1. -bsf:a aac_adtstoasc 处理ADTS转换。较新版本的FFmpeg会自动增加这条命令。

4、不重新编码就能裁剪视频

你可能需要裁剪视频中的部分内容,使用Adobe Premiere Pro来裁剪视频需要渲染以及编码,因此很耗时。而使用下面这条FFmpeg命令可以快速裁剪视频:

代码语言:javascript复制
ffmpeg -ss 00:00:05 -i input.mp4 -t 00:00:03 -c:v copy -c:a copy excerpt.mp4

命令解释:

  1. -ss 00:00:05 从视频第5秒开始裁剪。
  2. -t 00:00:05 裁剪的视频时长为5秒,如果你不设置这项命令,视频会从-ss设置的开始时间一直裁剪到视频末尾。

当编码译码器设为copy时,FFmpeg会根据关键帧进行查找,因此设置的时间不会完全精准,在多数应用场景下这不会有问题,但是如果你需要精准的时间设置,你可能需要其他视频编辑器。

5、转换为原始格式

一些工具只支持原始格式(如YUV或者Y4M),或者当使用新的编码译码器如AV1,而多数工具不支持直接输入AV1编码的文件,因此你需要将你的文件转换为原始格式:

代码语言:javascript复制
ffmpeg -i input.mp4 -pix_fmt yuv420p -vsync 1 output.y4m

命令解释:

  1. -pix_fmt yuv420p 指定格式为YUV420p。
  2. -vsync 1 这条命令告诉FFmpeg在输出文件中保持输入文件中音频和视频的同步关系。

6、转换格式并调整视频分辨率

将文件转换为YUV/Y4M的同时,如果需要调整视频分辨率,可以使用这条命令:

代码语言:javascript复制
ffmpeg -i input.mp4 -s 1920x1080 -sws_flags lanczos -pix_fmt yuv420p -vsync 1 output.y4m

命令解释:

  1. -s 1920x1080 把视频分辨率调整为1920x1080。
  2. -sws_flags lanczos 分辨率缩放方法使用Lanczos。

总结

以上就是常用的六条FFmpeg命令,如果你经常测试视频编码和质量指标,你会发现命令行和FFmpeg非常重要,两者的组合简化并加速了测试和分析工作的流程。

0 人点赞