仅重置特定流的元数据

仅重置特定流的元数据

在我的用例中,我想使用 ffmpeg 将音频流重新编码为不同的格式。源文件 (MKV) 包含一个视频流、两个音频流和三个字幕流以及章节。音频和字幕流包含语言或流标题等元数据。我在 Windows 批处理中使用以下命令:

ffmpeg -i "input.mkv" ^
-map 0:v -c:v copy ^
-map 0:s -c:s copy ^
-map 0:a:0 -c:a:0 eac3 -b:a:0 256k ^
-map 0:a:1 -c:a:1 eac3 -b:a:1 256k ^
-map_chapters 0 ^
"output.mkv" 

转换本身是有效的。不幸的是,转换后,一些音频元数据出现错误。例如,音频流大小显示转换前的大小。这就是为什么我想重置音频元数据而不触及字幕元数据。为此,我修改了我的命令:

ffmpeg -i "input.mkv" ^
-map_metadata 0 ^
-map 0:v -c:v copy ^
-map 0:s -c:s copy ^
-map_metadata:s:a -1 ^
-map 0:a:0 -c:a:0 eac3 -b:a:0 256k -metadata:s:a:0 language=eng ^
-map 0:a:1 -c:a:1 eac3 -b:a:1 256k -metadata:s:a:1 language=eng ^
-map_chapters 0 ^
"output.mkv" 

-map_metadata:s:a -1试图仅重置音频流的元数据。但问题就在这里:它还会清除字幕流的元数据。直到现在我才弄清楚如何仅重置音频流元数据。另一个尝试使用

-map_metadata:s:a -1 ^
-map_metadata:s:s 0 ^

没有帮助。 元数据(语言、流标题)仍被删除。 唯一保留的元数据是“默认”和“强制”标签。

当然,我可以使用-map 0:s:0 -metadata:s:s:0 language=eng示例。但在我看来,这是一种变通方法,而且为每个流进行配置很耗时。

尽管使用了 Google 数小时并进行了数十次测试,我仍然无法弄清楚如何仅清除音频元数据并保留其他所有内容。

有任何想法吗?

相关内容