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

В ходе первой и второй дискуссии с моим читателем Алексеем я понял свою ошибку в изложении материала. Она заключается в том, что не многие пользователи Windows используют командную строку Windows для решения повседневных задач, поэтому те вещи, которые я описал в этих двух статьях, достаточно сложно или невозможно сделать в проводнике, в результате возникают неожиданные трудности.

Например, как стоит пользователю запускать командный файл Windows (*.bat-файл), если стоит задача запустить его в текущем каталоге? Решение я не предоставил. Ведь понятно, что при запуске этого командного файла через двойной щелчок на его иконке — работать ничего не будет.

Второй пример: в своем изложении я ссылаюсь на то, что нужно отредактировать файл задания для VirtualDub с именем rec.job, но этот файл представляется с совершенно странной иконкой и notepad, естественно, не запускается для редактирования этого файла.

Здесь я попробую изложить материал специально для пользователей проводника Windows. Не будет никакой командной строки, никаких FAR Manager и Total Commander.

Задача будет прежняя: сделать так, чтобы все MOV файлы превратились в AVI файлы, чтобы это было сделано без лишних разговоров и на основе бесплатного софта.

 

Вот с чего начнем.
Файлы с видео в формате MOV для обработки

Итак, начнем. Будем, для определенности, кодировать видео в нашем будущем командном файле в XVID.

 

Шаг 1. Нам потребуется отдельная папка на компьютере, где будут храниться наши утилиты. Создаем папку C:\MyVideoTools и в этой папке будет все необходимое. Также мы должны установить следующие бесплатные программы:

 
1) Набор кодеков K-Lite Codec Pack (14,9 Mb)
2) Видеопроцессор AviSynth 2.5.8 (4,2 Mb)
3) Программа для видеомонтажа Virtual Dub 1.9.8 (1,6 Mb). Её нужно скачать и распаковать архив в каталог «C:\Program Files\VirtualDub».

Также настроим отображение файлов в нашей папке C:\MyVideoTools. Для этого выберем меню Сервис->Свойства папки и снимаем вот эту галочку.

Свойства папки

 
Настраиваем кодеки:
Пуск->Программы->K-Lite Codec Pack->Configuration->ffdshow audio decoder — ставим вот это поле в «all supported», иначе звука в видеоролике не будет:

настройка аудио

Далее: Пуск->Программы->K-Lite Codec Pack->Configuration->ffdshow video decoder
Здесь надо сделать такие настройки для правильного декодирования цвета:

настройка видео

 

Шаг 2. Создаем временный «AviSynth Script». Расширение этого файла должно быть avs.

Создаем AVISynth скрипт

Потом двойным щелчком открываем этот скрипт на редактирование. Должен запуститься notepad. Пишем такой текст внутри скрипта:

DirectShowSource("D:\Photo\2010_03_20\Video\MVI_1059.MOV", fps=23.976).ConvertToRGB32(matrix="PC.709")

Здесь важна частота кадров: это у меня видео снято с частотой 23.976 кадров в секунду, у вас это может быть 25 кадров в секунду или 29.97. Измените частоту кадров соответствующим образом.Можно вообще не писать текст «, fps=23.976″ (вместе с запятой), но это может привести к тому, что у разных видео будет чуть-чуть разная частота кадров, например, 23.986 вместо 23.976, в результате эти видео не склеятся друг с другом. Так что частоту кадров лучше выяснить и писать.
Также стоит отметить, что файл D:\Photo\2010_03_20\Video\MVI_1059.MOV должен существовать (вместо моего файла, подставьте сюда полный путь к вашему файлу).

 

Шаг 3. Запускаем VirtualDub.exe из каталога C:\Program Files\VirtualDub, и открываем только что созданный ависинтовский скрипт: File->Open Video File… Этот текстовый файлик должен открыться, как будто это у нас открывается видео D:\Photo\2010_03_20\Video\MVI_1059.MOV. Надо сказать, что виртуалдаб не умеет открывать MOV файлы на редактирование, поэтому открывать их только что описанным способом — это единственный выход.

 

