Mkv फ़ाइलों से उपशीर्षक निकालें


39

समस्या यह है कि उबंटू के वीडियोग्राफरों को एकीकृत केंद्रीय यूरोपीय उपशीर्षक के साथ एक समस्या है। समाधान उन्हें निकालने के लिए है। क्या किसी को पता है कि टर्मिनल में कमांड है या mkv फाइल से उपशीर्षक निकालने का प्रोग्राम है?

जवाबों:


58

के mkvtoolnixसाथ स्थापित करें sudo apt-get install mkvtoolnix

टर्मिनल से चलाएं: mkvextract tracks <your_mkv_video> <track_numer>:<subtitle_file.srt>

mkvinfoपटरियों के बारे में जानकारी प्राप्त करने के लिए उपयोग करें ।

इस उपयोगिता का उपयोग करके आप किसी भी ट्रैक, यहां तक ​​कि ऑडियो या वीडियो को भी निकाल सकते हैं।


9
mkvinfo"ट्रैक नंबर: 2 (mkvmerge & mkvextract: 1) के लिए ट्रैक आईडी" जैसी चीजों का उपयोग न करें जो भ्रमित कर रहे हैं। उपयोगmkvmerge -i <filename>
gcb

यह भी ध्यान दें कि, डॉक्स में निर्दिष्ट के अनुसार , mkvextract ट्रैक प्रकार द्वारा फ़ाइल आउटपुट प्रारूप निर्धारित करता है, दिए गए एक्सटेंशन नहीं (इसलिए रिपोर्ट के अनुसार प्रकार की जांच करें mkvmerge -i <filename>)।
कार्टोग्राफर

सभी फ़ाइल कंटेनर के भीतर उपशीर्षक के डेटा (बाइट्स) रखे गए हैं? क्योंकि बड़ा वीडियो फ़ाइल को धीमा काम करता है ... (500mb 1 gb 4gb .mkv फ़ाइल) मैंने सोचा कि यह बहुत तेज़ी से काम करेगा और मुझे लगा कि उपशीर्षक 'बाइट्स को वीडियो कंटेनर फ़ाइल के विशिष्ट भाग में रखा गया है लेकिन ऐसा लगता है कि यह ffmpeg या mkvextract पढ़ता है सभी फ़ाइल और सब फ़ाइल पढ़ने के बाद ही सबटाइटल निकालें (यह बहुत धीमी है)
user25

2
@gcb और mkvmerge & mkvextract के लिए अंग्रेज़ी ट्रैक ID में यह कहने पर यह कैसे भ्रमित हो सकता है ? यह आसान है, बस mkvextract या mkvmerge के लिए उस ट्रैक आईडी का उपयोग करें। प्रोग्रामिंग में एरे की लंबाई और तत्वों का सूचकांक भी आपके लिए भ्रामक है?
user25

8

आप mkvtoolnix का उपयोग कर सकते हैं।

sudo apt-get install mkvtoolnix

अब एक और टिप क्योंकि mkv फ़ाइलों में कई सबटाइटल हो सकते हैं, इसलिए टिप यह स्क्रिप्ट है जिसे आप अपनी इच्छित भाषा की खोज कर सकते हैं, इसलिए उदाहरण के लिए यदि आप अंग्रेजी चाहते हैं तो यह सिर्फ अंग्रेजी डाउनलोड करेगा।

स्क्रिप्ट:

#!/bin/bash
# Extract subtitles from each MKV file in the given directory

# If no directory is given, work in local dir
if [ "$1" = "" ]; then
  DIR="."
else
  DIR="$1"
fi

# Get all the MKV files in this dir and its subdirs
find "$DIR" -type f -name '*.mkv' | while read filename
do
  # Find out which tracks contain the subtitles
  mkvmerge -i "$filename" | grep 'subtitles' | while read subline
  do
    # Grep the number of the subtitle track
    tracknumber=`echo $subline | egrep -o "[0-9]{1,2}" | head -1`

    # Get base name for subtitle
    subtitlename=${filename%.*}

    # Extract the track to a .tmp file
    `mkvextract tracks "$filename" $tracknumber:"$subtitlename.srt.tmp" > /dev/null 2>&1`
    `chmod g+rw "$subtitlename.srt.tmp"`


    # Do a super-primitive language guess: ENGLISH
    langtest=`egrep -ic ' you | to | the ' "$subtitlename".srt.tmp`
    trimregex=""



    # Check if subtitle passes our language filter (10 or more matches)
    if [ $langtest -ge 10 ]; then
      # Regex to remove credits at the end of subtitles (read my reason why!)
      `sed 's/\r//g' < "$subtitlename.srt.tmp" \
        | sed 's/%/%%/g' \
        | awk '{if (a){printf("\t")};printf $0; a=1; } /^$/{print ""; a=0;}' \
        | grep -iv "$trimregex" \
        | sed 's/\t/\r\n/g' > "$subtitlename.srt"`
      `rm "$subtitlename.srt.tmp"`
      `chmod g+rw "$subtitlename.srt"`
    else
      # Not our desired language: add a number to the filename and keep anyway, just in case
      `mv "$subtitlename.srt.tmp" "$subtitlename.$tracknumber.srt" > /dev/null 2>&1`
    fi
  done
done

इस लिपि nameyouwant.sh को सहेजें और इसे निष्पादन योग्य बनाएं

अब टर्मिनल में डायरेक्टरी को स्क्रिप्ट फोल्डर में बदलें और लिखें ./nameyouwant.sh /pathtosave


अजीब बात है, यह एक वीडियो के लिए काम नहीं किया, लेकिन यह काम किया जवाब में दिए गए आदेशों को निष्पादित करके।
११:५० बजे हांसु

निफ्टी स्क्रिप्ट के लिए धन्यवाद। क्या आप एक स्पष्टीकरण जोड़ सकते हैं कि आप सबटाइटल के अंत में क्रेडिट क्यों हटाते हैं? स्क्रिप्ट का वह हिस्सा मेरे लिए काम नहीं करता है और परिणाम एक खाली srt फ़ाइल में होता है।
m000

1
यह उत्तर computernerdfromhell.com से लिया गया लगता है । क्रेडिट निकालने का कारण दिया गया है: "उपशीर्षक के अंतिम कुछ पंक्तियों में डच सबटाइटलर्स को अपने क्रेडिट्स या शाउट-आउट में डालने की आदत है। इसके साथ कुछ भी गलत नहीं है, सिवाय इसके कि जब आखिरी लाइन के ठीक बाद बोला जाता है। फिल्म। फिल्म एक और 5 मिनट के लिए चल सकती है, मैं नहीं चाहता कि डॉगड्रेनब्रेन द्वारा बूगरगज़लर को चिल्ला-चिल्लाकर दिया जाने वाला एप्रोचिंग एंड दिया जाए, इसलिए मैं उन्हें एक और सरल रीगेक्स के साथ हटा देता हूं "
ड्रामा एस।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.