ffmpeg saluran stereo menjadi dua saluran mono

11

Saya ingin tahu apakah ada cara untuk membagi stereo menjadi dua file mono wav. Tebakan pertama saya adalah

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

karena video contoh saya memiliki informasi berikut:

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

Jadi saya punya streaming audio yang satu ini dengan dua saluran dan ingin dua saluran mono. Pada awalnya saya mencobanya dengan map_channel, tetapi itu tidak berhasil tetapi saya mendapatkan pesan kesalahan:

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

Jadi saya telah mencobanya lagi dengan kode yang disebutkan di atas dan setidaknya ffmpeg melakukan sesuatu, tetapi hasilnya tidak seperti yang saya harapkan, alih-alih memecahnya menjadi dua file mono wav, hasilnya adalah:

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

lagi dengan dua saluran audio, jadi di mana saya salah?

sebastian
sumber

Jawaban:

17

Menggunakan ffmpeg ada beberapa metode yang saya tahu untuk beralih dari stereo ke dua file mono individu, atau dua mono stream dalam satu file:

stereo ke 2 output mono

stereo ke 2 output mono

-map_channel pilihan

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

pan filter audio

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

stereo ke 2 aliran mono

channelsplit filter audio

stereo ke 2 aliran mono

Ini akan membuat satu file keluaran yang memiliki dua aliran mono individual:

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

Lihat juga

llogan
sumber
Terima kasih, saya telah menemukan kekurangan saya. Ketika saya menggunakan -map_channelsaya tidak menggunakan titik tunggal tetapi saya menggunakan titik ganda, jadi tidak heran itu tidak berhasil. Sekarang berhasil!
sebastian
1
mari kita anggap saya punya file dengan 6 saluran dalam satu aliran, bagaimana saya tahu saluran yang mana? Ketika saya memiliki 2 saluran itu mudah, selalu 0,0.0 kiri dan kanan 0,0.1. Saya telah melihat dokumentasi ffmpeg dan dikatakan -layoutstetapi tidak ada contoh cara kerjanya. Saya sudah mencobanya dan pesan yang saya dapatkan adalah Missing argument for option 'layouts'argumen apa yang diharapkan oleh ffmpeg?
sebastian
@sebastian Anda ingin membuat enam file output mono dari input enam saluran?
llogan
Saya memiliki dua atau tiga klip yang memiliki suara surround 5.1 dan tentu saja setelah saya menggunakan map_channel pada keenamnya, saya tidak dapat menentukan map_channel mana yang berada di posisi mana, berikut ini contohnya:, Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEtapi saya rasa saya sudah menemukan solusi untuk masalah ini.
sebastian
@sebastian Apa solusi Anda?
llogan
1

Anda harus menggunakan filter channelsplit untuk itu. -map tidak bisa melakukan ini. Sebagai contoh:

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

Periksa tautan ke dokumentasi yang saya berikan.

ptQa
sumber