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 pixels
。
15x9
是平铺布局。调整它以覆盖整个输入帧。
我希望像 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 pixels
。
15x9
是平铺布局。调整它以覆盖整个输入帧。