首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >map_channel是如何在ffmpeg中工作的?

map_channel是如何在ffmpeg中工作的?
EN

Stack Overflow用户
提问于 2020-08-02 19:35:37
回答 1查看 2.2K关注 0票数 0

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

代码语言:javascript
运行
复制
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

但是语法非常混乱,所以我不知道如何正确地提取通道。

对于第一个音频轨道,这段代码工作得很好:

代码语言:javascript
运行
复制
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(非常第一个通道)。

但当我试图从第二声道中提取频道时..。

代码语言:javascript
运行
复制
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"

...it提取的不是德语的声音,而是使用相同的英语频道(听起来也比以前的声音稍大)。在这段代码中,0.2.0似乎是:输入#0 (movie.mkv);然后是流2(音频ger);然后是通道0(非常第一个通道)。

那我做错什么了?:-)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 20:12:20

使用通道分割过滤器

沟道分裂滤波器更容易实现:

代码语言:javascript
运行
复制
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,这在使用通道拆分时非常有用。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63220265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档