ffmpeg的map参数可以指定输入流和输出流的映射关系。
参数格式:
1
-map [-]input_file_id[:stream_specifier][?][,sync_file_id[:stream_specifier]] | [linklabel] (output)
input_file_id
指定输入文件索引,从0开始,比如0表示第一个输入文件,1表示第二个输入文件。
stream_specifier
指定对应的文件中具体的流。可以参考:FFmpeg笔记-Stream specifiers | 木杉的博客
input_file_id
前面的负号表示从已经建立的map关系中去掉这个映射。
?
问号表示如果对应的流不存在则忽略。否则默认是会报错提示这个流不存在的。
具体使用得看例子:
映射第一个输入的所有流到输出:
ffmpeg -i INPUT -map 0 output
假设输入文件中有两个音频流,他们可以通过0:0和0:1指定,然后下面的命令选择第二个音频到输出文件(第一个流忽略):
ffmpeg -i INPUT -map 0:1 out.wav
选择a.mov的第三个流和b.mov的第七个流输出到out.mov中:
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
选择所有的视频流,和第三个音频流到输出文件:
ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
从输入中剔除第一个音频流:
ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
选择第一个输入文件的视频和音频流到输出,如果不存在音频流,不报错:
ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT
选择英语流到输出:
ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
参考资料
- ffmpeg Documentation
https://www.dazhuanlan.com/2020/01/17/5e20e341cb6a6/