python - 使用 Python FFMPEG 在模板/布局中合并多个视频?

标签 python python-3.x video layout ffmpeg

我目前正在尝试使用 Python library of FFMPEG 编辑视频.我正在使用多种文件格式,准确地说是 .mp4 , .png和文本输入(.txt)。目标是将不同的视频文件嵌入到“布局”中——出于演示目的,我尝试设计一个示例图片:
Example
输出应该是 1920x1080 .mp4包含以下元素的文件:

  • 元素 3 是视频本身(由于是手机录屏,大概就是那里显示的大小)
  • 元素 1 2 是“寄宿生”,即静态图片(?)
  • 元素 4 表示定期更改的文本 - 通过 python 脚本输入(可能从 .txt 文件中读取)
  • 元素 5 描绘了 .png , .svg或类似的;通常是广义上的“图片”。

  • 我想要实现的是创建一种模板文件,我“只是”需要在其中输入不同的 .mp4.png文件,以及文本,最后我会收到 .mp4文件,而我的 Python 脚本充当导航器,将数据包发送到 FFMPEG 以处理视频本身。
    我深入研究了 FFMPEG 库以及特定于 python 的存储库,但找不到这样的选项。有很多文章解释了“ channel 布局”的用法(尽管这些似乎不符合我的需要)。
    如果有人想尝试相同的版本:
  • python --version :
    Python 3.7.3
  • pip show ffmpeg : 版本:1.4 (这是最新的;关于题外话:使用 FFMPEG 不是强制性的,我更喜欢使用这个库,但如果它不提供我正在寻找的功能,如果有人建议,我将不胜感激别的)
  • 最佳答案

    enter image description here

    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,但您可以使用 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。
    相关答案:
  • How to position overlay/watermark/logo with ffmpeg?
  • How to position drawtext text?
  • Vertically or horizontally stack (mosaic) several videos using ffmpeg?
  • Getting video dimension / resolution / width x height from ffmpeg
  • 关于python - 使用 Python FFMPEG 在模板/布局中合并多个视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65580466/

    相关文章:

    python - 尝试导入 Tensorflow 时出现 ModuleNotFoundError

    php - 合并 2 个非常大的文本文件,更新每一行,不使用内存

    python-3.x - 使用数据帧作为输入并行化函数

    python - 是否可以将所有相同的术语加入同一个 pandas 数据框列?

    html - 如何将 svg 文件上传到 django 应用程序?

    audio - 使用软件或命令行从音频/视频中消除人的声音

    html - 具有 CSS opacity 属性的 <video> 仅在 Chrome 54 for Mac 上显得异常暗淡

    c# - 有哪些网站提供有关 ASP.NET (C#) 的免费视频教程?

    python - 我无法完全理解这行代码

    python - 修改 Tkinter 条目小部件时如何获取事件回调?