В выходном видео таких надписей нет. Видимо тут и порылась собака.
Немножко неправильный вывод.
Смотрим статистику:
До.
Total Duration: 0:22:44:04
Frame Rate: 25,01 fps
There are 34084 keyframes.
There are 34 empty frames.
После
Total Duration: 0:22:44:18
Frame Rate: 25,00 fps
There are 34118 keyframes.
Количество кадров в первом случае = 34084 + 34 = 34118. Во втором, как видите, такое же количество.
Кадры, которые помечены как Drop, могут не нести в себе никакой картинки и тогда подставляется изображение предыдущего кадра. При Direct Stream Copy эти кадры сохранятся как Drop. При сохранении в Full Processing Mode, VirtualDub будет пережимать картинку и само собой, запишет их как нормальные - неважно, что там будет на самом деле.
Количество кадров не изменилось, а изменяли только fps. Понятно, что поменялась только продолжительность видео.
Никакой мистики, только математика:
34118/25.01 = 1364.174 сек = 1364 сек +4.36к = 22мин 44сек 4к
34118/25 = 1364.72 сек = 1364 сек +18к = 22мин 44сек 18к
Из любопытства решил провести эксперимент. Загружаем файл в ВиртаулДаб (VirtualDubMod 1.5.4.1), в меню Video сразу ставим Direct stream copy - станут недоступными те пункты меню, которые бесполезны в этом режиме: Фильтры, глубина цвета, сжатие и т.п. Как видим, Frame Rate остался доступным. Устанавливаем там произвольное значение, отличное от исходного. Чтобы визуально убедиться, поставим, к примеру, 16 вместо 25 - чтоб сразу было заметно. Сохраняем файл, всё с тем же Direct stream copy, открываем его в проигрывателе - видны тормоза и звук (если был) оооочень заметно не совпадает.
На этом можно было бы и закончить, но я зачем-то полез сравнивать файлы по содержимому. Несмотря на прямое копирование, размер файлов получился разным. Отключив звуковой поток, убеждаемся, что размер видео потока остался неизменным - видимо, та информация, что добавилась, связана с информацией о чередовании потоков и... так, Дима, не отклоняйся от курса.
То, что действительно меня интересует, находится в самом начале файлов. По смещению 0x20h в исходном файле записано 40 9C, в новом 24 F4.
9C40h = 40000d, что есть 1000000/25 - интервал в мс между двумя кадрами при 25 fps.
F424h = 62500d = 1000000/16 - аналогично, при 16 fps.
Осмелюсь углубить эксперимент, описываю всё в реальном времени, без зачеркиваний и исправлений. (прямо реалити-шоу. Когда работать-то буду? Ох уж моё любопытство).
Делаю полную копию файла, заменяю в нём 40 9C на 24 F4... смотрим... lister выдаёт видео с тормозами и квадратами, в Media Player всё играется без тормозов, VirtualDub видит... 25 fps??? Лезу ещё раз... И находу ещё одно интересное отличие в файлах (как сразу не догадался?!) по смещению 0x84h: в исходном 19, в новом 10, что в переводе означает 25 и 16 соответственно.
Всё-таки, надо было обратить внимание, что на видео без звука в файлах было всего 2 отличия.
Возвращаюсь к экспериментальному файлу, произвожу аналогичные изменения: меняю 19 на 10. Lister - ожидаемая тормозная картинка без квадратиков, Media Player - то же самое, VirtualDub выдал 16 fps! Нет возможности проверить, чего скажет Adobe Premiere, но думаю, проблем не возникнет.
Как уже говорили в теме, рассинхрон возникал из-за разницы длины потоков. Я бы уточнил, из-за разной скорости воспроизведения потоков. Аудио воспроизводится со скоростью, соответствующей 25fps видео, но у видео стоит немного отличная скорость - 25,01. Из-за чего это возникло? Да Бог его знает. Как мне кажется, величина fps высчитывается как количество кадров на время записи и записывается уже по факту после записи. Могу и ошибаться.
Ещё могу добавить, что раньше такие вещи тоже проделывал, но проблемы это не решало. Хотя, мог что-то не так по неопытности делать.
Считаю эксперимент завершенным (уже люди пришли, пора немного поработать)
Вывод: 1) Если для решения проблемы рассинхронизации достаточно выставить правильный fps, то это можно делать без пережатия материала в том же VirtualDub-е.
2) Можно обойтись вообще без копирования потоков, а просто заменить величину fps в заголовках. Так извращаться, как я это делал - не обязательно. Мне, кажется, попадались программки, которые могли это производить через простенький интерфейс.
В любом случае, экономия времени налицо.