通过PHP将图像插入MP4视频

时间:2016-04-29 10:40:07

标签: php video mp4

我想在服务器端通过PHP将静止图像插入到mp4序列中,其中放置的图像的位置将移动,例如我将图像放入具有色度键颜色的相框中(或者在房间中指定坐标,并且该相框的位置将在视频中移动(如果可能的话......)。与Facebook" Friends Day"非常类似。视频。请参阅 example link

是否有允许我这样做的课程或功能?

检查了上一个问题,但似乎没有结果? Inserting an image inside a video at particular position via PHP and a video extension

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

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

试试PHP:
如果您准备输入素材以使其类似于应插入图像的绿色框,则可以考虑使用 PHP method 将绿色像素替换为用户照片。

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

这样的工具

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

在下面的代码段中,指定了两个输入图像(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个独特的位置,这可能会变得乏味。每次更改overlay位置时,您都会运行上述命令24次。

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

现实检查......
你所说的是“动态视频”。您需要一个系统来处理像素跟踪,透视失真和运动模糊等任务。该系统将是基于服务器的应用程序(使用Java?或C#?)。以下是 dynamic editing tool 的一个示例。还可以尝试使用 distortion tool (找到 here )进行编码,这样如果我们采用绿色块概念,现在您只需找到源视频帧中的绿色块并将这些扭曲点定位到每个角落,并且您有持续的失真等。对于通过PHP的运动模糊(我从未尝试过,但是)有谷歌搜索......