MKV फ़ाइल से ऑडियो स्ट्रीम कैसे निकालें?


16

मैं एक MKV (Matroska) फ़ाइल से अनावश्यक ऑडियो स्ट्रीम निकालने की कोशिश कर रहा हूं। मैं ऐसा क्यों करना चाहता हूं इसका कारण विंडोज मीडिया प्लेयर में मैन्युअल रूप से वांछित स्ट्रीम का चयन करने से बचना है।

इनपुट फ़ाइल निम्नलिखित ffmpeg जानकारी देती है:

Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000

जब से मैं धाराएँ 0, 1 और 3 (उप) चाहता हूँ, मेरा ffmpeg कमांड इस तरह दिखता है:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv

जो अजीब तरह से त्रुटि देता है:

At least one output file must be specified

उपशीर्षक हटाना:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv

मुझे यह देता है:

Number of stream maps must match number of output streams

मुझे लगता है कि मैं वास्तव में नहीं समझता कि "मैप" विकल्प कैसे काम करता है। किसी ने मुझे यह पता लगाने में मदद करेगा?

जवाबों:


25

यदि आप सब करना चाहते हैं तो एक स्ट्रीम हटाएं, फिर से एनकोड न करें, आप शायद MKVtoolnix पैकेज के साथ ऐसा करना चाहते हैं (देखें videohelp.com का पेज )।

GUI के कुछ जोड़े हैं जो आपकी मदद कर सकते हैं (videohelp लिंक पर जाँच करें)। मुझे यकीन नहीं है कि सटीक mkvmergeकमांडलाइन क्या हो सकती है, लेकिन मुझे लगता है कि ऐसा कुछ काम करेगा:

# first, get audio track info so we know which one to keep
mkvmerge -i input.mkv
File 'input.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AAC)
Track ID 3: audio (A_AAC)        <----------- for example, let's keep this one
Track ID 4: audio (A_AAC)

mkvmerge -o output.mkv --atracks 3 input.mkv

वह चाल चलनी चाहिए (मेरे पास परीक्षण के लिए फ़ाइल काम नहीं है, क्षमा करें)। --atracksविकल्प बताता mkvmergeकॉपी करने के लिए केवल सूचीबद्ध नई फ़ाइल में ऑडियो ट्रैक। यदि आप 2 और 3 रखना चाहते हैं, लेकिन 4 नहीं, तो आप उपयोग कर सकते हैं --atracks 2,3

mkvmergeशीर्षक सेट करने के लिए ऑडियो सिंक करने आदि में देरी के लिए कई अन्य विकल्प हैं, इसलिए विवरण के लिए मैनपेज की जांच करें।


5
ऐसा लगता है कि --atracksविकल्प अब मौजूद नहीं है, इसके बजाय एक का उपयोग करना चाहिए --audio-tracksया --video-tracks
मालत

0

-fनिर्दिष्ट प्रारूप को लागू करने का प्रयास करें :

ffmpeg -i input.mkv -map 0: 0 -map 0: 1 -map 0: 3 -vcodec copy -acodec libmp3lame -newsubtitle -f mkv test.mkv

यह अजीब तरह से मुझे त्रुटि देता है: "कम से कम एक आउटपुट फ़ाइल निर्दिष्ट की जानी चाहिए"
स्टैक्डक्रॉक्ड

एक पूर्ण पथ का उपयोग करने का प्रयास करें, अर्थात: C: \ path \ to \ output.mkv (मुझे लगता है कि आप मीडिया प्लेयर संदर्भ द्वारा विंडोज़ पर हैं)
जॉन टी

@ जॉन टी: पूर्ण पथ का उपयोग करना (उद्धरण के साथ या बिना) अभी भी मुझे "कम से कम एक आउटपुट फ़ाइल निर्दिष्ट करनी चाहिए" त्रुटि संदेश देता है।
स्टैक्डक्रॉक्ड

0

यहाँ वास्तव में दो अलग-अलग मुद्दे हैं:

  1. पहली कमांड लाइन में, मापदंडों का क्रम गलत हो सकता है। मुझे लगता है -newaudioकि आउटपुट फ़ाइल नाम के बाद स्विच को अंत में होना चाहिए।

  2. दूसरी कमांड लाइन, "रिमूवल रिमूवल", चूंकि इनपुट फ़ाइल में सबटाइटल है, आपको -snउन्हें हटाने के लिए स्विच का उपयोग करना होगा। अन्यथा, ऐसा लगता है कि FFmpeg -mapसूची में कम से कम एक निर्दिष्ट करना चाहता है ।


0

आपके पहले आदेश में, आपने यह नहीं बताया कि test.mkv आपकी आउटपुट फ़ाइल थी। ऐसा लगता है कि आपको उस भाग को बदलने की आवश्यकता है जैसे ... -c copy test.mkvकि कोडेक जैसा होना या निर्दिष्ट करना ... -c:s copy test.mkv

और यह निश्चित नहीं है कि वह -newsubtitleझंडा वहां क्या कर रहा है। लेकिन अगर आपके पास एक उपशीर्षक फ़ाइल है जिसे आप जोड़ना चाहते हैं, तो आपको एक और इनपुट फ़्लैग करने में सक्षम होना चाहिए -i input.srt। उसके लिए यह लिंक देखें ।

आपकी दूसरी कमांड में, मुझे लगता है कि ऐसा लगता है कि आप वीडियो स्ट्रीम को मैप करने की कोशिश कर रहे हैं और इसे कॉपी करने की कोशिश कर रहे हैं। तो आप -vcodec copyनिर्देश को हटाने की कोशिश करना चाह सकते हैं और यह सिर्फ काम करना चाहिए। :)


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