Pull to refresh

Автоматизация реавторинга DVD-дисков

Working with video *
Awaiting invitation
Большинство DVD-изданий фильмов, мультфильмов и т.п. выпускается, как правило, с определенным набором звуковых дорожек. Если это российское или украинское издание, как правило, там есть лицензионная озвучка или дубляж. Большинству пользователей этого хватает, но наличием русской или украинской дорожкой не могут похвастаться лицензионные DVD-издания мультсериалов и сериалов.

Обычно сериалы и мультсериалы выпускаются только в американском и европейском регионах и, следовательно, не имеют среди набора звуковых дорожек украинской и русской дорожки. К примеру, выходит новый DVD сериала «Доктор хаус» и хотелось бы иметь лицензионный DVD с красивым оригинальным меню и русской дорожкой от Lostfilm.

Процесс пересборки DVD-диска с целью подмены части его контента, например, добавление дополнительной звуковой дорожки называется реавторингом.

Чтобы добавить новую звуковую дорожку на диск, необходимо выполнить несколько действий:
1. Разобрать диск на отдельные компоненты — звук, видео, субтитры, тайминг глав.
2. Подготовить извлеченные звуковые дорожки к последующему монтажу. К примеру, переконвертировать их в mp3 или wav, т.к. большинство звуковых редакторов не умеют работать с ac3 звуком.
3. Подогнать русский звук под английскую оригинальную дорожку, т.к. русская дорожка могла быть собрана для HDTVRip-а и расходится по таймингу с DVD версией.
4. Собрать отдельно DVD-диск без меню, с новым набором звуковых дорожек
5. Заменить в оригинальном диске оригинальный видеоряд на новый.

Для разбирания диска на части, подойдет бесплатная программа PgcDemux, лицензированная под LGPL.
Она позволяет вытащить в отдельную папку видеоряд, субтитры, звук и тайминг глав.
Для переконвертирования звука из ас3 в мр3 подойдет любой звуковой конвертер.

Когда речь идет о реавторинге фильма, всё можно сделать вручную, но когда стоит задача пересобрать десятки дисков, полные сезоны сериалов и т.п., вручную выходит долго и неинтересно.

Поскольку PgcDemux поддерживает консольный режим, а ffmpeg с консоли хорошо кодирует звук, пришла идея написать скрипт, который автоматизирует этот процесс:

mkdir "%1\DVDDemux"
mkdir "%1\DVDSound"
FOR %%i IN (%1\*.IFO) DO (
if not %%~ni==VIDEO_TS (
echo Process file %%i
mkdir "%1\DVDDemux\%%~ni"
echo Demux audio, video, celltimes, subtitles...
PgcDemux -m2v -aud -sub -cellt "%%i" "%1\DVDDemux\%%~ni"

echo Convert audio to mp3 for Sony Vegas...
echo.
ffmpeg.exe -i "%1\DVDDemux\%%~ni\AudioFile_80.ac3" -ac 2 -c:a libmp3lame -b:a 192k "%1\DVDSound\%%~ni.mp3"
)
)

Скрипт принимает как параметр путь к папке VIDEO_TS DVD диска и на выходе создаёт в ней 2 папки:
1) DVDSound
Тут будут собраны оригинальные звуковые дорожки в формате mp3, готовые для сведения.

2) DVDDemux
Тут для каждой серии, которая на диске представлена отдельным VOB файлом, создается отдельная папка с названием в формате «VTS_0X_0», где X — номер серии на диске.
В каждой папке присутствует следующее:
— VideoFile.m2v — видеофайл без звука;
— AudioFile_80.ac3 — оригинальная звуковая дорожка;
— Celltimes.txt — тайминг для глав;
— LogFile.txt — отчет о разборке диска;
— sup-файлы субтитров.

Процесс подгонки звуковой дорожки — это отдельная большая тема, для которой нужна отдельная статья, поэтому представим, что звуковой ряд мы уже подогнали.
Подогнанный звук нужно уложить в папку «VTS_0X_0», рядом с другими файлами.
Подогнанный звук должен иметь название Untitled.ac3.
Я специально не сделал этот параметр настраиваемым, чтобы максимально упростить процедуру реавторинга.

Когда дорожка с переводом лежит в папочке для каждой серии, можно приступать к пункту 4 — сборке промежуточного диска.

Для этого обычно используют программу MuxMan. Она, к сожалению, не имеет специальных параметров для работы с консоли, но, к счастью, может принимать как параметр файл проекта.
Проекты для MuxMan хранятся в текстовом виде, что открывает возможности для автоматизации.
Поскольку, у меня под рукой оказался Qt SDK, я использовал его для написания промежуточной программы, которая б генерировала файл проекта, в зависимости от доступных файлов для сборки, а именно:
1) видеофайла
2) набора звуковых дорожек, среди которых обязательно должен быть Untitled.ac3
3) файла Celltimes.txt
4) файлов субтитров в формате sup, если такие есть.

Код приводить не буду, т.к. он достаточно длинный и не особо интересный.
Кому интересно, я выложил его на github.com, ссылка в конце статьи.

Далее, чтобы автоматизировать обработку нескольких файлов, я также написал специальный скрипт:
mkdir "%1\DVDMuxman"
dir %1\DVDDemux\
FOR /D %%i IN (%1\DVDDemux\*) DO (
echo.
echo Process folder %%i
mkdir "%1\DVDMuxman\%%~ni"
automuxman.exe %%i %2 "%1\DVDMuxman\%%~ni"
)


Скрипт принимает первым параметром путь к папке VIDEO_TS DVD диска, а вторым частоту кадров — 30 для NTSC и 25 для PAL.

На выходе он создает папку DVDMuxman, в которой для каждой серии отдельно создана папка в формате «VTS_0X_0», где X — номер серии на диске.
В каждой папке храниться собранный DVD диск отдельно для каждой серии.

На этом, пока что, моя автоматизация приостановилась.
Дальше, используя программу DVDRemakePro нужно заменить оригинальный видео-контент, сгенерированными мини-дисками.
Для этого комбинацией клавиш Ctrl+I открываем содержимое каждого диска в программе.
Путем copy-paste заменяем оригинальный видеоряд на видеоряд с мини-дисков.

image
image

После этого добавляем вторую аудио-дорожку на DVD, т.к. в мета-информации значится всё еще только одна.

image
image
image

Нажимаем Ctrl+E для экспорта готового DVD.

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

Ссылки на использованный софт (официальные сайты):
PgcDemux — download.videohelp.com/jsoto/dvdtools.htm
MuxMan — stnsoft.com/Muxman/versions.shtml
ffmpeg — www.ffmpeg.org/download.html

Консольная утилита для MuxMan в виде исполняемом виде — drive.google.com/file/d/0BzKYL0xFZrbLNkhYQzRqWVF6Zzg
Исходники — github.com/abodnyaUA/MuxManConsole
Tags:
Hubs:
You can’t comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.