python - 使用 Python FFMPEG 在模板/布局中合并多个视频?
问题描述
我目前正在尝试使用FFMPEG 的 Python 库编辑视频。我正在使用多种文件格式,精确地.mp4
和.png
文本输入(.txt
)。目标是将不同的视频文件嵌入到“布局”中 - 出于演示目的,我尝试设计示例图片:
输出应该是.mp4
具有以下元素的 1920x1080 文件:
- 元素3是视频本身(由于是手机录屏,大概就是那里显示的大小)
- 元素 1和2是“寄宿生”,即静态图片(?)
- 元素 4表示有规律变化的文本——通过 python 脚本输入(可能从
.txt
文件中读取) - 元素 5描绘了 a
.png
或.svg
类似物;通常是广义上的“图片”。
我想要实现的是创建一种模板文件,在其中我“只”需要输入不同的.mp4
文件.png
以及文本,最后我会收到一个.mp4
文件,而我的 Python 脚本的功能是导航器将数据包发送到 FFMPEG 以自行处理视频。
我深入研究了 FFMPEG 库以及特定于 python 的存储库,但找不到这样的选项。有很多文章解释了“频道布局”的用法(尽管这些似乎不符合我的需要)。
如果有人想尝试相同的版本:
python --version
: Python 3.7.3pip show ffmpeg
:版本:1.4(它是最新的;关于题外话:使用 FFMPEG 不是强制性的,我更喜欢使用这个库,但如果它不提供我正在寻找的功能,我会高度如果有人提出其他建议,我们将不胜感激)
解决方案
ffmpeg -i left.jpg -i video.mp4 -i right.png -i logo.png -filter_complex "[0]scale=(1920-1080*($width/$height))/2:1080:force_original_aspect_ratio=increase,crop=(1920-1080*($width/$height))/2:1080[left];[1]scale=-2:1080[main];[2]scale=(1920-1080*($width/$height))/2:1080:force_original_aspect_ratio=increase,crop=(1920-1080*($width/$height))/2:1080[right];[left][main][right]hstack=inputs=3[bg];[bg][3]overlay=5:main_h-overlay_h-5:format=auto,drawtext=textfile=text.txt:reload=1:x=w-tw-10:y=h-th-10,format=yuv420p" -movflags +faststart output.mp4
它的作用是缩放video.mp4
,使其高度为 1080 像素并自动缩放宽度。left.jpg
并right.png
缩放以占用剩余部分,因此结果为 1920x1080。
这是一个简单的示例,不适用于所有输入,例如video.mp4
自动缩放宽度大于 1920,但您可以使用算术表达式来处理。
$width
并 $height
参考 的大小video.mp4
。有关使用 JSON 或 XML 的 Python 友好方法,请参阅从 ffmpeg 获取视频尺寸/分辨率/宽度 x 高度。
请参阅有关scale、crop、hstack、drawtext、overlay和格式过滤器的文档。
一个更简单的方法是只添加彩色条而不是任意图像。请参阅使用 ffmpeg 调整视频大小以适合特定大小。
通过原子更新即时更改文本text.txt
。如果您希望文本在某些时间戳上更改(您没有指定您需要的内容),或者使用字幕过滤器而不是 drawtext。
相关答案:
推荐阅读
- html - 使 flexbox 项目宽度等于兄弟元素的组合宽度
- sql - 联合查询减去总数
- javascript - 将 jquery 中的默认值放入 textarea 时缺少 \
- git - 新文件夹中的哪些文件将由 git 添加
- visual-studio-code - VS Code editor.overviewRulerLanes 设置有什么作用?
- javascript - 如何在不返回浏览器的情况下使用 JavaScript 返回上一个路由?
- mysql - 如何将csv文件的某些列导入mysql phpmyadmin
- mongodb - MongoDB 的查询优化器有多可靠?
- c# - 在 C# 中替换 xml 字符串时出错
- php - 如何回显在 unlink 方法中的函数中返回的变量