Воспроизведение субтитров автоматически с помощью mpv

Файлы субтитров входят в различные форматы: от .srt до .sub до .ass и т. Д. И т. Д. Есть ли способ сказать mpv для поиска файлов субтитров вместе с медиа-файлами, и если он начнет автоматически воспроизводить файл. В настоящее время я должен сделать что-то вроде этого, которое может быть довольно длинным в зависимости от имени файла –

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

Посмотрите вперед к ответам.

  • Что означает выход 99?
  • Как установить LANG в локали, несмотря на то, что он находится в / etc / default / locale в ubuntu для поддержки Unicode?
  • Выполните вывод команды, если она успешна
  • Проверьте входящий поток на пустые пространства и переместите его
  • Как удалить все подкаталоги из каталога?
  • Объединение зависимостей со сценариями оболочки
  • Обновление 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%) AV: 0.000 

    Самая интересная строка:

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

    Теперь, если файл был как .ass или .sub с тем же именем файла, это не сработает. Я пробовал это во многих медиафайлах, которые имеют эти расширения, и каждый раз mpv загружает видео и аудио, а также протоколы, но не внешние файлы субтитров.

    Обновление 2 – часть скрипта .ass указана как ошибка в bts mpv – https://github.com/mpv-player/mpv/issues/2846

    Обновление 3 – Пробовали отлаживать с помощью upstream, подавали https://github.com/mpv-player/mpv/issues/3091 для этого.

    Кажется, что это не mpv, а ответственный, но ffmpeg (и libavformat), который должен декодировать субтитры. Следовательно, добавили к нему ffmpeg.

  • Найти команды / функцию, имя которой соответствует значению
  • Являются ли два файла жестко привязанными?
  • Кодировать с ffmpeg с помощью avi to mp4
  • .htaccess переписать не работает?
  • Изменение моего каталога по умолчанию в passwd меняет мое приглашение
  • Статический IP-адрес для 2 ПК на кроссовом кабеле в интерфейсах (5)?
  • 2 Solutions collect form web for “Воспроизведение субтитров автоматически с помощью mpv”

    Как видно в 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 .

    Я использую простую функцию:

     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: 
    Linux и Unix - лучшая ОС в мире.