我想知道是否有办法将立体声拆分成两个单声道 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 做了一些事情,但结果并不像我预期的那样,它没有将其分解为两个单声道 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
再次使用两个音频通道,那么我哪里做错了?
答案1
使用 ffmpeg 时,据我所知有几种方法可以将立体声转换为两个单独的单声道文件,或者将一个文件中的两个单声道流转换为立体声:
立体声至 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
音频过滤器
这将创建一个具有两个独立单声道流的输出文件:
ffmpeg -i input.m4a -filter_complex channelsplit out.mka