通过 PHP 将图像插入 MP4 视频

Insert Image into MP4 video by PHP

我想在服务器端通过 PHP 将静止图像插入到 mp4 序列中,其中放置的图像的位置会移动,例如我将图像放入具有色度的相框中-房间中的关键颜色(或指定坐标)和此相框的位置将在视频中移动(如果可能......)。与 Facebook 的 "Friends Day" 视频非常相似。看到这个 example link.

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

检查了之前的问题,但似乎没有定论? Inserting an image inside a video at particular position via PHP and a video extension

在此先感谢您的帮助!

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

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

尝试 PHP :
如果你准备你的输入素材有一个绿色的颜色框之类的东西,应该插入图像那么你可以考虑这个 用用户照片替换绿色像素。

您必须对每一帧都执行此操作。要将视频分解为单帧 PNG,请尝试使用 FFmpeg 等工具...

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

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

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 进程。这意味着您可以直接输出到视频文件,而不是输出 "edited frame" PNG。视频是作为您的程序 运行s 生成的,当它完成时,就会有一个完整的视频文件。这太长了,无法解释,但您可以了解相关信息。

现实检验...
你说的叫"dynamic video"。您需要一个适当的系统来处理像素跟踪、透视失真和运动模糊等任务。该系统将是一个基于服务器的应用程序(使用 Java?或 C#?)。这是 dynamic editing tool. Also try coding something like this distortion tool (found here) 的一个示例,所以如果我们采用绿色块的想法,现在您只需在源视频帧中找到绿色块的四个角并定位那些扭曲点到每个角落,你有透视失真等。对于通过 PHP 的运动模糊(我从未尝试过但是)有 Google 搜索...