ffmpeg - ffmpeg 多个文本/徽标元素
问题描述
我正在尝试将多个项目添加到 ffmpeg 命令并且卡住了。
到目前为止,在命令中,我正在自动更新一个用作视频的图像,我还想添加一个徽标和两行文本。
我一直成功,直到最后一项,即徽标覆盖。
这是代码的相关部分:
ffmpeg \
-f image2 -loop 1 \
-y \
-i "/var/www/html/image_rotate.png" \
-re \
-i audio.mp3 \
-vf "movie=/var/www/html/overlay_logo.png [watermark]; [in][watermark] overlay=0:0 [out], drawtext=fontsize=10:fontfile=/var/www/html/OpenSans-Regular.ttf:textfile=/var/www/html/text1.txt:box=1:boxcolor=#000000:fontcolor=#FFFFFF:x=0:y=(h-text_h-20):reload=1, drawtext=fontsize=10:fontfile=/var/www/html/OpenSans-Regular.ttf:textfile=/var/www/htmltext2.txt:box=1:boxcolor=#000000:fontcolor=#FFFFFF:x=0:y=(h-text_h-30)" \
这给了我以下错误:
Simple filtergraph ... was expected to have exactly 1 input and 1 output. However, it had >1 input(s) and >1 output(s). Please adjust, or use a complex filtergraph (-filter_complex) instead.
如果我删除我添加的最后一部分(覆盖徽标),我不会收到错误消息。如果我添加多个 -vf 它只处理一个(文本或徽标)。
我不确定如何实现这一目标。
解决方案
当您需要在过滤时处理多个流时,推荐的方法是使用 filter_complex。
ffmpeg \
-loop 1 \
-i "/var/www/html/image_rotate.png" \
-i "/var/www/html/overlay_logo.png" \
-i audio.mp3 \
-filter_complex "[0][1]overlay=0:0,drawtext=fontsize=10:fontfile=/var/www/html/OpenSans-Regular.ttf:textfile=/var/www/html/text1.txt:box=1:boxcolor=#000000:fontcolor=#FFFFFF:x=0:y=(h-text_h-20):reload=1, drawtext=fontsize=10:fontfile=/var/www/html/OpenSans-Regular.ttf:textfile=/var/www/htmltext2.txt:box=1:boxcolor=#000000:fontcolor=#FFFFFF:x=0:y=(h-text_h-30)" \
-y \
-shortest \
徽标现在作为常规输入提供。
推荐阅读
- json - AWS CloudWatch 复合警报的 SNS 通知消息不是 JSON 字符串
- android - Android SDK 15:从保留特定对象的对象列表中删除重复项
- accordion - 当 Zurb Foundation Accordion 不工作时
- 是来自数据库的动态
- mysql-workbench - 如何永久设置 mysql 工作台首选项
- sql - Postgres RLS 策略:仅允许基于外部关系存在的行上的 SELECT
- postgresql - 在 dotnet 核心中迁移 postgresql 时出现异常
- rust - Rust:测量 fs I/O 吞吐量给出了高得离谱的数字——如何正确测量真实的 I/O 速度?
- javascript - 验证按钮提交 React 上的密码输入
- flutter - 更改复制变量的值后,StreamProvider 的值发生意外更改
- java - 为什么最后一行没有被扫描