стереофонические каналы ffmpeg на два моноканала

8

Я хотел знать, есть ли способ разделить стерео на два монофонических файла 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

снова с двумя аудиоканалами, так где я ошибся?

sebastian
источник

Ответы:

13

Используя ffmpeg, я знаю несколько способов перехода от стерео к двум отдельным монофайлам или к двум монопотокам в одном файле:

стерео на 2 моно выхода

stereo to 2 mono outputs

-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 аудио фильтр

stereo to 2 mono streams

Это создаст один выходной файл, который имеет два отдельных монопотока:

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

Также см

llogan
источник
Спасибо, я нашел свой недостаток. Когда я использовал -map_channel Я не использовал одиночные точки, но вместо этого я использовал двойные точки, поэтому неудивительно, что это не сработало. Теперь это работает!
sebastian
давайте предположим, что у меня есть файл с 6 каналами в одном потоке, как мне узнать, какой канал какой? Когда у меня есть 2 канала, это легко, его всегда 0.0.0 слева и 0.0.1 справа. Я посмотрел в документации ffmpeg и там написано -layouts но нет примера, как это работает. Я попробовал это, и сообщение, которое я получаю, Missing argument for option 'layouts' какой аргумент ожидает ffmpeg?
sebastian
@sebastian Вы хотите сделать шесть монофонических выходных файлов из шестиканального ввода?
llogan
У меня есть два или три клипа, которые имеют объемный звук 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
0

Вы должны использовать фильтр разделения каналов для этого. -map не может этого сделать. Например:

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

Проверьте ссылку на документацию, которую я предоставил.

ptQa
источник