воскресенье, 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 комментариев:

GiNeR комментирует...

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

m3 комментирует...

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

у меня Ubuntu 9.10 (karmic)

Конищев Дмитрий комментирует...

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

m3 комментирует...

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

Конищев Дмитрий комментирует...

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

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

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

Pe1ro комментирует...

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

Пользуюсь xfce.

Конищев Дмитрий комментирует...

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