如何使用 ffmpeg 将 png 徽标添加到 mp4 视频中,可以动态调整大小并覆盖整个视频

如何使用 ffmpeg 将 png 徽标添加到 mp4 视频中,可以动态调整大小并覆盖整个视频

我想在视频开始时显示视频上的徽标。我已经找到了这个命令:

ffmpeg -i input.mp4 -framerate 30000/1001 \
-loop 1 -i test.png -filter_complex "[1:v] fade=out:st=30:d=1:alpha=1 [ov];\
 [0:v][ov] overlay=10:10 [v]" -map "[v]" -map 0:a -c:v libx264 \
-c:a copy -shortest Bigout.mp4

如何使用 ffmpeg 在视频的前 30 秒添加我的徽标?

但问题是,我的视频的宽度/高度不同,每次添加徽标时,它都不会覆盖整个视频。 如果我想将徽标的宽度/高度设置为视频的宽度/高度,该怎么办?

更新 在@Behroozfar 回答之后,我尝试使用 scale2ref,命令如下:

ffmpeg -i input.mp4 -framerate 30000/1001 -loop 1 -i biglogo.png -filter_complex "[1:v][0:v]scale2ref=iw/1:-1[ovrl][0v]; [0v][ovrl]overlay=0:0[v]" -map "[v] ; [1:v] fade=out:st=2:d=1:alpha=1 [ov]" -map 0:a -c:v libx264 -c:a copy -shortest Bigout.mp4

但问题是,我无法只显示一秒钟的徽标。它在整个视频播放过程中都存在。

答案1

使用scale2ref过滤器

ffmpeg -i input.mp4 -framerate 30000/1001 \ -loop 1 -i test.png -filter_complex "[1:v]fade=out:st=30:d=1:alpha=1[ov]; \ [ov][0:v]scale2ref[logo][video]; \ [video][logo]overlay=10:10[v]" -map "[v]" -map 0:a -c:v libx264 \ -c:a copy -shortest Bigout.mp4

答案2

要显示一秒钟的全尺寸徽标,然后再显示小尺寸徽标,请使用

ffmpeg -i input.mp4 -framerate 30000/1001 -loop 1 -i test.png
       -filter_complex
         "[1]fade=out:st=1:d=0.9:alpha=1,trim=0:2[f]; \
          [1]fade=st=2:d=0.5:alpha=1,trim=0:3[s]; \
          [f][0]scale2ref[fs][video];[s][fs]scale2ref=iw/8:-1[ss][fo];
          [video][fo]overlay=eof_action=pass[v0]; \
          [v0][ss]overlay=W-w-5:H-h-5[v]" \
       -map "[v]" -map 0:a -c:v libx264 -c:a copy Bigout.mp4

相关内容