ffm*_*123 4 audio video ffmpeg
我有很多带有多种音频和字幕语言的文件,但是曲目编号不一致(英文音频流并不总是第一个)所以使用如下命令:
ffmpeg -i "input.mkv" -map 0 -map -0:a:1 -c:v copy -c:a copy "output.mkv"
Run Code Online (Sandbox Code Playgroud)
不会产生预期的结果。在四处搜索后,我发现可以使用以下命令根据语言映射流:
ffmpeg -i "input.mkv" -map 0 -map -0:m:language:eng -c:v copy -c:a copy "output.mkv"
Run Code Online (Sandbox Code Playgroud)
但是-map -0:m:language:eng将删除所有带有英语语言标志的曲目。为了保留您可以使用的字幕轨道,-map 0:s这是一个很好的解决方案,但是,我想知道是否可以仅根据语言映射音频流。
小智 18
-0:m:language:eng 将删除英文音轨并保留所有其他音轨。
要仅保留英文音轨并删除所有其他音轨,请删除开头0:m:language:eng
的破折号:开头 的破折号创建了一个负面映射,它告诉 ffmpeg“仅删除与此匹配的内容”
我知道这是 8 个月后,但我认为这对那些像我一样在谷歌搜索中结束的人会有所帮助。
编辑:忽略初始回复。目前不可能。在顶部使用解决方法。
ffmpeg -i "in.mkv" -map 0:a -map -0:m:language:eng -map 0:v -map 0:s -map 0:d? -map 0:t? -c copy "out.mkv"
Run Code Online (Sandbox Code Playgroud)
这达到了预期的结果,因为 ffmpeg 按给定的顺序实现了地图选项。
您需要将元数据选择器后缀到流类型选择器,即
ffmpeg.exe -i "%f" -map 0 -map -0:a:m:language:eng -c:v copy -c:a copy "../%f"
Run Code Online (Sandbox Code Playgroud)
据我所知,这是删除英语音频同时保留所有其他流而不使用流 ID 的最佳方法,我发现流 ID 比语言标记更加不一致。一般来说,人们使用正确的语言标记,但音频语言不太可能保留相同的 ID。
ffmpeg -i "in.mkv" -map a -map -m:language:eng -map v -map s -map d? -map t -c:v copy -c:a copy "out.mkv"
该命令将映射每个音频流,然后删除带有English语言标志的音频。然后它将映射所有视频、字幕和附件流。如果需要,您可以添加-disposition:a:0 default为第一个音频流添加 [default] 标志。注意:仅在删除已具有默认标志的音频时使用。如果您想将不同的音轨设置为默认值,请更改-disposition:a:0为等等。-disposition:a:1
| 归档时间: |
|
| 查看次数: |
12725 次 |
| 最近记录: |