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

2326
Daniel Saner

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

4
Как вы хотите * объединить * их? В вертикальном / горизонтальном расколе или что-то еще? .... `clip30 = AviSource (" 0326.avi "). ChangeFPS (120)` у меня работает нормально, т.е. он выводит видео со скоростью 120 кадров в секунду, которое работает в то же время, что и исходный клип 30 кадров в секунду. Peter.O 12 лет назад 0
У меня есть оба сценария для наложения и один для слоев / смешивания; но это не должно иметь значения, проблема была в том, что я не мог даже заставить два клипа воспроизводиться на разных частотах. Я всегда получал видео с частотой 30 кадров в секунду, в котором была одна из двух проблем, которые я изложил в этом вопросе. Теперь я узнал, что я сделал не так, просто я быстро выписываю ответ. Daniel Saner 12 лет назад 1

1 ответ на вопрос

2
Daniel Saner

Я решил свою проблему, используя первый фрагмент моего вопроса (изменив частоту кадров клипа 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не будут увеличены в четыре раза, как они должны.

Похожие вопросы