केवल बाएं चैनल का उपयोग करके मोनो के लिए Ffmpeg ऑडियो स्टीरियो


12

मैं '.MTS' रिकॉर्ड (वीडियो) के वीडियो भागों को निकालने के लिए निम्न कमांड का उपयोग करता हूं।

ffmpeg -i 00402.MTS -s 1280x720 -r 25 -ss 0:00:05.38608 -vcodec libxvid -qscale:v 2 -acodec ac3 -ar 48000 -ab 256k -t 0:00:06.613917 m001_mono.avi

ऑडियो स्ट्रीम स्टीरियो है, लेकिन सही चैनल ने केवल शोर रिकॉर्ड किया है। यहाँ इनपुट informations हैं:

Stream #0.0[0x1011]: Video: h264 (High), yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0.1[0x1100]: Audio: ac3, 48000 Hz, stereo, s16, 256 kb/s

मैं आउटपुट की ऑडियो स्ट्रीम मोनो होना चाहता हूं (केवल मूल बाएं चैनल के साथ)। मैंने पहले ही '-ac 1' विकल्प का उपयोग करके परीक्षण किए थे, लेकिन इस मामले में दोनों चैनल विलीन हो गए हैं और मुझे ~ 6dB का लाभ हुआ।

मोनो ऑडियो स्ट्रीम के साथ सही चैनल और आउटपुट को छोड़ने के लिए मुझे किस विकल्प का उपयोग करना चाहिए?

संपादित करें: map_channel विकल्प के साथ ffmpeg आउटपुट

/home/eric/buildsys/ffmpeg-2.0.1/ffmpeg -i 00402.MTS -s 1280x720 -r 25 -ss 0:00:05.38608    -vcodec libxvid -qscale:v 2 -acodec ac3 -ar 48000 -ab 256k -t 0:00:06.61391 -map_channel -1 -map_channel 0.1.0 m001_test.avi
ffmpeg version 2.0.1 Copyright (c) 2000-2013 the FFmpeg developers
 built on Sep 24 2013 05:31:18 with gcc 4.8 (Debian 4.8.1-10)
configuration: --extra-cflags=-I../static/include --extra-ldflags='-L../static/lib -static' --enable-gpl --enable-version3 --enable-static --disable-shared --disable-debug --enable-runtime-cpudetect --enable-libmp3lame --enable-libx264 --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libfreetype --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --disable-ffserver
libavutil      52. 38.100 / 52. 38.100
libavcodec     55. 18.102 / 55. 18.102
libavformat    55. 12.100 / 55. 12.100
libavdevice    55.  3.100 / 55.  3.100
libavfilter     3. 79.101 /  3. 79.101
libswscale      2.  3.100 /  2.  3.100
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  3.100 / 52.  3.100
Input #0, mpegts, from '00402.MTS':
Duration: 00:01:18.25, start: 0.455556, bitrate: 12217 kb/s
Program 1 
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 256 kb/s
File 'm001_test.avi' already exists. Overwrite ? [y/N] y
-map_channel is forwarded to lavfi similarly to -af pan=0x3:c1=c0.
[pan @ 0x248a560] This syntax is deprecated. Use '|' to separate the list items.
[pan @ 0x248a560] Pure channel mapping detected: M 0
Output #0, avi, to 'm001_test.avi':
Metadata:
ISFT            : Lavf55.12.100
Stream #0:0: Video: mpeg4 (libxvid) (xvid / 0x64697678), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 256 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libxvid)
Stream #0:1 -> #0:1 (ac3 -> ac3)
Press [q] to stop, [?] for help
frame=  166 fps= 23 q=2.0 Lsize=    4012kB time=00:00:06.64 bitrate=4950.3kbits/s    
video:3787kB audio:207kB subtitle:0 global headers:0kB muxing overhead 0.464949%

जवाबों:


12

आप वीडियो स्ट्रीम को फिर से एनकोड किए बिना सीधे एक वीडियो फ़ाइल को संशोधित कर सकते हैं। हालाँकि ऑडियो स्ट्रीम को फिर से एनकोड करना होगा।

मोनो के लिए बाएं चैनल:

ffmpeg -i video.mp4 -map_channel 0.1.0 -c:v copy mono.mp4

स्टीरियो के लिए बाएँ चैनल:

ffmpeg -i video.mp4 -map_channel 0.1.0 -map_channel 0.1.0 -c:v copy stereo.mp4

यदि आप सही चैनल का उपयोग करना चाहते हैं, तो 0.1.1इसके बजाय लिखें 0.1.0

Ffmpeg संस्करण 3.1.3 के साथ काम करना।



उल्लेख के लायक यह है कि जब -c:a copyऑडियो के साथ उपयोग करना संशोधित नहीं किया जाएगा, भले ही आप एकल चैनल की सीधी प्रतिलिपि चाहते हैं।
19

4

निम्नलिखित ffmpeg संस्करण 2.4.1-tessus के साथ काम करने की पुष्टि की गई मिसाल है:

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

FFMPEG के ऑडियो चैनल पेज पर अधिक जानकारी ।


BTW किसी को भी स्टीरियो पर वापस जाने के अतिरिक्त कदम की जरूरत है, लेकिन दोनों चैनलों का फुल वॉल्यूम रहना (यानी, मूल रूप से बाएं चैनल को दाएं चैनल को ओवरटॉप करके कॉपी करना), आप कर सकते हैंffmpeg -i inputfile.wav -map_channel 0.0.0 -map_channel 0.0.0 outputfile.wav
केव

2

Ffmpeg के साथ ऑडियो चैनलों में हेरफेर

चैप्टर म्यूट एक चैनल

यह उदाहरण पहले चैनल (बाएं चैनल) को म्यूट करेगा लेकिन दूसरा चैनल इस प्रकार है:

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

आपके मामले में सही चैनल को म्यूट करने की आवश्यकता है। सही?


अपरिचित विकल्प 'map_channel'।
एरिक

1
@ एरिक मैं अनुमान लगा रहा हूं (क्योंकि आपने आउटपुट को शामिल नहीं किया है) कि आपका ffmpeg संस्करण बहुत पुराना है, या यह वास्तव में Libav से है और FFmpeg से नहीं । एक नए के साथ प्रयास करें: ffmpeg.org/download.html
slhck

@AcherGodson - क्या हम उसी ffmpeg coammnd को संशोधित करके म्यूट किए गए चैनल को अनम्यूट कर सकते हैं
Prakash V Holkar

2

मैंने Ffmpeg (2.0.1) के अंतिम संस्करण का उपयोग करके समस्या को हल किया। निम्नलिखित कमांड लाइन काम करती है:

/home/eric/buildsys/ffmpeg-2.0.1/ffmpeg -i 00402.MTS -s 1280x720 -ss 0: 00: 05.38608 -vcodec libxvid -qscale: v 2 -acodec ac3 -ar 48000 -ab 256k -t 0: 0 00: 06.61391 -फ पैन = 1: c0 = c0 m001_mono.avi

Btw, यह पोस्ट बहुत शिक्षाप्रद था!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.