首页 > 解决方案 > map_channel 如何在 ffmpeg 中工作?

问题描述

我需要从 5.1 音频中提取通道。这些音轨包含在 MKV 文件中。“movie.mkv”文件的结构如下:

Input #0, matroska,webm, from 'movie.mkv':
  Duration: 00:40:38.08, start: 0.000000, bitrate: 21128 kb/s
    Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x800 [SAR 1:1 DAR 12:5], 24 fps, 24 tbr, 1k tbn, 48 tbc
    Stream #0:1(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
    Stream #0:2(ger): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s
    Stream #0:3(eng): Subtitle: subrip

但是语法非常混乱,所以我没有弄清楚如何正确提取频道。

这段代码,对于第一个音轨,工作正常:

ffmpeg -i "movie.mkv" -map_channel 0.1.0 "eng channel 1.wav"
ffmpeg -i "movie.mkv" -map_channel 0.1.1 "eng channel 2.wav"
ffmpeg -i "movie.mkv" -map_channel 0.1.2 "eng channel 3.wav"
ffmpeg -i "movie.mkv" -map_channel 0.1.3 "eng channel 4.wav"
ffmpeg -i "movie.mkv" -map_channel 0.1.4 "eng channel 5.wav"
ffmpeg -i "movie.mkv" -map_channel 0.1.5 "eng channel 6.wav"

我相信0.1.0是:输入#0(movie.mkv);然后流 1(音频 eng);然后是通道 0(第一个通道)。

但是当我试图从第二个音轨中提取频道时......

ffmpeg -i "movie.mkv" -map_channel 0.2.0 "ger channel 1.wav"
ffmpeg -i "movie.mkv" -map_channel 0.2.1 "ger channel 2.wav"
ffmpeg -i "movie.mkv" -map_channel 0.2.2 "ger channel 3.wav"
ffmpeg -i "movie.mkv" -map_channel 0.2.3 "ger channel 4.wav"
ffmpeg -i "movie.mkv" -map_channel 0.2.4 "ger channel 5.wav"
ffmpeg -i "movie.mkv" -map_channel 0.2.5 "ger channel 6.wav"

...它提取的不是德语声音,而是使用相同的 eng 通道产生的结果(听起来也比以前的情况大一点)。在这段代码中,0.2.0似乎是: input #0 (movie.mkv); 然后是流 2(音频 ger);然后是通道 0(第一个通道)。

那么我做错了什么?:-)

标签: audioffmpeg

解决方案


使用通道分割过滤器

将 5.1 声道布局拆分为单个单声道组件的示意图

通道分割过滤器更容易:

ffmpeg -i input.mkv -filter_complex "[0:a:0]channelsplit=channel_layout=5.1(side)[FL][FR][FC][LFE][SL][SR]" -map "[FL]" front_left.wav -map "[FR]" front_right.wav -map "[FC]" front_center.wav -map "[LFE]" lfe.wav -map "[SL]" side_left.wav -map "[SR]" side_right.wav
  • 上面的示例将从第一个音频流 ( Stream #0:1(eng)) 中获取音频。如果您愿意,请Stream #0:2(ger)更改[0:a:0][0:a:1]. 有关语法的更多详细信息,请参阅此答案。[0:a:0]

  • 有关更多示例,请参阅FFmpeg Wiki:音频通道

  • 请参阅ffmpeg -layouts频道布局和频道名称列表,这在使用频道拆分时很有帮助。


推荐阅读