FFMPEG Crossfade видео изменяет разрешение видео

FFMPEG Crossfade видео изменяет разрешение видео

В настоящее время я использую команду из этого вопроса для плавного перехода между двумя видео:

кроссфейд между 2 видео с помощью ffmpeg

Моя команда:

ffmpeg -i firstVideo.mp4 -i secondVideo.mp4 -f lavfi -i color=black -    filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=640x360,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
 -vcodec libx264 -map [outv] output.mp4

Эта анимация кроссфейда работает отлично, за исключением того, что она сжимает видео до 480x360 вместо желаемых 640x360. Метаинформация будет ложно показывать, что размеры составляют 640x360, но я уверен, что это не так.

Я также уверен, что оба входных видео имеют разрешение ровно 640x360.

Я предполагаю, что сжатие происходит из-за формата пикселей yuva420p, но я не уверен, какие еще варианты у меня есть. Я пробовал менять формат пикселей, но пока ничего не сработало.

Приведенная выше команда выполняется без ошибок.

решение1

Использовать

ffmpeg -i firstVideo.mp4 -i secondVideo.mp4 -f lavfi -i "color=black:s=640x360:d=9" 
-filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
 -vcodec libx264 -map [outv] output.mp4

Фильтр цвета выводит видео 320x240, если не указано иное. Фильтр масштабирования стремится сохранить исходное соотношение сторон — в данном случае 4:3, поэтому видео кодируется как 640x360, но с соотношением сторон дисплея 4:3, поэтому отображается как 480x360.

Связанный контент