ffmpeg drawtext 在整个视频上重复叠加文本 space

ffmpeg drawtext to overlay text repeatedly over the whole video space

我希望像 Hello world 这样的特定文本分布在多行和整个视频 space/page 中。

我在 python 脚本中使用 bash 作为子进程 运行 ffmpeg 命令。示例代码:

subprocess.run( [ "ffmpeg", "-i", input_file, "-vf", f"drawtext=font={font_family}:text={watermark_text}:fontcolor={font_color}:fontsize={font_size}{background_box}:{watermark_position}", "-codec:a", "copy", "-preset", encoding_preset, f"./watermark/{media_id}.mp4", ] )

有什么好的方法可以实现吗?

这是您的基本模板。我假设输入是 720p。

ffmpeg -i 720p_input -f lavfi -i "color=black@0:s=64x64,format=yuva420p" -filter_complex "[1]trim=end_frame=1,drawtext=font={font_family}:text={watermark_text}:fontcolor={font_color}:fontsize={font_size}{background_box}:{watermark_position},rotate=a={degree}*PI/180:ow=hypot(iw,ih):oh=ow:c=black@0,loop=-1:1:0,tile=15x9,trim=end_frame=1[wm];[0][wm]overlay=0:0" -c:a copy -preset encoding_preset ./watermark/{media_id}.mp4

{degree}应该换成旋转角度。 每个文本单元格的最终大小是每边 64 x sqrt(2) = 90 pixels15x9 是平铺布局。调整它以覆盖整个输入帧。