воскресенье, 8 ноября 2009 г.

Автоматическое скачивание субтитров

Недавно, скачивая субтитры к очередной серии Lie To Me, я задумался, нельзя ли как-нибудь автоматизировать эти довольно нудные действия (поиск субтитров для конкретной серии конкретного сериала, скачивание и переименование, чтобы файл с субтитрами имел такое же имя, как и видеофайл). Оказалось, что можно.

Специально для этого существует SubDownloader. Программа имеет графический интерфейс и интерфейс командной строки и полностью автоматически выкачивает субтитры для всех видеофайлов в указанной вами директории (или для одного видеофайла).

Правда, мне показалось неудобным использовать ее графический интерфейс, и я решил пойти дальше, интегрировав запуск SubDownloader в меню Nautilus, чтобы для скачивания всех нужных мне субтитров мне было необходимо только два раза щелкнуть мышью. :)

Т. к. программа имеет CLI-интерфейс, то сделать это было предельно просто. Я написал небольшой скрипт:
#!/bin/bash

# Скачивает субтитры для всех файлов, находящихся в папке, путь к которой
# передан в качестве параметра.

video_dir="$1"
script_pid=$BASHPID

if ! which zenity > /dev/null 2>&1
then
    echo "Error! zenity must be installed." >&2
    exit 1
fi

if [[ $# -ne 1 || ! -d "$video_dir" ]]
then
    zenity --error --title="Subtitle downloader usage error" \
        --text="Subtitle downloader usage error. Program takes a path to a directory with video files as a parameter."
    exit 1
fi

if ! which subdownloader > /dev/null 2>&1
then
    zenity --error --title="Subtitle downloader error" \
        --text="SubDownloader (http://subdownloader.net/) must be installed."
    exit 1
fi

subdownloader --cli --lang=eng --rename-subs --video="$video_dir" 2>&1 | {
    while read line
    do
        echo "$line"
        echo "$line" >&2
    done
} | {
    if ! zenity --progress --pulsate --auto-close \
        --title="Subtitle downloader" \
        --text="Downloading subtitles for the '$video_dir'..."
    then
        kill $script_pid
    fi
}
и добавил в Nautilus-Actions следующее действие:




Все. Теперь я в Nautilus перехожу в любую директорию, содержащую видеофайлы, для которых необходимо скачать субтитры:


кликаю по элементу меню File->Download subtitles:


жду, пока субтитры скачаются:


и получаю то, что мне нужно:


Теперь можно смотреть эти серии при помощи submplayer. :)

Единственное, что надо отметить, SubDownloader 2.0.9.3 который был у меня в Ubuntu 9.10 почему-то отказывался переименовывать субтитры, чтобы их имена совпадали с именами видеофайлов (с GUI-интерфейсом таких проблем не было). Поэтому я установил SubDownloader 2.0.10~beta1+bzr483 из PPA разработчиков, в которой эта ошибка уже устранена.

Удачи, надеюсь мой совет вам пригодится.

7 комментариев:

  1. Totem умеет качать сабы с opensubtitles.org

    ОтветитьУдалить
  2. Сделал всё по инструкции. Когда жму скачать субтитры, получаю такую ошибку: Subtitle downloader usage error. Program takes a path to a directory with video files as a parameter.

    у меня Ubuntu 9.10 (karmic)

    ОтветитьУдалить
  3. m3, сравните ваши настройки вот с этим скриншотом. В поле Parameters у вас должно стоять то же значение, что и на скриншоте ("%d/%f").

    ОтветитьУдалить
  4. Привет, Дмитрий!
    Скрипту передаётся один параметр — путь к папке. Если выполнять из терминала, то всё в порядке... из наутилуса выполнятьсяне хочет :(

    ОтветитьУдалить
  5. Ну даже не знаю... Сложно сказать неглядя. Тут одно из двух: либо вы все-таки что-то не правильно ввели в Nautilus Actions, либо вы наткнулись на какую-то забавную багу. :)

    Посмотрите, что именно Nautilus передает скрипту в качестве параметров, к примеру, подменив текущий скрипт вот таким:
    #!/bin/bash

    for i in $(seq 0 $#); do eval "arg=\$$i"; echo "$arg"; done | zenity --list --column=Arguments

    ОтветитьУдалить
  6. Я правильно понимаю, что на вкладке Conditions настраивается к каким файлам будет доступен данный пункт контекстного меню. У вас стоит на все. Можно ограничить только видео форматами для разумного минимализма. Можно из через запятую перечислить?

    Пользуюсь xfce.

    ОтветитьУдалить
  7. Pe1ro, ... а ниже помечена галочка "Only folders", так что меню настроено на все директории, а не на все файлы. Т. е. кликаю правой кнопкой по директории, в которой лежат серии, и у меня разом скачиваются субтитры для всех серий.

    ОтветитьУдалить