使用PythonFFMPEG在模板/布局中合并多个视频?
我目前正在尝试使用FFMPEG的Python 库编辑视频。我正在使用多种文件格式,精确地.mp4,.png和文本输入 ( .txt)。目标是在“布局”中嵌入不同的视频文件 - 为了演示目的,我试图设计一个示例图片:
输出应该是.mp4具有以下元素的 1920x1080文件:
- 元素3是视频本身(因为是手机录屏,大概显示的大小)
- 元素 1和2是“寄宿生”,即静态图片(?)
- 元素 4代表一个有规律变化的文本——通过 python 脚本输入(可能是从
.txt文件中读取的) - 元素 5描绘了一个
.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 高度。
为见文档的规模,产量,hstack,DrawText的,覆盖和格式过滤器。
一个更简单的方法是只添加彩色条而不是任意图像。请参阅使用 ffmpeg 调整视频大小以适应特定大小。
通过原子更新动态更改文本text.txt。或者,如果您希望文本在某些时间戳上更改(您没有指定您需要的内容),则使用字幕过滤器而不是 drawtext。
相关回答:
- 如何使用 ffmpeg 定位叠加/水印/徽标?
- 如何定位drawtext文本?
- 使用ffmpeg垂直或水平堆叠(马赛克)几个视频?
- 从ffmpeg获取视频尺寸/分辨率/宽度x高度