VirtualDub

       

Не идеальный вариант - AVI файлы имеют различный FPS.




Мы имеем некоторое количество видео фрагментов, которые в свою очередь имеют различный FPS. Склеить при помощи VirtualDub нам их не удастся. По этому для начала все имеющиеся фрагменты необходимо привести к одному FPS. Процесс этот очень трудоемкий и по этому как я уже говорил лучше до этого не доводить...

Для начала надо узнать некий средний FPS всех фрагментов, что бы к нему приводить все файлы. Можно конечно и не ломать голову, а привести все файлы к целому числу, допустим 25 FPS, особенно это актуально если число FPS всех фрагментов будет близко к этому целому числу.

Что бы узнать какой FPS имеет отдельно взятый файл необходимо открыть его в VirtualDub.


Затем в меню "Video" выбрать:


В открывшемся окне видим FPS текущего файла:


Открывая поочередно фрагменты (хотя бы часть из них) вы узнаете их FPS, при желании (если разбег значительный) можно оценить некоторое среднее значение, к которому будете приводить AVI файлы.

Переходим к обработке, открываем в VirtualDub первый фрагмент и переходим к уже знакомому диалоговому окну:


Выбираем пункт "Change to...". Вписываем требуемое значение, нажимаем ОК.


Теперь что бы сохранить изменения, сохраняем AVI файл.


При этом, выбирая для видео и аудио потоков "Direct stream copy".


Но это еще не все! Дело в том, что, изменив FPS для AVI файла, мы неизбежно получили рассинхронизацию видео и звука, и чем больше вы изменили при этом FPS, тем больше рассинхронизация. Именно по этому, лучше приводить FPS файлов к среднему значению, в этом случае уход будет меньше.

В некоторой степени, эту рассинхронизацию можно поправить, VirtualDub обладает для этого необходимыми средствами (см далее). Но как бы вы при этом не старались - синхронизация, к сожалению, не будет уже идеальной, как это было ранее...

Что бы синхронизировать видео и звук зайдите:


Здесь изменяя значение "Delay audio track by" вы можете немного сжать или наоборот растянуть аудио поток. Положительное значение используйте, если звук опережает видео. Отрицательные значения используйте, если наоборот звук отстает от видео.





Таким образом, подбирая данное значение, можно добиться приемлемой синхронизации видео и звука.

Далее что бы сохранить изменения, необходимо так же сохранить AVI файл, при этом потоки можно не пережимать, т.е. снова выбираем для видео и аудио потоков "Direct stream copy". Не торопитесь закрывать VirtualDub и открытый AVI файл в нем...


После того как файл сохранен, откройте его любым видео проигрывателем и убедитесь еще раз, что звук соответствует изображению. Я сталкивался с тем, что даже всех этих манипуляций была рассинхронизация, и приходилось еще корректировать значение "Delay audio track by". А если вы еще не закрыли данный файл, в VirtualDub, это будет сделать проще.

...Просто подкорректируйте еще значение "Delay audio track by" и сохраните снова.

Таким мутным образом обрабатываются все фрагменты, которые нужно склеить, для всех вы меняете FPS на одно и то же число.

Ну а после того как все готово, файлы можно соединять так, как это делается при идеальном варианте, пункт 1.

Ну вот вроде и все!

Если вы знаете более простой способ, буду очень рад с ним познакомиться. Хотя я для себя уже сделал некоторые выводы :

  • Захват кусками (фрагментами) не допустим, захватывать необходимо все сразу.
  • Если куски все же получились - ничего не делать с ними. :-)

Содержание раздела