AviSynth ChangeFPS: объединение видео с различной частотой кадров


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сделал то, что говорится в руководстве, это было бы правильным для работы.


Как вы хотите их объединить ? В вертикальном / горизонтальном расколе или что-то еще? .... clip30 = AviSource("0326.avi").ChangeFPS(120)у меня работает нормально, т.е. он выводит видео со скоростью 120 кадров в секунду, которое работает в то же время, что и исходный клип 30 кадров в секунду.
Peter.O

1
У меня есть оба сценария для наложения и один для слоев / смешивания; но это не должно иметь значения, проблема была в том, что я не мог даже заставить два клипа воспроизводиться на разных частотах. Я всегда получал видео 30fps, в котором была одна из двух проблем, которые я изложил в этом вопросе. Теперь я узнал, что я сделал неправильно, я просто быстро выписываю ответ.
Даниэль Санер

Ответы:


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не увеличиваются в четыре раза, как следовало бы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.