mpvで自動的に字幕を再生する


13

字幕ファイルには、.srt、.sub、.assなど、さまざまな形式があります。メディアファイルと一緒に字幕ファイルを検索するようにmpvに指示する方法はありますか?現在、私はファイル名によってはかなり長くなる可能性があるこのようなことをしなければなりません-

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

回答をお待ちしております。

Update 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である場合は、機能しません。私はそれらの拡張子を持つ多くのメディアファイルでそれを試しました、そして毎回mpvがビデオとオーディオとプロトコルをロードしますが外部の字幕ファイルはロードしません。

アップデート2-.assスクリプト部分は、mpvのbtsにバグとしてリストされています-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.15、0.16、または0.17で修正されている場合、これは0.14 dunnoにあります。後者の3つのリリースは、まだDebianには含まれていません。
2016

ああ。はい、常にを使用していますsrt。あなたはそれについて問題を提出することができます。
Faheem Mitha

パッケージを0.17使用するためのDebianパッケージを構築するのはかなり簡単なはず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ファイルに入れておきたいと思います。質問も更新しました。
2016

@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.