FFmpeg转换MKV到MOV时如何保留原音频流名称,避免被替换为SoundHandler
FFmpeg转换MKV到MOV时如何保留原音频流名称,避免被替换为SoundHandler
我之前也碰到过一模一样的问题!你试的-metadata:s:a handler_name='' -empty_hdlr_name 1之所以只对第一条音频流生效,是因为FFmpeg里不带索引的-metadata:s:a会把同一个设置应用到所有音频流上,导致后面的流都错误复用了第一条的名称。
要解决这个问题,关键是要针对每一条音频流单独指定元数据规则,通过流索引来区分不同的音频轨道。具体操作如下:
- 先确认你的输入MKV里有多少条音频流,可以运行这个命令查看:
ffmpeg -i input_file.mkv
输出里会看到类似Stream #0:a:0、Stream #0:a:1这样的条目,数字就是音频流的索引(从0开始)。
- 修改你的转换命令,给每条音频流单独添加
-metadata:s:a:X handler_name=''参数(X替换成对应流的索引),完整命令示例如下(假设你有2条音频流):
ffmpeg -find_stream_info -probesize 84M -i input_file.mkv \ -map 0:v -map 0:a -map -0:s -codec copy \ -metadata:s:a:0 handler_name='' -metadata:s:a:1 handler_name='' \ -empty_hdlr_name 1 output_file.mov -loglevel error
这样设置后,FFmpeg会为每条音频流单独保留原MKV里的轨道名称,不会再统一替换成默认的SoundHandler了。如果你的音频流更多,只需要按索引依次添加对应的-metadata参数就行。
备注:内容来源于stack exchange,提问作者Franon




