Страницы

пятница, 26 декабря 2014 г.

MP4 & MKV cover arts. Добавление обложек к фильму, в командной строке Ubuntu

Заметка приведена, для простейшего управления медиаколлекцией (видеотекой) в операционной системе Ubuntu server LTS 12.04.5, из командной строки на сервере HP proliant microserver (на любом Linux-сервере).

Данная возможность нужна для повышения удобства и вузальной привлекательности использования медиаколлекции на устройствах с операционными системами семейства Windows (7,8 и т.п.).

На микросервере есть запущенная служба MiniDLNA (ReadyMedia), которая указывает на каталог с видеофайлами, которые становяться доступны на компьютерах с Windows, в программах Windows Media Player (WMP) и Windows Media Center, а также аппаратного проигрывателя WD TV Live. Это простейшая служба без транскодирования. MiniDLNA просто предоставляет файлы по протоколу DLNA в локальной сети (широковещательный протокол, не выходит за роутер).

Обычно файлы в контейнерах MP4 и MKV не содержат ни метаинформации (сведений о фильме), ни обложки (cover art) и выводятся в интерфейсе проигрывателей в виде неизвестных файлов.
Исправим этот недостаток, в части обложек фильмов.
Где получить обложки - это не предмет этой заметки. Обычно их можно скачать автоматически или вручную с сайтов (imdb, tmdb и т.п.). Для Windows есть удобные утилиты.

Для исследовательских целей будем использовать образцы фильмов, т.н. трейлеры, свободно доступные для скачивания в сети Интернет.

MP4 cover arts. Обложки фильмов внутри формата MP4


Т.к. Windows Media Player (Windows Media Center) в большей степени поддерживает файлы в формате MP4 (отображает названия, жанр, оценки и т.п.), то можно сконвертировать все видеофайлы из формата MKV в формат MP4.

Для отдельного файла преобразование выполняется командой avconv из пакета libav-tools
$ avconv -i input.mkv -c:v copy -c:a acc -strict experimental output.mp4
Это простое преобразование, с перекодированием звуковой дорожки в поддерживаемый MP4-контейнером формат аудио.
Т.е. обычно (но не обязательно) MP4 - это H.264 и AAC. А MKV - это H.264 и AC3.
После этого WMP проигрывает и видео и звук в MP4-контейнере.
Звук после преобразования в экспериментальном режиме получается плохой, заикающийся.


Простая операция копирования из контейнера в контейнер возможна, если в MKV есть AAC-дорожка, тогда всё просто.


Установить пакет mp4v2-utils, который содержит несколько инструментов для редактирования метаинформации в видеофайлах - контейнерах стандарта MPEG4 - MP4.

$ sudo apt-get install mp4v2-utils

/usr/bin/mp4art
/usr/bin/mp4chaps
/usr/bin/mp4extract
/usr/bin/mp4file
/usr/bin/mp4info
/usr/bin/mp4subtitle
/usr/bin/mp4tags
/usr/bin/mp4track
/usr/bin/mp4trackdump

Простейшее добавление постера (обложки, cover art) к видеофайлу mp4:

$ mp4art --add tron-poster.jpg tron.mp4

После добавления обложки, можно добавить описание файла (теги, video tags).

$ mp4tags -a "Автор произведения" -s "Название" file.mp4

После этого, видеофайл будет иметь обложку в WMP, а также будет доступна возможность исправлять теги в свойстве файла проводника (встроенная поддержка контейнера MP4).


Свойства видео из контейнера MP4, в свойствах файла из Проводника.


Выкопировка вида из Windows Media Player с файлом MP4, содержащим в себе обложку.

Всё это дает также возможность поиска видеофайлов из проводника Windows, по тегам (например сценаристам и пр.).

Файл, со встроенным (embedded cover art) изображением также будет отображаться аппаратным сетевым медиплеером (например WD TV Live) в виде эскиза.


Основную сложность представляет поиск и сбор метаинформации о видеофильмах. Обычно для Windows, есть утилиты каталогизаторы (например Windows Media Browser, ), но для сервера Ubuntu так просто не будет, надо писать скрипты.


Для обработки нескольких файлов, нужно использовать скрипт bash. Можно также завернуть этот скрипт в Upstart-работу и исполнять его системными средствами.
Надо помнить, что с русскими именами файлов, содержащих пробелы, нужно аккуратно работать - заключать в кавычки.

#!/bin/bash
# сервер: микросервер
# дата: 25.12.2014
# Описание (ru): Преобразование файлов формата контейнера mkv в формат контейнера mp4 
# Для сайта: http://gimmor.blogspot.com/

# Папка SRC - содержит необработанные MKV файлы (желательно с H.264)
# Папка DEST - будет содержать MP4-файлы (H.264 & AAC)

SRC=/mnt/rawvideo
DEST=/mnt/collection
POSTEREXT=jpg
TOEXT=mp4

find $SRC -type f -name '*.mkv' | while read LINE;
do
# Разбивка имени файла на части
echo "$LINE"
filename=${LINE%.*}
path=${LINE%/*}
echo "Папка: $path"
name0=${LINE##*/}
NAME=${name0%.*}
echo "Имя: $NAME"
echo "Filename: $filename"
extension=${LINE##*.}
echo "Расширение: $extension"
noextension=${LINE%*.}
echo "Без расширения: $noextension"

# Трансконтейнеризация
echo "Трансконтейнеризация... $LINE"
echo "в $DEST/$NAME.$TOEXT"

# Пример операций над файлами
# Простое преобразование MKV (H.264 & AC3) в MP4 (H.264 & AAC)
# avconv -i "$LINE" -c:v copy -c:a aac -strict experimental -y "$DEST/$NAME.$TOEXT"
# Добавить обложку к MP4 (обложки должны быть)
# mp4art --add "$filename-poster.$POSTEREXT" "$filename.$TOEXT"
# Можно сделать любую операцию с файлом

done

Не забыть:
Права на выполнение скрипта
# chmod +x mkv2mp4.sh


MKV Nice cover arts. Привлекательные обложки фильмов внутри Matroska


Формат MKV (Matroska) также поддерживает возможность добавления обложки. Однако, не все проигрыватели поддерживают отображение встроенных в MKV обложек. Windows Explorer не поддерживает, Windows Media Player не поддерживает и т.п.
VLC плеер поддерживает, но как-то кривовато.

Специфические требования к размеру и наименованию файлов обложек согласно спецификации MKV следует удовлетворить.

4 файла обложки должно быть включено в контейнер MKV (расширения файла с обложкой - jpg или png, маленькими буквами)
1. cover.jpg (размер 960х600 или 600х600)
2. small_cover.jpg (размер 192х120 или 120х120)
3. cover_land.jpg (размер 600)
4. small_cover_land.jpg (размер 120)

Малые обложки в 5 раз меньше больших. Фактор масштабирования 20%

Пример добавления 4 обложек, за один раз:

$ mkvmerge -o out.mkv --attach-file "cover.jpg" --attach-file "small_cover.jpg"  --attach-file "cover_land.jpg"  --attach-file "small_cover_land.jpg" in.mkv

out.mkv - выходной файл, с обложками
in.mkv - входной файл, без обложек

Например, если есть исходный файл cover.jpg имеет ширину 600, то можно подготовить уменьшенную копию small_cover.jpg, сделав изменение размера (resize) с помощью команды convert из пакета imagemagick.

$ convert cover.jpg -resize 20% small_cover.jpg
$ convert cover_land.jpg -resize 20% small_cover_land.jpg

※※※

Ресурсы


1. Matroska cover art. http://www.matroska.org/technical/cover_art/index.html

※※※


Комментариев нет: