Много слов о разрезании и рипах ДВД-Дисков.
Есть задача сделать рип нескольких дивидишников, конкретно -
Disney Treasures. Хочется иметь каждый мультик отдельным файлом, со своим звуком и субтитрами. Если бы это был полнометражный фильм, никакой проблемы бы не было, но это короткометражные мультфильмы, причем все они находятся пачкой в одном потоке, который нужно резать и синхронизировать. Я пробовал конвертить весь поток в один видео-файл и разрезать уже этот видео файл, например, с помощью NanDub со всеми настройками на source или с помощью
MKVToolNix. И в том, и в другом случае время отдельных частей оказывалось неточным (плавало в пределах целых 10 секунд). Я решил разрезать видео на этапе конвертации - или раньше.
Здесь я опишу, что и как я делаю, и спрошу совета у общественности, можно ли это делать удобнее и быстрее, с упором на автоматизацию и уход от рутинного ручного труда.
Конвертирование видео (рип видео).
1. Индекс. Для изготовления рипов лично я использую программу
MeGUI. Первый шаг - получение индекса двд-потока d2v и извлечение аудио-дорожек (функция File Indexer). Не знаю, насколько это специфично для других конвертеров, если честно.
Кстати, вот
полезный линк, по которому я узнавал, как работать с этой монструозной программой.
2. AVS скрипт. Пишется руками или через функцию МеГуя AVS Script Creator.
3-0. Получение информации о короткометражках.
Сперва я использовал программу
PGCEdit. В основном окне, конечно, содержится информация о продолжительности частей и порядке воспроизведения (
скриншот), но ее слишком мало, в частности там нет миллисекунд. Я научился фильтровать и парсить простыню текста, получаемую по функции Info -> PSG params and cell tables - оттуда я брал номера кадров. Но то ли это не кадры, а какие-то адреса, то ли частота кадров не та, то ли я где-то напортачил с парсером, но разбиение всегда было неточным и нужно было подправлять его руками.
Если что - программка
здесь.
Вопрос: как получить информацию о чаптерах/частях двд?
3-1.
Поэтому я стал делать разбиение руками каждый раз, просматривая видеопоток и собирая кадры, по которым нужно будет разрезать. Для этого я использую AVS Cutter из МеГуя. Изначально эта функция была рассчитан на то, чтобы делать монтаж видео-файла (то есть оставлять в файле только отдельные куски), а не разрезать файл на несколько частей, так что это накладывает некоторые трудности, но приспособиться можно. На выходе он записывает в AVS-скрипт информацию о монтаже. Что-то такое:
скрытый текст
LoadPlugin("C:\Program Files (x86)\MeGui\tools\dgindex\DGDecode.dll")
DGDecode_mpeg2source("H:\Disney\Complete_Goofy\DVD1\VIDEO_TS\VTS_01_1.d2v", info=3)
LoadPlugin("C:\Program Files (x86)\MeGui\tools\avisynth_plugin\ColorMatrix.dll")
ColorMatrix(hints=true, threads=0)
#deinterlace
#crop
#resize
#denoise
__film = last
__t0 = __film.trim(0, 32310)
__t1 = __film.trim(32311, 86160)
__t2 = __film.trim(86161, 116597)
__t3 = __film.trim(116598, 146097)
__t4 = __film.trim(146098, 177002)
__t5 = __film.trim(177003, 214932)
__t6 = __film.trim(214933, 253329)
__t7 = __film.trim(253330, 295941)
__t8 = __film.trim(295942, 325441)
__t0 ++ __t1 ++ __t2 ++ __t3 ++ __t4 ++ __t5 ++ __t6 ++ __t7 ++ __t8
Я написал
скрипт на (ужас) вижуал бейсике, который по такому AVS генерит несколько маленьких AVS, где в каждом остается только одна строчка с информацией о разрезании. Если будут желающие, перепишу скрипт на чем-то более кошерном, например, на Питоне.
На выходе - девять каких-то таких файлов:
скрытый текст
LoadPlugin("C:\Program Files (x86)\MeGui\tools\dgindex\DGDecode.dll")
DGDecode_mpeg2source("H:\Disney\Complete_Goofy\DVD1\VIDEO_TS\VTS_01_1.d2v", info=3)
LoadPlugin("C:\Program Files (x86)\MeGui\tools\avisynth_plugin\ColorMatrix.dll")
ColorMatrix(hints=true, threads=0)
#deinterlace
#crop
#resize
#denoise
__film = last
__t0 = __film.trim(86161, 116597)
__t0
4. Непосредственно рип.
Каждый такой маленький AVS я скармливаю МеГую, он их обрабатывает и конвертит в mkv. Это самая простая часть.
На этом танцы с видео закончились.
Разрезание аудио.
5-1. Сперва я шел долгим путем. С помощью самописной программки
Avscut по скрипту AVS с метками для разрезания я генерил CUE для каждого аудио-файла. С помощью такого CUE программа
CueSplitter может разрезать аудио-файл на заданные части. Но так как эта программа не понимает ac3, приходилось конвертировать дорожки в wav, разрезать уже их и конвертировать разрезанное обратно в ac3, что сравнительно долго.
5-2. Потом я нашел способ делать это быстро с помощью
BeSplit. Все той же
Avscut я генерю строку параметров для BeSplit и очень быстро разрезаю ac3. Рассинхрон формата в 32 мс при разрезании меня не очень волнует, можно жить :).
Забегая вперед, скажу, что ПОЧТИ ВСЕГДА такое разрезание аудио бывает неточным, и его приходится подгонять руками. Я так думаю, что в двд содержится какая-то информация о синхронизации чаптеров и аудио. Кривое разрезание как причину рассинхронизации я исключил, так как вполне доверенный и проверенный первый способ дает те же результаты, а сличение длин частей аудио-дорожки говорит, что разрезание вполне точное.
Вопрос: можно ли вынуть информацию о синхронизации чаптеров видео и аудио из двд?
Субтитры.
6-1. Извлекаю субтитры из двд я с помощью VobSub.
Вопрос: есть ли способ автоматически разрезать idx+sub на несколько частей?
В ВобСабе есть резалка, но время для каждой части приходится вбивать руками, что неудобно. В Ридми описаны параметры командной строки, но не описано каки-либо параметров, связанных с разрезанием.
6-2. За неимением резалки субтитров в формате sub, я решил конвертить их в текстовый формат, для этого я пользуюсь
отвратительной, мерзкой, неудобной программой
SubRip. На выходе после часа мучений и правок - субтитры в формате SRT.
7. SRT я разрезаю руками, пользуясь
Subtitles Modifier и
Subtitles Workshop. Первая умеет нормально резать srt (правда, только на две части, в этом и заключается ручная работа), вторая - выставлять задержки по времени.
Самый Важный Вопрос: есть ли уже написанный софт, чтобы резать srt автоматически на несколько частей (больше двух)?
Сейчас это самая узкая и не автоматизированная часть. От отчаяния собираюсь опять писать собственную программу.
Такая же фигня, как и с аудио, происходит и с субтитрами - при разрезании они оказываются рассинхронизованы с видео.
Вопрос: можно ли вынуть информацию о синхронизации чаптеров видео и субтитров из двд?
Склейка матрешки.
8. Простая и скучная часть. Все разрезанные потоки собираю вместе в mkv с помощью
MKVToolNix. Удобно сразу написать батник (или шелл, кому что), который разрезает аудио и собирает все матрешки (благо, процесс собирания всего у меня занимает меньше минуты). Я просматриваю получающиеся части, нахожу рассинхрон, с помощью Avscut на глаз (и слух) подгоняю параметры разрезания, редактирую батник на предмет звука и повторяю процесс, пока все части не оказываются синхронизированы.
Итак, список вопросов:
1. Как получить информацию о чаптерах/частях двд?
2. Можно ли вынуть информацию о синхронизации чаптеров видео и аудио из двд?
3. Можно ли вынуть информацию о синхронизации чаптеров видео и субтитров из двд?
4. Есть ли способ автоматически разрезать idx+sub на несколько частей?
5. Есть ли уже написанный софт, чтобы резать srt автоматически на несколько частей (больше двух)?
Если вы дочитали до этих слов, то спасибо вам огромное за уделенное мне время.
Надеюсь, что, во-первых, ответы на мои вопросы в какой-то мере будут найдены, и во-вторых, мой опыт будет кому-нибудь полезен.