我想在视频开始时显示视频上的徽标。我已经找到了这个命令:
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