जवाबों:
ffmpeg -i file.mp4
यह देखने के लिए कि आपकी फ़ाइल में कौन-सी धाराएँ मौजूद हैं, पहले चलाएँ । आपको कुछ इस तरह से देखना चाहिए:
Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
फिर ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
वीडियो स्ट्रीम और 2 के ऑडियो स्ट्रीम को कॉपी करने के लिए रन करें new_file.mp4
।
Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.
: इसे ठीक करने के लिए केवल तर्कों के क्रम को इस प्रकार बदलें:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
-c copy
ऑडियो, वीडियो के लिए समान धाराओं के लिए, लेकिन यह भी उपशीर्षक: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
।
संबंधित समस्या- किसी mp4 फ़ाइल से सभी ऑडियो ट्रैक्स को हटाया जा सकता है:
ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
लेकिन मैंने उन झंडों को जोड़ा है और यह अभी भी वही है ...?
स्ट्रीम नंबर पहचानें:
$ ffmpeg -i in.mp4
...
Stream #0:0: Video: ...
Stream #0:1: Audio: ...
Stream #0:2: Audio: ...
-map _file_:_stream_
प्रक्रिया और आउटपुट के लिए कौन सी स्ट्रीम चुनने के लिए उपयोग करें
$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4
आप कोशिश कर सकते हैं avidemux
जो आंतरिक रूप से केवल एक ऑडियो फ़ाइल को संभालता है (और इसलिए आपको एक विशिष्ट ट्रैक का चयन करने के लिए मजबूर करता है)। मैंने इसे कभी भी .mp4 के साथ आज़माया नहीं है, लेकिन यह अन्य प्रारूपों के साथ काम करता है।
मैंने कई बार AVIDemux (GUI) और ffmpeg (कंसोल) का इस्तेमाल किया।
एविडेमक्स में, आप मुख्य मेनू में "ऑडियो" -> "ट्रैक चुनें" चुनें; फिर आपको एक नई फ़ाइल के रूप में वीडियो सहेजें।
दिलचस्प रूप से पर्याप्त है, कुछ मामलों में एवीडेमक्स ने ffmpeg की तुलना में "बेहतर" उत्पादन किया।
बस के मामले में, एवीडेमक्स और ffmpeg मानक फेडोरा लिनक्स रिपॉजिटरी में हैं। (मुझे यकीन है कि वे अन्य लिनक्स फ्लेवर में भी मानक हैं।)
-vn
या -an
सभी वीडियो या ऑडियो ट्रैक्स को हटा देगा। सप्लीमेंट -vn -acodec copy
वीडियो हटा देगा; -an -vcodec copy
सभी ऑडियो को हटा देगा।
-vcodec copy
निर्दिष्ट करता है कि ffmpeg को मौजूदा वीडियो ट्रैक की एक सीधी प्रतिलिपि करना चाहिए (और इसका कोई प्रसंस्करण / एन्कोडिंग नहीं करना चाहिए)। यदि आप इसे निर्दिष्ट नहीं करते हैं, तो यह अभी भी काम करेगा लेकिन ffmpeg मौजूदा वीडियो ट्रैक को फिर से एन्कोड कर सकता है और ऑपरेशन अधिक CPU का उपयोग करेगा और काफी लंबा समय ले सकता है।
कमांड-लाइन में avidemux का उपयोग करना।
(Avidemux जीयूआई में, जैसा कि में वर्णित https://unix.stackexchange.com/a/85834/4319 ऊपर, तो आप बस / ऑडियो ट्रैक का चयन रद्द करें चयन करें, और फ़ाइल सहेजें। (सब कुछ नया AVI में कॉपी किया है।))
मैंने देखा है कि मेरे कार्यों के लिए स्पाइडरमोंकी या टिनीपी प्रॉजेक्ट्स के रूप में किस तरह की परियोजनाएं बचाई गई हैं, और यह पता चला है कि स्पाइडरमंकी (जावास्क्रिप्ट) परियोजना में ऑडियो ट्रैक चयन कार्यों का अभाव है, जिनकी मुझे आवश्यकता थी, लेकिन टाइनीपाय (पायथन) परियोजना ने किया था। उन्हें।
मैंने असंबंधित (अनावश्यक लाइनों के एक दर्जन) सब कुछ हटा दिया, और यही मेरे पास है some_series.py
:
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.audioClearTracks()
adm.audioAddTrack(1)
यह ट्रैक 1 को छोड़ देता है, लेकिन ट्रैक 0 को छोड़ देता है।
फिर मैंने इस तरह की कमांड के साथ कई फाइलों का बैच रूपांतरण चलाया:
for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done
यह सब कुछ कॉपी करता है, लेकिन सभी ऑडियो ट्रैक की जरूरत है।
कमांड-लाइन से एविडेमक्स चलाने का तरीका मेरे द्वारा https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing से सीखा गया था , हालांकि वे पायथॉन स्क्रिप्ट्स का उल्लेख नहीं करते हैं, केवल JS वाले ( जो मेरे लिए काम नहीं करता था)।
FFMPEG आपके लिए एक उपयोगी समाधान हो सकता है।
$ man ffmpeg