เล่นคำบรรยายโดยอัตโนมัติด้วย mpv


13

ไฟล์คำบรรยายมีหลายรูปแบบตั้งแต่. srt ถึง. sub ถึง. ass และอื่น ๆ มีวิธีที่จะบอก mpv เพื่อค้นหาไฟล์คำบรรยายพร้อมกับไฟล์สื่อและถ้ามันจะเริ่มเล่นไฟล์โดยอัตโนมัติ ขณะนี้ฉันต้องทำอะไรแบบนี้ซึ่งอาจจะค่อนข้างยาวขึ้นอยู่กับชื่อไฟล์ -

[$] mpv --list-options | grep sub-file                                                                                              
(null) requires an argument
 --sub-file                       String list (default: ) [file]

หวังว่าจะได้คำตอบ

อัปเดต 1 - ภาพยนตร์ทั่วไปที่มี. srt (หรือตัวห้อย)

[$] mpv Winter.Sleep.\(Kis.Uykusu\).2014.720p.BrRip.2CH.x265.HEVC.Megablast.mkv                                                    
(null) requires an argument
Playing: Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.mkv
 (+) Video --vid=1 (*) (hevc)
 (+) Audio --aid=1 (aac)
 (+) Subs  --sid=1 'Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.srt' (subrip) (external)
[vo/opengl] Could not create EGL context!
[sub] Using subtitle charset: UTF-8-BROKEN
AO: [alsa] 48000Hz stereo 2ch float
VO: [opengl] 1280x536 yuv420p
AV: 00:02:14 / 03:16:45 (1%) A-V:  0.000

บรรทัดที่น่าสนใจที่สุดคือ: -

(+) Subs  --sid=1 'Winter.Sleep.(Kis.Uykusu).2014.720p.BrRip.2CH.x265.HEVC.Megablast.srt' (subrip) (external)

ตอนนี้หากไฟล์นั้นเป็น. ass หรือ. sub ที่มีชื่อไฟล์เหมือนกันมันจะไม่ทำงาน ฉันได้ลองในไฟล์มีเดียหลายไฟล์ที่มีนามสกุลเหล่านั้นและทุกครั้งที่มีไฟล์วิดีโอและเสียงและโปรโตคอล แต่ไม่ได้เป็นไฟล์คำบรรยายภายนอก

อัปเดต 2 - ส่วนสคริปต์. ass แสดงรายการเป็นจุดบกพร่องที่ bts ของ mpv - https://github.com/mpv-player/mpv/issues/2846

อัปเดต 3 - พยายามดีบักด้วยความช่วยเหลือของอัปสตรีมยื่นhttps://github.com/mpv-player/mpv/issues/3091สำหรับสิ่งนั้น

ดูเหมือนว่ามันไม่ใช่ mpv ที่รับผิดชอบ แต่ ffmpeg (และ libavformat) ซึ่งควรจะถอดรหัสคำบรรยาย ดังนั้นได้เพิ่ม ffmpeg ไปด้วยเช่นกัน


หากไฟล์คำบรรยายมีชื่อเหมือนกับไฟล์สื่อ (นอกเหนือจากตัวห้อยแน่นอน) mpv จะใช้มันโดยอัตโนมัติฉันคิดว่า
Faheem Mitha

มันไม่ได้ ยกเว้น. srt จะไม่ทราบเกี่ยวกับผู้อื่น นี่คือ 0.14 dunno ถ้าสิ่งนี้ได้รับการแก้ไขใน 0.15, 0.16 หรือ 0.17 สามรุ่นหลังซึ่งยังไม่ได้อยู่ใน Debian
Shirish

โอ้ srtใช่ฉันมักจะใช้ คุณสามารถยื่นเรื่องเกี่ยวกับมัน
Faheem Mitha

มันควรจะค่อนข้างง่ายในการสร้างแพ็คเกจ Debian สำหรับการ0.17ใช้0.14บรรจุภัณฑ์ 0.14บรรจุภัณฑ์มี 4 แพทช์กับต้นน้ำ แต่พวกเขาส่วนใหญ่มีลักษณะค่อนข้างน่ารำคาญ
Faheem Mitha

คำตอบ:


15

เท่าที่เห็นในman mpv:

   --sub-auto=<no|exact|fuzzy|all>, --no-sub-auto
          Load additional subtitle files matching the video filename. The
          parameter specifies how external subtitle files are matched.
          exact is enabled by default.

          no     Don't automatically load external subtitle files.

          exact  Load the media filename with subtitle file extension
                 (default).

          fuzzy  Load all subs containing media filename.

          all    Load all subs in the current and --sub-paths directories.

exactจะดูเหมือนเป็นทางเลือกที่เหมาะสม แต่เนื่องจากมันเริ่มต้นและมันก็ไม่ได้โหลดไฟล์เช่น[video name minus extension].srt, fuzzyเป็นทางออกที่ดีที่สุดต่อไปและการทำงานในระบบของฉัน

echo "sub-auto=fuzzy" >> ~/.config/mpv/mpv.confดังนั้นเพียงแค่


2

ฉันใช้ฟังก์ชั่นง่าย ๆ :

mpvs() {
   local file="$1"
   mpv --sub-file="${file%.*}".srt "$file"
}

หากคุณต้องการทดสอบการมีไฟล์คำบรรยายที่มีนามสกุลต่างกันคุณสามารถใช้วิธีการที่ซับซ้อนมากขึ้น:

#!/usr/bin/env bash
# Play subtitles for a film if they exist

movie="$1"
mdir="${movie%/*}"
name="${movie##*/}"

cd "$mdir"
for file in *; do
  if [[ ${file%.*} == ${name%.*} ]]; then
    title="${file%.*}"
    for match in "$title"*; do
      if [[ $match =~ @*.(ass|srt|sub) ]]; then
        subtitles="$match"
      fi
    done
  fi
done

if [[ -n $subtitles ]]; then
  mpv --subfile="$subtitles" "$name"
else
  printf "%s\n" "No subs found, playing film anyway..."
  mpv "$name"
fi

# vim:set sw=2 ts=2 et:

jasonwryan ฉันต้องการทำให้มันง่ายและหวังว่าในไฟล์. config ฉันได้อัปเดตคำถามของฉันพร้อมข้อมูลเพิ่มเติมอีกด้วย
Shirish

@ shirish ฉันไม่สามารถจินตนาการอะไรได้ง่ายขึ้น และหากคุณต้องการในไฟล์ปรับแต่งคุณจะต้องเปิดคำขอคุณสมบัติ
jasonwryan

0

ถ้าคุณต้องการสร้างบางสิ่งเช่นนี้ (คลิกที่ไฟล์ใด ๆ ที่เกี่ยวข้องกับ mpv แล้วเล่นด้วยคำบรรยาย)

ภายใน/usr/share/applications/mpv.desktop:

     ...
     Exec=/home/username/custom_apps/mpv2.sh %F
     ...

จากนั้นภายในmpv2.shสคริปต์:

#!/usr/bin/env bash
subtitles=""
movie="$1"
mdir="${movie%/*}"
name="${movie##*/}"
dir="$(readlink -f "$1")"
mdir="${dir1%/*}"
for file in $mdir/*; do
  if [[ ${file%.*} == ${1%.*} ]]; then
    title="${file%.*}"
    for match in "$title"*; do
      if [[ $match =~ @*.(vtt|ass|srt|sub) ]]; then
        subtitles="$match"
      fi
    done
  fi
done
if [[ -n $subtitles ]]; then
        mpv "$mdir1" --sub-file="$subtitles"
else
    mpv "$name"
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.