У меня есть две видеозаписи одной и той же сцены, но с разными частотами кадров, которые я хотел бы объединить, используя скрипт AviSynth. Одно видео записывается со скоростью 30 кадров в секунду, другое - со скоростью 120 кадров в секунду. То, что я хотел бы сделать, это сохранить их временную синхронизацию, что означает, что для каждого кадра видео 30 кадров в секунду на выходе должно отображаться 4 кадра из видео 120 кадров в секунду. Я бы хотел, чтобы окончательный вывод видео воспроизводился со скоростью 30 кадров в секунду, чтобы продолжительность в 4 раза превышала исходные записи.
Из документации AviSynth кажется, ChangeFPS
что эта функция мне понадобится, поскольку она удаляет и дублирует кадры, в то время как «AssumeFPS» просто меняет скорость воспроизведения (и я в основном планирую удвоить каждый кадр клипа 30 кадров в секунду). Однако фильтр, кажется, не делает то, что говорит.
Если я попробую:
clip30 = AviSource("0326.avi").ChangeFPS(120)
clip120 = AviSource("0326-120fps.avi")
это совсем не влияет на скорость воспроизведения или количество кадров клипа 30 кадров в секунду, но удаляет каждый четвертый кадр из клипа 120 кадров в секунду, что совсем не то, что я хочу. К сожалению, добавление .ChangeFPS (7.5) к clip120 вместо этого не имеет такого же обратного эффекта - в этом случае он делает именно то, что и следовало ожидать. В качестве альтернативы, если я попытаюсь:
clip30 = AviSource("0326.avi").AssumeFPS(7.5)
clip120 = AviSource("0326-120fps.avi")
эффекта нет вообще, оба клипа воспроизводятся со скоростью 30 кадров в секунду, что означает, что к моменту окончания клипа 30 кадров в секунду показывается только четверть клипа со скоростью 120 кадров в секунду.
Итак, как я могу объединить эти два клипа так, как я хочу? Мне не удалось найти какие-либо другие внутренние или внешние фильтры, которые бы помогли мне сделать это. Мне кажется, что если бы ChangeFPS
сделал то, что говорится в руководстве, это было бы правильным для работы.
clip30 = AviSource("0326.avi").ChangeFPS(120)
у меня работает нормально, т.е. он выводит видео со скоростью 120 кадров в секунду, которое работает в то же время, что и исходный клип 30 кадров в секунду.Ответы:
Я решил свою проблему, используя первый фрагмент моего вопроса (изменив частоту кадров клипа 30 к / с до 120 к / с), а затем установив
AssumeFPS(30)
окончательное объединенное видео, добавив эту функцию в конец последнего использованного фильтра. Так, например:работает отлично. Теперь у меня есть видео, которое имеет продолжительность клипа 120 кадров в секунду при 30 кадрах в секунду (в четыре раза больше первоначальной длительности записи), причем каждый кадр 30 кадров в секунду увеличивается в четыре раза, как я и хотел.
Я действительно не знаю, почему финал
AssumeFPS(30)
был необходим, так как клип, который я получаю без него, также на 30 кадрах в секунду. Я проверил вывод кадр за кадром в AviDemux, и без этого последнего вызоваAssumeFPS
кадрыclip30
не увеличиваются в четыре раза, как следовало бы.источник