【问题标题】:How do websites render custom videos programatically?网站如何以编程方式呈现自定义视频?
【发布时间】:2020-07-18 09:48:06
【问题描述】:

我注意到许多网站,例如 https://biteable.comhttps://animoto.com/apps/online-video-maker 等,它们本质上是在线视频编辑器,允许用户应用效果、添加自定义文本等并渲染视频。

我进行了一些研究,但找不到有关这些网站如何以编程方式创建视频的任何高级答案。我见过提到“FFmpeg”,但这似乎只能完成基本任务,例如将一系列图像转换为视频(我错了吗?)。

我对视频渲染知之甚少,希望有人能帮助我开始研究。是否存在可以帮助完成这些网站正在做的事情的图书馆?或者这些网站是否从头开始使用较低级别的语言来实现这一点?

【问题讨论】:

    标签: ffmpeg rendering video-processing


    【解决方案1】:

    我见过提到“FFmpeg”,但这似乎只能完成基本任务,例如将一系列图像转换为视频(我错了吗?)。

    FFmpeg(ffmpeg 命令行工具或使用它的 libav* 库)可以完成示例视频中显示的很多内容,但如果您没有使用 FFmpeg 的经验,则某些效果会很困难。知道如何编写算术表达式将有助于操作某些滤镜效果。

    其次,ffmpeg 不是编辑器。它可以用于有一些挑战的简单编辑,但它肯定是可能的。

    是否存在可以帮助完成这些网站正在做的事情的库?

    MLT 框架 (melt) 是另一个示例。

    或者这些网站是从头开始使用较低级别的语言来实现这一点的?

    未知。我不认为我们可以回答这个问题。据我所知,他们没有透露任何流程细节,如果有人知道他们可能签署了保密协议。

    他们的例子告诉我们什么

    查看其中一个示例视频,我可以看出他们至少使用 FFmpeg 和 x264 进行编码:

    $ ffmpeg -i Promo-video-created-with-Animoto-online-video-maker-bf8660fd0c.mp4
    …
        encoder         : Lavf57.56.100
    

    Lavf 是 libavformat 的别名,它是 FFmpeg 复用/解复用库。 57.56.100 是 major.minor.micro 版本号。这个特定版本表明他们可能正在为该视频使用 FFmpeg 3.2 发布分支。

    $ strings Promo-video-created-with-Animoto-online-video-maker-bf8660fd0c.mp4 | grep x264
    x264 - core 123 r0+5540M 04d6470 - H.264/MPEG-4 AVC codec - Copyright 2003-2012 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0x1:0x111 me=umh subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=8 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=120 keyint_min=1 scenecut=40 intra_refresh=0 rc_lookahead=120 rc=crf mbtree=1 crf=18.0 qcomp=0.60 qpmin=10 qpmax=51 qpstep=4 vbv_maxrate=5000 vbv_bufsize=10000 crf_max=0.0 nal_hrd=none ip_ratio=1.41 aq=1:1.00
    

    使用过时的 x264 创建此示例,但该示例可能同样陈旧。他们使用-crf 18 -maxrate 5000k -bufsize 10000k

    【讨论】:

    • 除此之外,在过去的几年里,有不少公司与我接触过此类程序化生成,并参与了一些工作。通常基于移动设备,但也有一些基于网络的。它通常是脚本 (python/bash/js) 中的一系列 ffmpeg 命令,有时涉及使用在 kdenlive 等视频编辑器中准备的 mlt 和/或模板。
    【解决方案2】:

    基本任务,例如将一系列图像转换为视频

    首先,是的,你错了。 ffmpeg 可以做的更多。

    其次,视频只是一系列帧。要制作程序化视频,您每秒制作 30 次程序化帧,然后将这些“图像”编码为视频。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2017-06-18
      • 2012-08-22
      • 1970-01-01
      • 2014-01-20
      相关资源
      最近更新 更多