如何修改FFmpeg命令仅在最后一帧图片添加版权文字?
解决方法:让版权文字仅在最后一张图片显示
你的原命令里的drawtext滤镜是全局应用到所有帧的,所以每张图片上都会显示版权文字。要让它只出现在最后一张图片上,我们可以利用FFmpeg滤镜的enable参数,指定只有最后一帧(对应最后一张图片)才渲染这个文字。
修改后的FFmpeg命令如下:
ffmpeg \ -thread_queue_size 512 \ -f image2 -pattern_type glob -framerate 1/3 \ -i '*.jpg' \ -i 'audio.mp3' \ -c:a aac -c:v libx264 \ -vf "scale=640:480,format=yuv420p,drawtext=text='Copyright':fontcolor=white:box=1:boxcolor=black@0.5:boxborderw=5:x=w-tw-5:y=5:enable='eq(frame_num, nb_frames)'" \ -preset medium \ video.mp4
关键修改点说明:
- 在
drawtext滤镜的参数末尾添加了:enable='eq(frame_num, nb_frames)':frame_num是当前帧的序号(从1开始计数)nb_frames是视频的总帧数(每张图片对应一帧,所以总帧数等于你的图片数量)eq(frame_num, nb_frames)表示仅当当前帧是最后一帧时,才启用drawtext滤镜,这样版权文字就只会在最后一张图片显示的3秒内出现。
如果你的FFmpeg版本比较旧,nb_frames变量可能无法直接使用,这时候可以手动计算最后一张图片的起始时间:假设你有N张图片,最后一张的起始时间是3*(N-1)秒(因为每张图显示3秒),那么enable参数可以改成enable='gte(t, 3*(N-1))',把N替换成你实际的图片数量即可。比如你有10张图,就写成enable='gte(t, 27)'(3*(10-1)=27)。
内容的提问来源于stack exchange,提问作者BentCoder
相关产品推荐
相关产品推荐

