2005-09-29

yurikhan: (Default)

Вот уже сколько… Полтора года занимаюсь DVD-рипами аниме. И всё это время пользовался связкой AviSynth + VirtualDubMod + XviD.

AviSynth — это такой скриптовый язык для обработки видео. Фильтры, обрезка краёв, масштабирование, шумодавление, усиление тёмных линий, все дела. Ну и интерпретатор этого языка сделан как декодер с программным интерфейсом Video for Windows.

VirtualDubMod — берёт на вход видеофайл (или, точнее, всё, что можно проиграть через Video for Windows, в том числе — AviSynth). Позволяет полистать исходник по кадрам, задать начало/конец, выставить настройки энкодера и запустить процесс кодирования.

Ну так вот. Типичный аниме-сериал состоит из 26 (иногда 13) серий по 23 минуты, и каждую из них нужно закодировать отдельно. То есть, процесс выглядит так:

  • Определяем для каждой серии правильные параметры обрезки.
  • Генерируем 26 AviSynth-скриптов.
  • Запускаем VirtualDubMod.
  • Открываем скрипт для первой серии.
  • Настраиваем энкодер. В частности, указываем, что сейчас мы будем делать первый проход двухпроходного сжатия, и что промежуточные результаты надо свалить в файл (название сериала) - 01.pass.
  • Нажимаем F7 (Save As), указываем имя файла, включаем галочку «не кидаться кодировать прямо сейчас, а поставить в очередь». OK.
  • Открываем скрипт для второй серии.
  • Энкодер настраивать уже не надо. Он помнит свои последние настройки. Единственное — надо пойти и поменять номер серии в имени файла промежуточных результатов.
  • Нажимаем F7, указываем имя файла, ставим в очередь.
  • Открываем скрипт для третьей серии…
  • Когда вся очередь готова, запускаем её на выполнение. Через ~5×26 часов имеем результаты первого прохода.
  • Если размеры файлов после первого прохода нас не устраивают, начинаем зажимать. Пересчитываем все размеры пропорционально до двух DVD±R. Делаем второй проход для каждой серии по той же схеме: открыли скрипт, указали кодеку, что это второй проход и что результаты первого прохода лежат вон там, поставили в очередь. Повторить 26 раз.

Что не так на этой картинке?

Да практически всё. У нас есть двадцать шесть шагов, отличающихся только циферками в трёх местах. Я, как пользователь компьютера со стажем, хочу мочь написать один раз общую часть, засунуть её в цикл по i от 1 до n, получить готовую очередь.

Потом, на 25-й серии оказывается, что одну настройку кодека я указал неправильно. Я должен мочь взять очередь и исправить в ней эту настройку во всех сериях. Или исправить её в шаблоне шага и перегенерировать всю очередь.

Да, но в VirtualDubMod’е нет средств редактирования очереди. Или есть? Очередь сохраняется в текстовый файл. Отлично! Берём очередь, разбираем её на шаги, пишем шаблон одного шага…

Ага, щаззз. Файл-то текстовый, но все настройки кодека свалены в нём в одну такую переменную:

VirtualDub.video.SetCompData(3012,"AQAAAKAPAABYQQ
QATDpcZHZkXFByb2plY3RzXFRlbnNoaSBuaSBOYXJ1bW9uIVx
zdGF0c1x4dmlkXFRlbnNoaSBuaSBOYXJ1bW9uISAtIDAxLnBh
c3MAAHQAcwBcAHgAdgBpAGQAXABUAGUAbgBzAGgAaQAgAG4Aa
QAgAE4AYQByAHUAbQBvAG4AIQAgAC0AIAAwADEALgBwAGEAcw
(ещё 75 строк)
QAAAAAAAAEAAAAfAAAAAQAAAB8AAAABAAAAHwAAAAEAAAAAAA
AAAAAAAAAAAAAAAAAAAQAAAAEAAAAPAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA");

Естественно, здесь где-то зашито и имя файла промежуточных результатов. Которое для каждой серии разное.

Я понимаю, почему так сделано. Потому что у каждого кодека набор настроек разный. И для простоты каждый кодек умеет вывалить все свои настройки в бинарный блок, а VirtualDubMod этот блок кодирует в текстовую форму. Но мне-то от этого не легче…

И вот я беру mencoder, портированный в винду из Linux’а. Два часа разбираюсь с соответствием ключей и настроек XviD’овского GUI. Всё, теперь я могу написать скрипт, который сгенерирует мне командный файл, который я запущу и он зажмёт мне все серии. Потом я простой контекстной заменой поменяю настройки и запущу второй проход.

Каждая долгая и/или повторяющаяся операция должна делаться программой с интерфейсом командной строки, принимая из командной строки все возможные параметры. Дальше можно наворачивать всякие гуёвые frontend’ы, но они должны на выходе давать командную строку или командный файл, которые можно не только запускать, но и повторно использовать — возможно, с некоторыми изменениями.

Очередь VirtualDubMod’а — не переиспользуема. То есть переиспользуема, но только без изменений. Это не массово. Компьютеры так не поступают.

А дальше можно писать makefile и собирать весь рип командой “make all”…

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-07-17 02:36
Powered by Dreamwidth Studios