我目前正在尝试使用 Python library of FFMPEG 编辑视频.我正在使用多种文件格式,准确地说是 .mp4
, .png
和文本输入(.txt
)。目标是将不同的视频文件嵌入到“布局”中——出于演示目的,我尝试设计一个示例图片:
输出应该是 1920x1080 .mp4
包含以下元素的文件:
.txt
文件中读取).png
, .svg
或类似的;通常是广义上的“图片”。 我想要实现的是创建一种模板文件,我“只是”需要在其中输入不同的
.mp4
和 .png
文件,以及文本,最后我会收到 .mp4
文件,而我的 Python 脚本充当导航器,将数据包发送到 FFMPEG 以处理视频本身。我深入研究了 FFMPEG 库以及特定于 python 的存储库,但找不到这样的选项。有很多文章解释了“ channel 布局”的用法(尽管这些似乎不符合我的需要)。
如果有人想尝试相同的版本:
python --version
:Python 3.7.3
pip 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,但您可以使用 arithmetic expressions 来处理.$width
和 $height
引用大小video.mp4
.见 Getting video dimension / resolution / width x height from ffmpeg对于使用 JSON 或 XML 的 Python 友好方法。见文档 scale , crop , hstack , drawtext , overlay , 和 format过滤器。
一个更简单的方法是只添加彩色条而不是任意图像。见 Resizing videos with ffmpeg to fit a specific size .
通过自动更新
text.txt
即时更改文本.或使用 subtitles如果您希望文本在某些时间戳上更改(您没有指定您需要的内容),请使用 filter 而不是 drawtext。相关答案:
关于python - 使用 Python FFMPEG 在模板/布局中合并多个视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65580466/