介绍一个全局参数?-hide_banner
;它可以阻止 FFmpeg 在每次执行时开头打印的那一堆版本信息文本:
ffmpeg -hide_banner -L
比如将一个 FLV 文件转为 MP4 文件并重编码,FFmpeg 会自动寻找编解码器,准确度还是比较高的:
ffmpeg -i video.flv video.mp4
其中,在?-i
?后指定输入文件的文件名,在所有命令的最后指定输出文件的文件名。?如果文件名带有空格或特殊字符,请用双引号将文件名包裹。?上述的?video.mp4
?在?-i
?参数之后,称为?输出参数?;反之,在?-i
?之前的称为?输入参数。
用户也可以显式地指定编码器,比如使用 h.264 视频编码器与 flac 音频编码器。
ffmpeg -i video.flv -c:v libx264 -c:a flac video.mkv
其中?-c
?是?-codec
?的简写。用?v
?表示视频(video)编码器、?a
?表示音频(audio)编码器。
一般来说转格式会进行重复编码,有些机器上就会很慢,但如果对编码不作转换要求,就可以进行流复制,这个非常快。
格式转换还有一种快速的情形。如果两者的所有流都不改动且输出容器支持输入的所有流,那么可以直接向?-c
?传递?copy
?以进行流复制。这样省去了重新编码的时间,格式转换将十分迅速:
ffmpeg -i video.avi -c copy video.mp4
其中,-c
?是 codec 的简称,表示所有流的编解码器。该命令表示所有流均不进行额外操作,直接复制到新容器中。
常见就是提取音频和字幕
比如将一个 MP4 视频文件转为 AAC 音频文件(此处实质上是直接提取):
ffmpeg -i video.mp4 -c:a copy audio.aac
此处的?-c:a
?表示音频流;视频流?-c:v
?与字幕流?-c:s
?自然也类似。 注意:如果音频流与容器冲突时,你需要将?copy
?改为正确的编解码器(或者删去?-c:a?copy
?来让 FFmpeg 自动选择),以执行重编码。
转码
ffmpeg -i video.mkv -c:a libmp3lame -q:a 2 audio.mp3
对于内挂了字幕的视频文件,也可以将其字幕单独提取出来,例如:
ffmpeg -i video.mkv -c:s copy subtitle.srt