通过PHP将图像插入MP4视频


Insert Image into MP4 video by PHP

我想通过服务器端的PHP将静止图像插入mp4序列中,放置的图像的位置会移动,例如,我将图像放置在房间中具有色度键颜色(或指定坐标)的相框中,并且该相框的位置会在视频中移动(如果可能的话…)。非常类似于Facebook的"朋友日"视频。请参阅示例链接

是否有任何类或函数允许我这样做?

查看了之前的问题,但似乎没有结论?通过PHP和视频扩展在特定位置插入视频中的图像

提前感谢您的帮助!

您需要的不仅仅是PHP。你需要了解像素编程及其子类别:计算机视觉的一些内容。

在我向您展示现实检查之前,让我们假设任务真的很简单,只需"...Insert still images into a mp4 sequence by PHP"。你需要什么?

尝试PHP:
如果您准备输入的镜头有一个类似绿色框的东西,应该在其中插入图像,那么您可以考虑使用PHP方法将绿色像素替换为用户照片。

你必须对每一帧都这样做。要将视频分解为单帧PNG,请尝试像FFmpeg这样的工具。。。

尝试FFmpeg:
首先在服务器上安装FFmpeg(甚至还有一个FFmpeg到PHP的连接,即:发送命令并接收结果)。这将用于从源中提取叠加图像,并在以后对新的输出视频进行编码。您可以看到此答案,用于在特定位置覆盖图像。

在下面的片段中,指定了两个输入图像(vid_frame1.png是需要插入图像的视频抓取,over_image1.png是要覆盖的图像)。overlay=75:200表示在(x)上75px和(y)下200px的位置叠加图像。

ffmpeg -i vid_frame1.png -i over_image1.png -filter_complex "[0:v][1:v] overlay=75:200" new_frame1.png

正如您所看到的,您必须指定位置,以便在移动视频中(放置位置将随时间变化),您需要跟踪每帧中的预期图像位置。在24 FPS的视频中,这意味着每秒可能有24个独特的位置,这可能会变得乏味。您将运行上述命令24次,每次都更改overlay的位置。

注意:如果您安装FFmpeg并将其与PHP一起使用,那么您还可以执行stdinput/stdoutput过程。这意味着您可以直接输出到视频文件,而不是输出"编辑帧"PNG。视频是在程序运行时生成的,当它完成时,就会有一个完整的视频文件。这太长了,无法解释,但你可以提供有关它的信息

现实核查
你所说的叫做"动态视频"。你需要一个系统来处理像素跟踪、透视失真和运动模糊等任务。这个系统将是一个基于服务器的应用程序(使用Java?或C#?制作)。下面是动态编辑工具的一个示例。也可以尝试编码像这样的失真工具(在这里找到),所以如果我们采用绿色块的想法,现在你只需在源视频帧中找到绿色块的四个角,并将这些失真点定位到每个角,你就有了视觉失真等。对于通过PHP的运动模糊(我从未尝试过,但)有谷歌搜索。。。