Шаг 4. Настраиваем параметры перекодирования аудио и видео в виртуалдабе.
Для аудио, выбираем меню «Audio->Full Processing mode», потом «Audio->Compression» и выбираем аудио кодек, например AC3 ACM Codec с желаемым битрейтом (320 kbit/s например).
Параметры видео: «Video->Full Processing mode», потом «Video->Compression…» и выбираем кодек Xvid MPEG-4 Codec, нажимаем кнопку Configure, потом кнопку «Target bitrate (kbps):» — она превратится в кнопку «Target quantizer:», и справа от этой кнопки пишем число 1.00 (или число 2, для чуть меньшего файла).
Если хотим сжимать файлы без потерь, для дальнейшего монтажа, то нужно выбрать кодек huffyuv, и указать в его конфигурации такие параметры:
huffman video codec
Потом нажимаем OK, OK.

 

Шаг 5. Создаем файл задания для виртуалдаба: File->Queue batch operation->Save as AVI… , нажимаем там Save. Имя файла не важно какое. Потом открываем меню File->Job Control…, и в новом окне выбираем меню File->Save job list… и сохраняем файл в нашей папке C:\MyVideoTools с именем recode.txt.

 

Шаг 6. Редактируем полученный файл recode.txt в блокноте (notepad). Для этого ищем и заменяем строку

 
VirtualDub.Open("C:\\MyVideoTools\\AviSynth Script.avs","",0);

на строку

 
VirtualDub.Open(VirtualDub.params[0],"",0);

а в самом конце файла вот эти строки

 
VirtualDub.subset.Clear();
VirtualDub.subset.AddRange(0,206);
VirtualDub.video.SetRange();
VirtualDub.project.ClearTextInfo();
// -- $reloadstop --
VirtualDub.SaveAVI("C:\\MyVideoTools\\AviSynth Script.avi");

надо удалить и вставить на то же место новые строки:

 
VirtualDub.subset.Delete();
VirtualDub.video.SetRange();
VirtualDub.project.ClearTextInfo();
VirtualDub.SaveAVI(VirtualDub.params[1]);

Сохраняем файл. Вот и всё с этим файлом recode.txt. Он будет постоянно нужен для работы нашего пакетного перекодирования, поэтому пускай остается в C:\MyVideoTools.
Файл «AviSynth Script.avs» нам больше не нужен, удаляем его.

 

Шаг 7. Теперь создаем собственно пакетный файл recode.bat в нашей папке C:\MyVideoTools — правый щелчок мыши, создать, текстовый документ, потом переименовываем его в recode.bat. В этой папке у нас покзываются расширения, поэтому она будет выглядеть так:

Наша рабочая папка
 
По правой кнопке над файлом recode.bat выбираем изменить. Должен появиться блокнот(notepad), в котором надо добавить вот такие строки:

 
@echo off
@rem (C) danxee
set FPS=23.976
FOR %%i IN (*.mov) do (
  if not exist %%~ni.avi (
  echo.
  echo Re-compressing %%i
  echo DirectShowSource^("%%i", fps=%FPS%^)^.ConvertToRGB32^(matrix="PC.709"^) > 3.avs
  "C:\Program Files\VirtualDub\vdub.exe" /i C:\MyVideoTools\recode.txt 3.avs %%~ni.avi >nul
  )
)
del /q /s 3.avs >nul 2>&1

Скопировать текст прямо отсюда и вставить в notepad, потом сохранить полученный recode.bat.

 

Шаг 8. Теперь делаем расширение меню проводника, чтобы можно было по правой кнопке на папке с видео запускать нашу пакетную обработку.
Для этого создаем новый текстовый документ со следующим содержимым:

 
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Folder\shell\RecodeToAVI]
@="Перекодирование всех MOV в AVI"
[HKEY_CLASSES_ROOT\Folder\shell\RecodeToAVI\command]
@="C:\\MyVideoTools\\recode.bat %1"

 
копируем весь текст без изменений в notepad, потом сохраняем этот файл как install.reg (с расширением reg) и запускаем его на выполнение двойным щелчком. Потом удаляем этот файл, он нам тоже больше не нужен.

 

 
ВСЁ! Теперь по правой кнопке над каталогом будет запускаться пакетное перекодирование всех видео файлов!

Перекодирование всех файлов в AVI

 

 
Удачи :)

