如何用FFmpeg截取视频、调整分辨率和提取音轨?

FFmpeg被誉为视频处理的瑞士军刀,具有功能丰富、操作简便、开源、免费的特点。FFmpeg已得到广泛的应用,包含在众多著名的视频处理、播放软件之中。著名的PotPlayer播放器、计算机视觉库OpenCV、视频编辑器OpenShot等,都需要FFmpeg的支撑。

单独的FFmpeg是通过命令行操作的。下面,根据我最近的学习,分享一些常见的ffmpeg操作。

以下操作所用的素材来源于苹果公司2018年秋季发布会的官方视频,下载地址为Apple Special Event, September 2018 (1080p)

安装FFmpeg

在Windows下,安装FFmpeg十分简单。首先到https://ffmpeg.zeranoe.com/builds/下载zip格式的软件包,解压到某个目录(如c:\ffmpeg\),再将该目录添加到操作系统的环境变量Path里即可。

截取视频片段

假如我是一个智能手表公司的设计师,要借鉴(山寨)Apple Watch Series 4的功能和外观,因此要将上述发布会视频的Apple Watch部分剪出,反复学习。

首先观看该视频,将相应部分的开端和结尾时间找出,按小时:分钟:秒的格式,分别为00:07:48和00:36:48.50。

进入该视频文件所在目录,在地址栏输入cmd,打开命令行。输入以下命令。

ffmpeg -i sept2018_hd.m4v -ss 00:07:48 -to 00:36:48.50 sept2018_apple_watch.mp4

其中:

  • -i sept2018_hd.m4v表示输入文件是sept2018_hd.m4v;
  • -ss 00:07:48表示要剪出的片段开始于第7分第48秒;
  • -to 00:36:48.50表示该片段结束于第36分第48.50秒,注意秒数后面可以有小数点。

按下回车键后,命令行界面会出现一大堆信息。FFmpeg接着读取视频文件,所以界面看起来会停顿数秒。接下来,底部一行开始变化,表示操作正在进行。

最后一项speed=0.536x表示处理速度为视频播放速度的0.536倍。截取视频片段要涉及到转码操作,计算量大,因此速度是很慢的。在我的笔记本(Core i5-6200U, 12 GB DDR3 RAM)上,这段29分钟的内容花费了一个多小时才完成。

调整视频分辨率

苹果公司2018年秋季发布会的开场视频很有意思,我按照上一节的方法将其剪出来了,但是其文件尺寸还是有点大,不适合放在自己博客上。我希望将其分辨率调小一点。

我通过下面的命令将其分辨率改为640*480px。

ffmpeg -i sept2018_trailer.m4v -vf scale=640:480 sept2018_trailer_640_480.mp4

其中:

  • -vf scale=640:480表示要将分辨率调整为640*480px;
  • 其余位置的参数在上一节已经介绍过了,这里就不赘述了。

可以看到,speed=2.8x,速度快多了,不到2分钟就处理完毕。

将分辨率从1920*1280px调整到640*480px,文件尺寸也从66.7 MB减小到14.5 MB。

提取音轨

又如,我要学习英语,希望把上述发布会视频转为mp3格式的音乐。

操作命令如下。

ffmpeg -i sept2018_hd.m4v -vn -acodec mp3 sept2018_audio.mp3

其中:

  • -vn表示不需要处理视频部分,这样处理速度就非常快;
  • -acodec mp3 表示音频编码为mp3,这部分其实可以省略,应为输出文件的扩展名mp3已经告诉FFmpeg该采用什么格式了;
  • 其余位置的参数在上一节已经介绍过了,这里就不赘述了。

我们已经通过-vn告诉FFmpeg忽略视频部分,因此处理速度非常快,speed=13.9x,大约在8分钟之内完成。如果将音频提取为m4a格式,则speed=28x

参考资料