kanały stereo ffmpeg na dwa kanały mono

11

Chciałem wiedzieć, czy istnieje sposób na podzielenie stereo na dwa pliki wav mono. Moje pierwsze przypuszczenie było

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

ponieważ mój przykładowy film wideo zawiera następujące informacje:

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

Mam więc ten jeden strumień audio z dwoma kanałami i chcę dwa kanały mono. Na początku próbowałem z map_channel, ale to nie pomogło, zamiast tego pojawił się komunikat o błędzie:

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

Więc spróbowałem ponownie z wyżej wymienionym kodem i przynajmniej ffmpeg coś zrobił, ale wynik nie był tym, czego się spodziewałem, zamiast rozbić go na dwa pliki wav mono, wynik był:

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

znowu z dwoma kanałami audio, więc gdzie popełniłem błąd?

sebastian
źródło

Odpowiedzi:

17

Korzystając z ffmpeg, istnieje kilka metod przejścia ze stereo na dwa pojedyncze pliki mono lub dwa strumienie mono w jednym pliku:

wyjścia stereo na 2 mono

wyjścia stereo na 2 mono

-map_channel opcja

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

pan filtr 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 do 2 strumieni mono

channelsplit filtr audio

stereo do 2 strumieni mono

Spowoduje to utworzenie jednego pliku wyjściowego, który ma dwa pojedyncze strumienie mono:

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

Zobacz także

Llogan
źródło
Dziękuję, znalazłem moją wadę. Kiedy -map_channelużywałem, nie użyłem pojedynczych kropek, ale zamiast tego użyłem podwójnych kropek, więc nic dziwnego, że to nie zadziałało. Teraz działa!
sebastian
1
załóżmy, że mam plik z 6 kanałami w jednym strumieniu, skąd mam wiedzieć, który kanał jest który? Kiedy mam 2 kanały, jest to łatwe, to zawsze 0.0.0 w lewo i 0.0.1 w prawo. Poszukałem dokumentacji ffmpeg i mówi ona, -layoutsale nie ma przykładu, jak to działa. Próbowałem i komunikat, który otrzymuję, jest Missing argument for option 'layouts'tym, czego oczekuje ffmpeg?
sebastian
@sebastian Chcesz stworzyć sześć plików wyjściowych mono z wejścia sześciokanałowego?
llogan
Mam dwa lub trzy klipy, które mają dźwięk przestrzenny 5.1 i oczywiście po użyciu map_channel na wszystkich sześciu z nich nie mogę powiedzieć, który map_channel należy do której pozycji, oto przykład: Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEale myślę, że już znalazłem rozwiązanie za ten problem.
sebastian
@sebastian Jakie jest twoje rozwiązanie?
llogan
1

W tym celu należy użyć filtru z podświetleniem kanału . -map nie może tego zrobić. Na przykład:

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

Sprawdź link do dostarczonej dokumentacji.

ptQa
źródło