ปัญหาคือผู้ทำวิดีโอในอูบุนตูมีปัญหากับคำบรรยายกลางยุโรปแบบบูรณาการการแก้ปัญหาคือการแยกมันออก ไม่มีใครรู้ว่ามีคำสั่งใน terminal หรือโปรแกรมที่จะแยกคำบรรยายจากไฟล์ mkv หรือไม่?
ปัญหาคือผู้ทำวิดีโอในอูบุนตูมีปัญหากับคำบรรยายกลางยุโรปแบบบูรณาการการแก้ปัญหาคือการแยกมันออก ไม่มีใครรู้ว่ามีคำสั่งใน terminal หรือโปรแกรมที่จะแยกคำบรรยายจากไฟล์ mkv หรือไม่?
คำตอบ:
ติดตั้งด้วยmkvtoolnix
sudo apt-get install mkvtoolnix
เรียกใช้จากเทอร์มินัล: mkvextract tracks <your_mkv_video> <track_numer>:<subtitle_file.srt>
ใช้mkvinfo
เพื่อรับข้อมูลเกี่ยวกับแทร็ก
การใช้ยูทิลิตี้นี้คุณสามารถแยกแทร็กใด ๆ รวมถึงเสียงหรือวิดีโอ
mkvextract
กำหนดรูปแบบออกไฟล์ตามประเภทแทร็คไม่ขยายกำหนด (เพื่อตรวจสอบประเภทตามการรายงานmkvmerge -i <filename>
)
คุณสามารถใช้ 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
บันทึกชื่อสคริปต์นี้ youwant.sh และทำให้สามารถเรียกใช้งานได้
ขณะนี้อยู่ในไดเรกทอรีการเปลี่ยนแปลงเทอร์มินัลไปยังโฟลเดอร์สคริปต์และเขียน
./nameyouwant.sh /pathtosave
mkvinfo
ตามที่ระบุไว้เช่น "หมายเลขการติดตาม: 2 (รหัสการติดตามสำหรับ mkvmerge & mkvextract: 1)" ซึ่งทำให้เกิดความสับสน ใช้mkvmerge -i <filename>