首页 > 解决方案 > 使用 Python FFMPEG 在模板/布局中合并多个视频?

问题描述

我目前正在尝试使用FFMPEG 的 Python 库编辑视频。我正在使用多种文件格式,精确地.mp4.png文本输入(.txt)。目标是将不同的视频文件嵌入到“布局”中 - 出于演示目的,我尝试设计示例图片

例子

输出应该是.mp4具有以下元素的 1920x1080 文件:

我想要实现的是创建一种模板文件,在其中我“只”需要输入不同的.mp4文件.png以及文本,最后我会收到一个.mp4文件,而我的 Python 脚本的功能是导航器将数据包发送到 FFMPEG 以自行处理视频。

我深入研究了 FFMPEG 库以及特定于 python 的存储库,但找不到这样的选项。有很多文章解释了“频道布局”的用法(尽管这些似乎不符合我的需要)。

如果有人想尝试相同的版本:

标签: pythonpython-3.xvideolayoutffmpeg

解决方案


在此处输入图像描述

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.jpgright.png缩放以占用剩余部分,因此结果为 1920x1080。

这是一个简单的示例,不适用于所有输入,例如video.mp4自动缩放宽度大于 1920,但您可以使用算术表达式来处理。

$width$height参考 的大小video.mp4。有关使用 JSON 或 XML 的 Python 友好方法,请参阅从 ffmpeg 获取视频尺寸/分辨率/宽度 x 高度。

请参阅有关scalecrophstackdrawtextoverlay格式过滤器的文档。

一个更简单的方法是只添加彩色条而不是任意图像。请参阅使用 ffmpeg 调整视频大小以适合特定大小

通过原子更新即时更改文本text.txt。如果您希望文本在某些时间戳上更改(您没有指定您需要的内容),或者使用字幕过滤器而不是 drawtext。

相关答案:


推荐阅读