15 Comments

  1. 7xDrach:

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

    FOR %%i IN (%1*.mpg) do (
    if not exist %1%%~ni.avi (
    «C:Program FilesVirtualDubvdub.exe» /i C:MyVideoToolsrecode.txt 3.avs %1%%~ni.avi >nul

  2. admin:

    Спасибо за поправку.

  3. ЗиП:

    Спасибо огромное за наиподробнейшую инструкцию…
    Но у меня при клике на «перекодирование всех MOV в AVI» выдает ошибку «приложение не найдено»…
    помогите пожалуйста…
    всё делал так, как вы написали пошагово… Единственное различие — у меня виста..

  4. admin:

    Скорее всего, у вас 64-битная виста, а не найденное приложение — это C:Program FilesVirtualDubvdub.exe из шага 7. В нем надо заменить путь на C:Program Files (x86)VirtualDubvdub.exe.

  5. Дмитрий:

    Спасибо за подробную инструкцию!
    У меня вопросы:
    1. Куда вставлять то, о чём написал 7xDrach:
    FOR %%i IN (%1*.mpg) do (
    if not exist %1%%~ni.avi (
    «C:Program FilesVirtualDubvdub.exe» /i C:MyVideoToolsrecode.txt 3.avs %1%%~ni.avi >nul
    и надо ли здесь что-то менять?

    2. Когда запускаю install.reg, выдаёт «Не удаётся импортировать. Ошибка при доступе к реестру». Что делать?

  6. admin:

    Дмитрий,
    1) см. шаг 7. Менять надо, скорее всего, только расширение — три буквы (mpg) в этом тексте, если вы хотите обрабатывать ролики mov (соответственно менять на mov).
    2) Нужно запустить этот reg-файл от имени администратора. В Висте и семерке без этого никак.

  7. Караваев:

    Здравствуйте.Не могу понять ГДЕ выбрать кодек huffyuv, и указать в его конфигурации параметры. Точнее как зайти в окно конфигураций.В скачанном пакете кодеков в папке prog.files этот кодек не отображается.

  8. admin:

    Караваев, в новых версиях кодеков huffYUV перенесли в ffdshow. После установки K-Lite Codec Pack надо запустить VirtualDub, выбрать там Video->Compression->ffdshow Video Codec -> Configure -> Encoder: huffYUV и снять галочку Assume Interlaced из настройки Input.

  9. Караваев:

    шаг 9. «выберите программу для открытия этого файла»>выбираю виртуалдаб>»VirtualdubError cannot open file»
    Процесс конвертации первого видео, адрес которого указан в первом скрипте, я не увидел: созданный Avisynth скрипт в ДАБЕ определился как видео (единственный

  10. Караваев:

    раз. При повторных попытках — просто серое окно). Вопрос: на каком шаге происходит конвертация видео адрес которого я указал в первом скрипте. В папку Video я поместил лишь одно видео. После завершения 8 шага я ожидал увидеть процесс конвертации, и по окончании, файл AVI рядом с файлом MOV. А случилась ошибка cannot open file.

  11. Караваев:

    может это как то связано с моментами process.mov или 3.avs? Последний указан в седьмом шаге. Ведь получается, что это имя вашего первого ависинт скрипта. Я ему дал другое имя, но всю информацию из 7 шага, я скопировал, не меняя ничего.

  12. Караваев:

    причем, когда загружаю ависинт скрипт в даб появляется тайм-линия, но вместо видео на ней серое полотно. И если нажать play,то появляется ошибка: out of memory. Только раз видео загрузилось и проигрывалось.

  13. admin:

    в 7 шаге используется имя 3.avs, его менять не надо, иначе работать не будет.

  14. evkarelin:

    А зачем вообще мучаться со скриптами? В VirtualDub’е есть штатная функция: открываем файл — делаем все настройки компрессии/фильтрации — идем в job control (руками в очередь ни чего не ставим) — там жмем Edit — Process Directory — указываем папку, файлы которой нужно все обработать — потом указываем папку, куда складывать обработанные файлы — жмем старт.
    В англоязычном варианте инструкции написано: Осторожно, обработаются все файлы из указанной папки. Если хотите конвертировать не все файлы, лишние нужно удалить из списка job control :)

  15. Спасибо за полезный материал, мне очень помогло, всё работает кроме одного момента, почему то перекодируется только первый файл из папки, а не все. Пологаю что это связанно с шагом 7, хотя я всё сделал как там написано. В поправке 7xDrach, есть ещё %1 перед *.mpg (на mov я поменял) и ниже ищё два раза встречается, я правда и с этим %1 пробовал, почему то только первый раз все файлы из папки перекодировались, повторые попытки перекодировали только первый файл.

Leave a Reply