ffmpeg立体声通道分为两个单声道


11

我想知道是否可以将立体声拆分为两个单声道wav文件。我的第一个猜测是

ffmpeg -threads "16" -i "$2" -map 0:1:1 "$3"

因为我的示例视频具有以下信息:

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 39mn 0s
Bit rate mode                            : Constant
Bit rate                                 : 256 Kbps
Channel(s)                               : 2 channels
Channel positions                        : Front: L R

因此,我有一个具有两个通道的音频流,并想要两个单声道。最初,我使用map_channel进行了尝试,但这并没有解决问题,反而我收到了一条错误消息:

Syntax error, mapchan usage: [file.stream.channel|-1][:syncfile:syncstream]

因此,我用上述代码再次尝试了一下,至少ffmpeg做了一些事情,但是结果不是我所期望的,而是将其分解为两个mono wav文件,结果是:

info.system.container = WAVE
info.system.size = 449413166 Bytes
info.system.size = 428.59 MiB
info.system.playtime = 2340.69 s
info.audio0.codec = PCM
info.audio0.desc = 
info.audio0.format_endianness = Little
info.audio0.format_sign = Signed
info.audio0.format_resolution = 16 bits
info.audio0.samprate = 48000 Hz
info.audio0.channels = 2

又有两个音频通道,那我哪里出错了?

Answers:


17

使用ffmpeg,我知道有几种方法可以将立体声转换为两个单独的单声道文件,或者在一个文件中实现两个单声道流:

立体声至2单声道输出

立体声至2单声道输出

-map_channel 选项

ffmpeg -i stereo.wav -map_channel 0.0.0 left.wav -map_channel 0.0.1 right.wav

pan 音频过滤器

ffmpeg -i stereo.wav -filter_complex \
"[0:0]pan=1|c0=c0[left]; \
 [0:0]pan=1|c0=c1[right]" \
-map "[left]" left.wav -map "[right]" right.wav

立体声到2单声道流

channelsplit 音频过滤器

立体声到2单声道流

这将创建一个具有两个单独的单声道流的输出文件:

ffmpeg -i input.m4a -filter_complex channelsplit out.mka

另见


谢谢,我发现了我的缺点。当我使用时,-map_channel我没有使用单点,而是使用了双点,所以也难怪它没有用。现在可以了!
sebastian

1
假设我在一个流中有一个包含6个通道的文件,我怎么知道哪个通道是哪个?当我有2个通道时,它很容易,它总是向左0.0.0,向右0.0.1。我在ffmpeg文档中进行了查找,上面写着,-layouts但是没有示例说明它是如何工作的。我已经尝试过,得到的消息Missing argument for option 'layouts'是ffmpeg期望什么参数?
sebastian

@sebastian您想从六个通道输入中制作六个单声道输出文件吗?
llogan 2013年

我有两个或三个具有5.1环绕声的片段,当然在我对所有六个片段都使用map_channel之后,我无法确定哪个map_channel属于哪个位置,这是一个示例:Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFE,但是我想我已经找到了解决方案对于这个问题。
sebastian

@sebastian您有什么解决方案?
llogan 2013年

1

您应该为此使用channelplit过滤器。-map无法做到这一点。例如:

ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv

检查指向我提供的文档的链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.