ffmpeg - 让 ffmpeg 在视频上添加重复的文本覆盖

标签 ffmpeg

我正在寻找一个覆盖层,一遍又一遍地循环遍历字符串中的字符。我已成功使用 sendcmd 文件将 A、B、C、D、E 放在视频的前 5 秒

0  drawtext reinit 'text=A';
1  drawtext reinit 'text=B';
2  drawtext reinit 'text=C';
3  drawtext reinit 'text=D';
4  drawtext reinit 'text=E';

但它不会循环,我也无法找到一种方法来实现它,因为 sendcmd 看起来只需要一个简单的时间码。我可以为我的小时视频制作一个 3600 行长的命令文件,一遍又一遍地使用这些命令(命令文件将以编程方式生成,因此不繁琐)

经过一些相当大的实验后,我能够使用 5 个单独的绘图文本来做到这一点:
drawtext=fontfile=/Windows/Fonts/bauhs93.ttf:fontsize=1024:fontcolor=white@0.1:bordercolor=black@0.1:borderw=10:r=250:text='A':x=if(trunc(mod(t\,5))\,-2000\,(w-tw)/2),
drawtext=fontfile=/Windows/Fonts/bauhs93.ttf:fontsize=1024:fontcolor=white@0.1:bordercolor=black@0.1:borderw=10:r=250:text='B':x=if(trunc(mod(t\,5))-1\,-2000\,(w-tw)/2),
drawtext=fontfile=/Windows/Fonts/bauhs93.ttf:fontsize=1024:fontcolor=white@0.1:bordercolor=black@0.1:borderw=10:r=250:text='C':x=if(trunc(mod(t\,5))-2\,-2000\,(w-tw)/2),
drawtext=fontfile=/Windows/Fonts/bauhs93.ttf:fontsize=1024:fontcolor=white@0.1:bordercolor=black@0.1:borderw=10:r=250:text='D':x=if(trunc(mod(t\,5))-3\,-2000\,(w-tw)/2),
drawtext=fontfile=/Windows/Fonts/bauhs93.ttf:fontsize=1024:fontcolor=white@0.1:bordercolor=black@0.1:borderw=10:r=250:text='E':x=if(trunc(mod(t\,5))-4\,-2000\,(w-tw)/2)

但是可以看出,我必须在这里重复很多东西。有没有更流畅的方法?添加的字符越多,它似乎对编码速度有明显的影响

我希望文本表达式会有所帮助,但似乎我只能从值中返回数字,所以这个表达式没有成功:
%{e:if(trunc(mod(t,5)),'A', '')%{e:if(trunc(mod(t,5))-1,'B', '') ...

最佳答案

最后,我刚刚创建了一个包含数千个 sendcmd 命令的文本文件

关于ffmpeg - 让 ffmpeg 在视频上添加重复的文本覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61458296/

相关文章:

video - 使用 ffmpeg 连接视频时输出流中的非单调 DTS

android - Centos 视频优化器

ffmpeg - avcodec_decode_audio4 已被弃用,我如何将大小为 avpkt->size 的音频帧从 avpkt->data 解码为帧

opengl - 如何在不复制到 CPU 内存的情况下将 ffmpeg 纹理转换为 Open GL 纹理

nginx 推 rtmp 流到 ffmpeg

c# - 在 C# 中使用快照时,FFMpegCore 不生成输出

c# - 为 NULL 时通过 P/Invoke 传递双指针参数

linux - ffmpeg 同时连接和缩放?

c++ - 从 RTP 流解码 h264 帧

ffmpeg - 添加 GIF 作为水印和循环 FFMPEG