FFmpeg 命令行工具 - 格式转换、时间操作、数学函数、元数据和字幕

这篇文章讲解 FFmpeg 命令行工具中使用格式转换、时间操作、数学函数、元数据和字幕相关的功能。
格式转换
媒体容器是存储多媒体流和相关元数据的特定文件格式,因为音频和视频可以由多种方式进行编码和解码,容器提供了更方便方式来在一个文件中存储多种媒体流,一些容器只能存储音频,还有一些容器只能存储图像,但大多数容器可以存储音频、视频、字幕和元数据等。
如果只是容器转化,编解码器没有变化,可以使用 -c copy 或 -c:a copy 或 -c:v copy:
ffmpeg -i car.mov -q 1 -c copy car.avi
转码的工作流程:读取文件、解封装、解码、转换参数或经过过滤器、编码、封装、写入文件。
时间操作
使用 -t 时长和 -ss (seek from start) 来抽取特定时间段的视频:
ffmpeg -i live.mp4 -ss 5 -t 10 clip.mp4
时间格式有如下两种:
[-]HH:MM:SS[.m...]
[-]S+[.m...]
改变视频的播放速度使用 setpts (set presentation timestamp) 视频滤镜:
ffplay -i car.mov -vf setpts=PTS/3
改变音频的播放速度使用 atempo 音频滤镜:
ffplay -i live.mp3 -af atempo=2
数学函数
在一些参数里面可以使用数学函数。
元数据和字幕
元数据
ffplay -i live.mp3
可以看到如下内容:
Input #0, mp3, from 'live.mp3':
Metadata:
minor_version : 512
major_brand : isom
compatible_brands: isomiso2avc1mp41
information : {"com.bytedance.info": "{}"}
comment : vid:v0300fdb0000btbmkrhucgba10erkqn0
encoder : Lavf58.26.100
字幕
字幕可以是外部独立的文件,也可以做为一支流包含在媒体容器中,字幕像音频或者视频一样,有特定的格式,同样需要编解码器,如下从 SRT 格式转换为 ASS 格式:
ffmpeg -i subtitles.srt subtitles.ass
字幕编码进媒体容器:
ffmpeg -f lavfi -i rgbtestsrc -vf subtitles=rgb.srt rgb.mp4