Общее количество кадров Avisynth не равно общему количеству кадров VirtualDub

Похоже, что Dissolve и/или Fade изменяют общее количество кадров в сценариях .avs. Когда я суммирую общее количество кадров в сценарии avs, а затем загружаю сценарий avs в Vdub, общее количество кадров отличается. Мой реальный пример ниже показывает разницу в 822 кадра против 1368 кадров для одного и того же скрипта. Я провел несколько основных тестов, которые, похоже, подтверждают эту гипотезу. Конечно, я могу делать что-то глупое. Мы будем очень признательны за любые рекомендации. Пожалуйста, дайте мне знать, если я могу что-то уточнить. Ffmpeg также работает с тем же скриптом, что наводит меня на мысль, что это проблема Avisynth. Или отсутствие у меня навыков кодирования avs.

Системные характеристики: Win7, версия FFmpeg: 20170223-dcd3418 общий доступ к win32, версия AVISynth: 2.6

Test1.avs = 200 кадров long = ожидаемое поведение

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
video = v1 + v2
return video

Test2.avs с возвратом Dissolve = 195 кадров long = Неожиданное поведение

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
return Dissolve(v1, v2, 5)

Test3.avs с fadeOut(fadeIn = 202 кадра long = Неожиданное поведение

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
fadeOut(fadeIn(v1 + v2, 60), 60)

Test4.avs с растворением и исчезновением = 197 кадров long = Неожиданное поведение

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
v3 = Dissolve(v1, v2, 5)
fadeOut(fadeIn(v3, 60), 60)

Test5.avs явно указывает частоту кадров при растворении и исчезновении = 197 кадров = неожиданное поведение

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
v3 = Dissolve(v1, v2, 5, 24)
fadeOut(fadeIn(v3, 60, $000000, 24), 60, $000000, 24)

realExample = 822 кадра long = ожидаемое поведение (это то, что я хочу)

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24).trim(1,106)
v3=ImageReader("3.png", fps=24).trim(1,471)
v9=ImageReader("9.png", fps=24).trim(1,58)
v10=ImageReader("10.png", fps=24).trim(1,35)
v11=ImageReader("11.png", fps=24).trim(1,152)
video = v1 + v3 + v9 + v10 + v11
return video

realExample = длина 1368 кадров

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24).trim(1,106)
v3=ImageReader("3.png", fps=24).trim(1,471)
v9=ImageReader("9.png", fps=24).trim(1,58)
v10=ImageReader("10.png", fps=24).trim(1,35)
v11=ImageReader("11.png", fps=24).trim(1,152)
d1 = Dissolve(v1, v3, 5)
d3 = Dissolve(v3, v9, 5)
d9 = Dissolve(v9, v10, 5)
d10 = Dissolve(v10, v11, 5)
fadeOut(fadeIn(d1 + d3 + d9 + d10,60),60)

person Corpuscular    schedule 30.04.2017    source источник


Ответы (1)


Вы заявили, что некоторые из ваших результатов дали «неожиданное поведение», но вы не указали, что вы ожидали от них, поэтому неясно, что вы считаете неправильным и в чем заключается ваше непонимание. (Обсуждая проблемы, вы всегда должны указывать, какие результаты вы получили и какие результаты вы ожидали вместо этого.)

В вашем примере Dissolve (Test2.avs) вы говорите, что 195 кадров — это неожиданно, но мне это кажется правильным. «Слияние» двух клипов вместе означает, что конец одного клипа перекрывается с началом второго клипа, когда один постепенно переходит в другой; это не то же самое, что затухание первого клипа, а затем затухание второго клипа. Перекрытие означает, что результат должен быть короче, чем сумма длин отдельных клипов. Вы объединили два клипа по 100 кадров и указали перекрытие из 5 кадров, поэтому 100 + 100 - 5 = 195.

В вашем примере FadeOut (Test3.avs) вы говорите, что 202 кадра — это неожиданно, но мне это тоже кажется правильным. В документации для FadeIn/FadeOut указано:

В начале/конце добавляется дополнительный цветной кадр, что увеличивает общее количество кадров на один (или на два для FadeIO).

Поскольку вы сделали один вызов FadeIn и один вызов FadeOut в test3.avs, были добавлены два дополнительных кадра. Если вы этого не хотите, вы можете использовать FadeIn0/FadeOut0 (или FadeIO0, поскольку вы используете оба), хотя обратите внимание, что с этими функциями первый/последний кадр не будет точно черным. Если вам нужна точность, просто обрежьте первый и/или последний кадр перед использованием обычных функций FadeIn/FadeOut/FadeIO.

Ваши "реальные примеры" сравнивают яблоки с апельсинами. Версия с Dissolve значительно увеличивает количество кадров, потому что одни и те же клипы объединяются несколько раз:

d1 = Dissolve(v1, v3, 5)
d3 = Dissolve(v3, v9, 5)
...
fadeOut(fadeIn(d1 + d3 + d9 + d10,60),60)

d1 и d3 каждый включает копию клипа v3, а затем вы соединили d1 и d3 вместе в конце, что означает, что v3 включено дважды. (Это также верно для v9 и v10.)

Вероятно, вы намеревались сделать что-то вроде:

video = Dissolve(v1, v3, 5)
video = Dissolve(video, v9, 5)
video = Dissolve(video, v10, 5)
video = Dissolve(video, v11, 5)
video = FadeOut(FadeIn(video, 60), 60)

или более кратко:

video = FadeIO(Dissolve(v1, v3, v9, v10, v11, 5), 60)

В результате должно получиться 804 кадра: (822 кадра из исходных клипов) - (4 точки растворения) * (5 кадров перекрытия на растворение) + (2 кадра из FadeIO).

Если вы действительно хотите объединить клипы, постепенно исчезая, а затем исчезая, вы можете сохранить исходное количество кадров, выполнив следующие действия:

video =   FadeIO0(v1, 60) \
        + FadeIO0(v3, 60) \
        + FadeIO0(v9, 60) \
        + FadeIO0(v10, 60) \
        + FadeIO0(v11, 60)
person jamesdlin    schedule 07.05.2017
comment
что сделал это. Я неправильно понял, что происходит. - person Corpuscular; 10.05.2017
comment
@Corpuscular Если этот ответ был полезен, вы должны проголосовать за него и принять его. знак равно - person jamesdlin; 10.05.2017
comment
Сделанный. Новичок :) - person Corpuscular; 11.05.2017
comment
@Corpuscular Э-э, похоже, вы этого не сделали? знак равно - person jamesdlin; 12.05.2017
comment
Ох, хорошо. Я думаю, что вы по-прежнему должны иметь возможность принимать ответы на вопросы, которые вы задали, нажав на галочку. - person jamesdlin; 14.05.2017