Иногда я скачиваю файлы с Youtube, чтобы смотреть их на телевизоре. Иногда это бывают сериалы. В таких случаях мне пригождается несколько утилит: cclive, mpv и rename. Рассмотрим их использование на примере мультсериала Гравити Фоллз.
cclive - это утилита командной строки, при помощи которой можно скачать ролик с Youtube. Утилита есть в репозиториях Debian, поэтому установить её очень легко. Для этого нужно установить одноимённый пакет:
# apt-get install cclive
Использование очень простое - надо вызвать эту программу, указав ей в качестве аргумента ссылку на страницу Youtube с роликом. Стоит заключить ссылку в одиночные кавычки, чтобы знаки амперсанда и вопроса не интерпретировались оболочкой:
$ cclive 'https://www.youtube.com/watch?v=uKjjDctxD6w&list=PLVtYY3Ujl33NFDWuw_E-OJcngyWayn7pA'
После скачивания в текущем каталоге появится файл с именем "Гравити Фолз Зомбикараоке Серия 1 Сезон 2.webm".
Мой медиаплеер WD TV Play, про который я ранее уже писал в заметке Настройка MiniDLNA для цифрового мультимедийного плеера WD TV Play и при помощи которого я смотрю видео на телевизоре, имеет ограниченную поддержку видеоформатов и кодеков. В частности, он не умеет воспроизводить видео в контейнере WebM, не поддерживает кодеки VP8 и Vorbis. Чтобы просматривать такие ролики на этом плеере, их нужно перекодировать. Пожалуй самым широко распространённым сочетанием контейнеров и кодеков, которое поддерживается большинством видеоплееров, являются контейнер AVI и кодеки MPEG4 и MP3.
Ранее в целях перекодирования видео я пользовался утилитой mencoder, которая разрабатывалась вместе с видеоплеером mplayer. Одно из достоинств этой утилиты заключалось в том, что она поддерживала двухпроходное кодирование, что позволяло достичь наилучшего качества при необходимости уместить результат в файл определённого размера. Это было очень полезно для перекодирования DVD-дисков в 700-мегабайтные AVI-файлы, которые умещались на компакт-диск. В репозиториях Debian Jessie пакет mencoder отсутствовал, поэтому тогда я подыскал замену для mencoder'а - утилиту mpv, которая совмещает в себе как функции видеоплеера, так и функции перекодировщика.
Установим mpv при помощи команды:
# apt-get install mpv
Теперь внесём ряд правок в файл /etc/mpv/encoding-profiles.conf с настройками профилей перекодирования.
Во-первых, я задал битрейт 128 килобит/с, частоту дискретизации 22 килогерца - для фильмов этого, как правило, бывает достаточно и 16-битные целочисленные отсчёты со знаком:
[enc-a-mp3] profile-desc = "MP3 (LAME)" oac = libmp3lame oacopts = b=128k audio-samplerate = 22050 audio-format = s16
Во-вторых, задал изменение соотношения сторон видео. Для телевизоров с электронно-лучевой трубкой не имеет особого смысла делать ширину видео более 720 пикселей, т.к. физическое разрешение электронно-лучевой трубки такого телевизора составляет 768x576 пикселей. На деле размер видимой области может оказаться и того меньше - 640x480 пикселей. В настройках укажем, что ширина видео должна равняться 720 пикселям, а высота должна рассчитываться исходя из отображаемого на экране соотношения сторон. Бывает что видео имеет не квадратный пиксель и при отображении дополнительно растягивается, чтобы убрать искажения. Опция предписывает использовать именно отображаемое соотношение сторон, чтобы при воспроизведении видео не нужно было масштабировать с разными коэффициентами по разным осям.
[enc-v-mpeg4] profile-desc = "MPEG-4 Part 2 (FFmpeg)" ovc = mpeg4 ovcopts = qscale=4 vf = scale=720:-2
В-третьих, оба профиля объединяются в один общий:
[enc-f-avi] profile-desc = "MPEG-4 + MP3 (for AVI)" of = avi ocopyts = no oautofps = yes profile = enc-v-mpeg4 profile = enc-a-mp3 ofopts-clr = yes
Перекодировать видео с использованием этого профиля можно при помощи такой команды:
$ mpv --profile=enc-f-avi "Гравити Фолз Зомбикараоке Серия 1 Сезон 2.webm" -o "Гравити Фолз Зомбикараоке Серия 1 Сезон 2.avi"
Для последовательного перекодирования всех файлов с расширением webm в текущем каталоге можно воспользоваться таким однострочным скриптом:
$ ls *.webm | while read webm ; do avi=`echo "$webm" | sed 's/\.webm$/\.avi/g'` ; mpv --profile=enc-f-avi "$webm" -o "$avi" ; done
rename - это утилита командной строки, позволяющая переименовывать файлы в соответствии с регулярными выражениями в стиле Perl. К слову, сама утилита представляет собой крохотный скрипт на Perl, использующий пару модулей. Утилита написана самим "великим и ужасным" Ларри Уоллом, если вам это о чём-то говорит. Утилита, несмотря на кажущуюся простоту, очень мощная и удобная. Во всяком случае, для тех, кто знает регулярные выражения Perl. Тот самый случай, когда подход Unix одерживает верх надо всеми приложениями с графическим интерфейсом.
Установка, как и в предыдущих случаях, очень проста:
# apt-get install rename
Для отладки регулярного выражения для переименования файлов можно воспользоваться опцией n:
$ rename -n 's/^Гравити Фолз (.*) Серия (\d+) Сезон (\d+).avi$/Гравити Фолз, E$3S$2 - $1.avi/' *.avi
После того, как результат будет соответствовать ожиданиям, можно выполнить ту же команду уже без опции n:
$ rename 's/^Гравити Фолз (.*) Серия (\d+) Сезон (\d+).avi$/Гравити Фолз, E$3S$2 - $1.avi/' *.avi
Вот ещё пример регулярного выражения - к номерам серий, состоящим из одной цифры, слева добавляется ноль:
$ rename 's/^Гравити Фолз, E(\d+)S(\d{1}) - (.*)\.avi$/Гравити Фолз, E$1S0$2 - $3\.avi/' *.avi
Остаётся положить файлы в каталог, к которому имеет доступ minidlna, чтобы через медиаплеер файлы можно было просматривать на телевизоре.
P.S. Медиаплеер WD TV Play позволяет просматривать ролики с Youtube прямо из интернета, но мне такой способ просмотра не кажется удобным, поэтому я им не пользуюсь.