Пакетное перекодирование видео: cmd.exe + virtual dub + avisynth

В этом посте я расскажу, как правильно переконвертировать видео в нужный формат, используя только опен-сорсовые решения. Переконвертация будет на примере видео роликов от 5DMk2.

Для работы потребуются:

  • Windows XP
  • Avisynth, скачать и установить c одноименного сайта в домене org
  • Virtual Dub, лежит тоже на своем сайте.
  • K-lite codec pack с набором DirectShow кодеков

Перекодирование будет осуществляться из формата MOV в AVI с преимущественной целью дальнейшего монтажа видео в virtualdub. Программа virtualdub не умеет открывать файлы MOV. Ависинт используется для того, чтобы виртуал даб открывал неизвестные ему видеофайлы — а таких сейчас большинство, в том числе, например, MOV, MKV файлы с кодеком H.264 и др. Однако, если в виртуалдаб добавлять отфильтрованные файлы MOV напрямую с ависинта, то это ведет к чрезмерному потреблению памяти и практически этот подход не реален: попытка смонтировать 20 видеороликов, пропущенных через ависинт, приводит к сжиранию всей оперативной памяти и невозможности выполнить это задание.

Вот пример. Обрабатываю видик, клею его из 38 фрагментов. Общая длительность 13644 кадра (7:35). Так вот, одновременно, в одном приложении VirtualDub может открыться и монтироваться не более 23 фрагментов. При этом оно сжирает 1,4 гига памяти. Во втором VirtualDub я открыл оставшиеся 15 фрагментов, что привело к сжиранию всей памяти. Обратите внимание, сколько иконок ffdshow отобразилось в трее.

Невозможно обрабатывать более 23 видеофайлов
И в таком состоянии просто нереально обрабатывать видео: перекодирование в финальный формат уже невозможно.

Поэтому приходится, если фрагментов более 15..20, перекодировать их из MOV/H.264 сначала в формат без потерь AVI/Huffyuv, а уж потом обрезать и клеить фрагменты, нелинейно монтировать и добавлять переходы.

Поэтому мы будем перекодировать видео по одному, чтобы при монтаже добавлять на timeline уже переваренные видеоролики в формате AVI.

Читайте далее:
Пакетное перекодирование MOV -> AVI: инструкция для пользователей «Проводника Windows»
Дальнейшее развитие скрипта перекодирования MOV -> AVI

10 Comments

  1. Алексей:

    Спасибо :)

  2. Алексей:

    (2) Пишем простенький скрипт на ависинте, и сохраняем этот текст в файл с именем «3.avs»:

    DirectShowSource(«PROCESS.MOV», fps=30).ConvertToRGB32(matrix=»PC.601″)

    Virtual DUB после открытия этого скрипта пишет об ошибке

  3. admin:

    Что пишет виртуал даб? Может, файла process.mov нет?

  4. Алексей:

    а где его взять? :) конечно нет, я просто создал скрипт под номером и вставил туда строку и запустил его в виртуал даб

  5. admin:

    Упс, недописал в тексте поста: надо переименовать один (любой) из ваших файлов в формате MOV в «process.mov». Тогда все будет ОК. После выполнения всей инструкции файл надо переименовать обратно, поскольку process.mov — это будет именем обрабатываемого на данный момент видео файла (они в цикле будут обрабатываться).

  6. Алексей:

    Вот теперь все пошло. Спасибо :) У вас интересный блог, после прочтения Ваших заметок приобрел Юпитер 135 :) Доволен. Жалко сюда нельзя картинки вставить показал бы. Продолжайте пожалуйста.

  7. admin:

    Спасибо, рад стараться :)

  8. Алексей:

    нету окошечка где нужно ставить галку что бы он не начинал работу сразу :( ( что ж все не так как надо то …

  9. admin:

    Это потому, что у вас более новая версия Virtual Dub. Посмотрите на мою последнюю статью, там все то же самое написано, но на основе последнего виртуалдаба. Более того, в новой статье я прихожу к выводу, что правильнее видео перекодировать в Lossless JPG формат.
    http://blog.danxee.com/archives/189

  10. [...] помог в решении вопроса этот пост: http://blog.danxee.com/archives/85. Там же, автоматизация процесса перекодирования, по [...]

Leave a Reply