Пакетное перекодирование видео: 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 отобразилось в трее.

И в таком состоянии просто нереально обрабатывать видео: перекодирование в финальный формат уже невозможно.
Поэтому приходится, если фрагментов более 15..20, перекодировать их из MOV/H.264 сначала в формат без потерь AVI/Huffyuv, а уж потом обрезать и клеить фрагменты, нелинейно монтировать и добавлять переходы.
Поэтому мы будем перекодировать видео по одному, чтобы при монтаже добавлять на timeline уже переваренные видеоролики в формате AVI.
Спасибо
(2) Пишем простенький скрипт на ависинте, и сохраняем этот текст в файл с именем «3.avs»:
DirectShowSource(«PROCESS.MOV», fps=30).ConvertToRGB32(matrix=»PC.601″)
Virtual DUB после открытия этого скрипта пишет об ошибке
Что пишет виртуал даб? Может, файла process.mov нет?
а где его взять?
конечно нет, я просто создал скрипт под номером и вставил туда строку и запустил его в виртуал даб
Упс, недописал в тексте поста: надо переименовать один (любой) из ваших файлов в формате MOV в «process.mov». Тогда все будет ОК. После выполнения всей инструкции файл надо переименовать обратно, поскольку process.mov — это будет именем обрабатываемого на данный момент видео файла (они в цикле будут обрабатываться).
Вот теперь все пошло. Спасибо
У вас интересный блог, после прочтения Ваших заметок приобрел Юпитер 135
Доволен. Жалко сюда нельзя картинки вставить показал бы. Продолжайте пожалуйста.
Спасибо, рад стараться
нету окошечка где нужно ставить галку что бы он не начинал работу сразу
( что ж все не так как надо то …
Это потому, что у вас более новая версия Virtual Dub. Посмотрите на мою последнюю статью, там все то же самое написано, но на основе последнего виртуалдаба. Более того, в новой статье я прихожу к выводу, что правильнее видео перекодировать в Lossless JPG формат.
http://blog.danxee.com/archives/189
[...] помог в решении вопроса этот пост: http://blog.danxee.com/archives/85. Там же, автоматизация процесса перекодирования, по [...]