jak mapować i wyciszyć kanały w strumieniu stereo? [ffmpeg]

0

ze strony podręcznika ffmpeg powinienem być w stanie użyć -map_channel do dzielenia / wyciszania kanałów, chyba że strumień zawiera dosłownie 2 kanały, mapa nie działa.

01.mp3:

Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s

ffmpeg -threads 1 -i 01.mp3 -map_channel 0.0.1 -map_channel -1 01R.mp3 nie będzie działać:

Stream #0:0 -> #0:0 [ch: 1 M] (mp3 -> libmp3lame)

jednak 01R.mp3 nadal będzie strumieniem stereo, który zawiera zarówno kanały L, jak i R.

Jeśli przekonwertuję plik mp3 na wav, stanie się on dwukanałowym strumieniem:

ffmpeg -threads 1 -i 01L.mp3 01LR.wav
    Stream mapping:
      Stream #0:0 -> #0:0 (mp3 -> pcm_s16le)
ffprobe 01LR.wav
Input #0, wav, from '01LR.wav':
  Duration: 00:40:20.42, bitrate: 1411 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s

Mogę wyciszyć / podzielić plik WAV.

Jak mogę wyciszyć / podzielić strumień stereo bez konwersji go najpierw do 2-kanałowego pliku wav?

Dzięki

[Edytuj] zgodnie z @LordNeckbeard:

$ ffmpeg -threads 1 -i 01.mp3 -map_channel 0.0.1 -map_channel -1 01R.mp3
ffmpeg version 0.10.12-7:0.10.12-1~precise1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr 26 2014 09:49:36 with gcc 4.6.3
  configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='7:0.10.12-1~precise1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
  libavutil      51. 35.100 / 51. 35.100
  libavcodec     53. 61.100 / 53. 61.100
  libavformat    53. 32.100 / 53. 32.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 61.100 /  2. 61.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
[mp3 @ 0x115f6e0] max_analyze_duration 5000000 reached at 5015510
Input #0, mp3, from '01.mp3':
  Metadata:
    title           : VTS_01_1
    author          : BT
    copyright       : Happy@2006
    comment         : 
    encoder         : Lavf53.32.100
  Duration: 00:40:20.42, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
Output #0, mp3, to '01R.mp3':
  Metadata:
    TIT2            : VTS_01_1
    author          : BT
    TCOP            : Happy@2006
    comment         : 
    TSSE            : Lavf53.32.100
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 [ch: 1 M] (mp3 -> libmp3lame)
Press [q] to stop, [?] for help
Truncating packet of size 1024 to 189ate= 128.0kbits/s    
Truncating packet of size 1024 to 1
size=   37820kB time=00:40:20.45 bitrate= 128.0kbits/s    
video:0kB audio:37820kB global headers:0kB muxing overhead 0.001381%

[Edytuj2] :

jak opisałem powyżej ffmpeg -i 01.mp3 -map_channel 0.0.1 01R.wavlub ffmpeg -i 01.wav -map_channel 0.0.1 01R.mp3zadziała. Ale ffmpeg -i 01.mp3 -map_channel 0.0.1 01R.mp3nie działa.

Znalazłem sposób, aby zrobić kanał mono mp3, dodając -ac 1: ffmpeg -i 01.mp3 -ac 1 -map_channel 0.0.1 01R.mp3

Jednak użycie -map_channel -1wyciszenia jednego kanału w strumieniu wyjściowym stereo nadal nie działa.

Wang
źródło
Pokaż pełne ffmpegdane wyjściowe konsoli pierwszego polecenia.
llogan
Dzięki za wyjście z konsoli, ale jestem zdezorientowany co do tego, co chcesz zrobić. Czy chcesz wyciszyć kanał i uzyskać efekt stereo, czy po prostu jeden z kanałów i wynik monofoniczny?
llogan
w obu przypadkach wystarczy: wyciszyć kanał stereo lub wyodrębnić jeden kanał, aby utworzyć wyjście monofoniczne.
Wang

Odpowiedzi:

0

Wycisz kanał

wycisz kanał

Ten przykład pobiera sygnał stereo i wycisza lewy kanał. Wyjście pozostaje stereo:

ffmpeg -i stereo.wav -map_channel -1 -map_channel 0.0.1 output.wav

Kanał stereo do mono

Kanał stereo do wyjścia mono

Ten przykład tworzy wyjście monofoniczne z lewego kanału wejścia stereo:

ffmpeg -i stereo.mp3 -map_channel 0.0.0 left.wav
  • Użyj, -map_channel 0.0.1jeśli zamiast tego chcesz wybrać odpowiedni kanał.

Lub możesz użyć filtru panoramy audio :

ffmpeg -i stereo.m4a -af "pan=1:c0=c0" left.flac
  • Użyj, pan=1:c0=c1jeśli zamiast tego chcesz wybrać odpowiedni kanał.
Llogan
źródło
jaka jest różnica między twoją odpowiedzią a poleceniami, których użyłem w swoim poście? -map_channel nie działa zgodnie z oczekiwaniami ze strumieniem stereo. Działa tylko wtedy, gdy jest to strumień 2-kanałowy. -afNie uzyskać obsługiwane do znacznie późniejszym wydaniu.
Wang
czy możesz wypróbować kanał -map_channel ze strumieniem stereo i wyjściem w formacie mp3? To nie zadziała, jak powiedziałem, wiedziałem, że mogę przekonwertować na wav, a następnie na mp3, ale chcę wyeliminować etap pośredni.
Wang
@Wang Użyj najnowszego ffmpeg. Nie mogę zapewnić wsparcia dla starych oddziałów.
llogan