ffmpeg-视频的动态字母和随机位置水印?

ffmpeg-视频的动态字母和随机位置水印?,ffmpeg,Ffmpeg,我正在制作一个在线课程,为了避免盗版,我想在视频(包括个人用户信息)上加上水印,这样它就不能上传到共享网站。现在最难的部分是:我会在视频中每30秒移动3/4个随机位置的水印。 使用ffmpeg?编辑是可能的:这是对LN链接中答案的改编,将每30秒随机调整一次位置,无重复: ffmpeg -i input.mp4 \ -vf \ "drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5:text='studentname': \ x

我正在制作一个在线课程,为了避免盗版,我想在视频(包括个人用户信息)上加上水印,这样它就不能上传到共享网站。现在最难的部分是:我会在视频中每30秒移动3/4个随机位置的水印。
使用ffmpeg?

编辑是可能的:这是对LN链接中答案的改编,将每30秒随机调整一次位置,无重复:

ffmpeg -i input.mp4 \
-vf \
"drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5:text='studentname': \
 x=if(eq(mod(t\,30)\,0)\,rand(0\,(W-tw))\,x): \
 y=if(eq(mod(t\,30)\,0)\,rand(0\,(H-th))\,y)" \
-c:v libx264 -crf 23 -c:a copy output.mp4

旧答案

您可以使用如下命令:

ffmpeg -i input.mp4 \
-vf \
"drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5: \
 text='studentname':x=200:y=350:enable='between(mod(t\,30*3),0,30)', \
 drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5: \
 text='studentname':x=1000:y=600:enable='between(mod(t\,30*3),31,60)', \
 drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5: \
 text='studentname':x=450:y=50:enable='between(mod(t\,30*3),61,90)'" \
-c:v libx264 -crf 23 -c:a copy output.mp4

这里,三个位置每30秒旋转一次。每个
x:y
参数都是手动设置的。如果您是从shell脚本调用命令,则可以使用随机数生成器并将其输入到命令中。drawtext筛选器中包含一个随机函数,但它会在每一帧中进行计算,因此将生成一个带有文本的伪乒乓球游戏。

编辑::这是LN链接中答案的一个改编,它将每30秒随机一次位置,不会重复:

ffmpeg -i input.mp4 \
-vf \
"drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5:text='studentname': \
 x=if(eq(mod(t\,30)\,0)\,rand(0\,(W-tw))\,x): \
 y=if(eq(mod(t\,30)\,0)\,rand(0\,(H-th))\,y)" \
-c:v libx264 -crf 23 -c:a copy output.mp4

旧答案

您可以使用如下命令:

ffmpeg -i input.mp4 \
-vf \
"drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5: \
 text='studentname':x=200:y=350:enable='between(mod(t\,30*3),0,30)', \
 drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5: \
 text='studentname':x=1000:y=600:enable='between(mod(t\,30*3),31,60)', \
 drawtext=fontfile=font.ttf:fontsize=80:fontcolor=yellow@0.5: \
 text='studentname':x=450:y=50:enable='between(mod(t\,30*3),61,90)'" \
-c:v libx264 -crf 23 -c:a copy output.mp4

这里,三个位置每30秒旋转一次。每个
x:y
参数都是手动设置的。如果您是从shell脚本调用命令,则可以使用随机数生成器并将其输入到命令中。drawtext过滤器中包含一个随机函数,但它会在每一帧中计算,因此会产生一个带有文本的伪乒乓球游戏。

Duplicate of.Duplicate of。这是一个有趣的示例,我已经看到了很多类似的问题,我认为如果你想提交补丁的话,将其添加到
doc/filters.texi
中的drawtext示例中会很有用。听起来不错。你能指出如何格式化和提交文档补丁的指南吗?谢谢然后导航到
ffmpeg
目录。始终首先重新设置基址:
git pull--rebase
。创建本地分支:
git checkout-b drawrandom
。编辑。本地提交更改:
git提交-as
(请参阅)。查看日志
git日志-p-2
,制作补丁:
git格式补丁-o补丁源
。将
补丁中的文件
通过电子邮件发送到ffmpeg的ffmpeg-devel。另请参阅。大多数开发人员使用git发送电子邮件,但这增加了设置的复杂性。有人能从上面的例子中解释这个表达式的逻辑和细节吗:x=if(eq(mod(t\,30)\,0)\,rand(0\,(W-tw))\,x)?我知道它负责X轴的随机重新定位,每30秒一次。但是它是如何工作的——那些:if,eq,mod,t,rand,\?这是一个有趣的例子,我已经看到了足够多类似的问题,我认为如果你想提交补丁,将它添加到
doc/filters.texi
中的drawtext示例中可能会很有用。听起来不错。你能指出如何格式化和提交文档补丁的指南吗?谢谢然后导航到
ffmpeg
目录。始终首先重新设置基址:
git pull--rebase
。创建本地分支:
git checkout-b drawrandom
。编辑。本地提交更改:
git提交-as
(请参阅)。查看日志
git日志-p-2
,制作补丁:
git格式补丁-o补丁源
。将
补丁中的文件
通过电子邮件发送到ffmpeg的ffmpeg-devel。另请参阅。大多数开发人员使用git发送电子邮件,但这增加了设置的复杂性。有人能从上面的例子中解释这个表达式的逻辑和细节吗:x=if(eq(mod(t\,30)\,0)\,rand(0\,(W-tw))\,x)?我知道它负责X轴的随机重新定位,每30秒一次。但它是如何工作的——这些:if,eq,mod,t,rand,\?