4

У меня есть две видеозаписи одной и той же сцены, но с разными частотами кадров, которые я хотел бы объединить, используя скрипт 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 сделал то, что написано в руководстве, это было бы правильным для работы.

1 ответ1

2

Я решил свою проблему, используя первый фрагмент из моего вопроса (изменив частоту кадров клипа 30 к / с до 120 к / с), но затем также установив AssumeFPS(30) для окончательного комбинированного видео, добавив эту функцию в конец последнего фильтра, который я использовал , Так, например:

clip30 = AviSource("0326.avi").ChangeFPS(120)
clip120 = AviSource("0326-120fps.avi")
StackHorizontal(clip30, clip120).AssumeFPS(30)

работает отлично. Теперь у меня есть видео, которое имеет продолжительность клипа 120 кадров в секунду при 30 кадрах в секунду (в четыре раза больше первоначальной длительности записи), причем каждый кадр 30 кадров в секунду увеличивается в четыре раза, как я и хотел.

Я действительно не знаю, почему был необходим финальный AssumeFPS(30) , поскольку клип, который я получаю без него, также имеет скорость 30 кадров в секунду. Я проверил вывод покадрового вывода в AviDemux, и без этого последнего вызова AssumeFPS кадры clip30 не увеличиваются в четыре раза, как следовало бы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .