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 щось зробив, але результат був не таким, як я очікував, замість того, щоб розбити його на два моно-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

знову з двома аудіоканалами, тож де я помилився?

Відповіді:


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я не використовував одинарних крапок, а натомість використовував подвійні точки, тому не дивно, що це не спрацювало. Тепер це працює!
себастьян

1
припустимо, я маю файл з 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 Яке ваше рішення?
llogan

1

Для цього слід використовувати фільтр для каналу . -карта не може цього зробити. Наприклад:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.