Php 关键帧上的随机像素。(ffmpeg)
大家好强> 我们试图用PHP编写一些非常小而简单的代码来生成视频的变体,始终使用相同的文件 脚本必须在视频文件的随机或特定帧上做一个小像素标记,并且必须实时流式传输 这里有一些伪代码来解释我的想法:Php 关键帧上的随机像素。(ffmpeg),php,ffmpeg,video-streaming,video-processing,Php,Ffmpeg,Video Streaming,Video Processing,大家好 我们试图用PHP编写一些非常小而简单的代码来生成视频的变体,始终使用相同的文件 脚本必须在视频文件的随机或特定帧上做一个小像素标记,并且必须实时流式传输 这里有一些伪代码来解释我的想法: $frame = $_GET[frame]; $videofile = 'video.avi'; make_random_red_pixel_mark($videofile, $frame); 有人知道使用ffmpeg是否可以做到这一点吗?同样,对我们来说,尽快执行这个过程非常重要 一个意味着重新处
$frame = $_GET[frame];
$videofile = 'video.avi';
make_random_red_pixel_mark($videofile, $frame);
有人知道使用ffmpeg是否可以做到这一点吗?同样,对我们来说,尽快执行这个过程非常重要
一个意味着重新处理整个视频的解决方案,对我们的目的是没有用的。它应该类似于一个封闭的标题,或者一个快速的图像/覆盖过滤器,可以在不进行整个视频再处理的情况下应用。同样,我们不能使用Javascript或任何HTML方法来放置覆盖,因为实际操作必须在视频文件本身上进行
原始视频的质量和帧率应保持完整。也许还有其他一些PHP模块或软件可以使用exec()从PHP执行
有什么建议吗
提前感谢克里斯·C·鲁索 更多信息:
$frame = $_GET[frame];
$videofile = 'video.avi';
make_random_red_pixel_mark($videofile, $frame);
1)我们可以在想要的任何帧上应用此过程,因此我们可以使用“关键帧”,以避免对整个GOP进行解码和重新编码
2)如前所述,视频流必须实时流动。这是一个难题。FFmpeg覆盖视频过滤器需要重新编码 当您几乎更改视频中的任何内容时,您将处理视频的重新编码。这可能是一个昂贵的过程,这取决于视频和你的匆忙程度(如果你想要实时,你很匆忙) 可能的解决方案如下:
- 打开输入视频
- 创建输出视频
- 循环输入视频的数据包,直到找到所需的帧
- 读取视频数据包的标志(AVPacket结构),可以识别此帧的格式
- 好的,您必须只重新编码属于这组图片的帧。因为GOP总是以关键帧开始,所以您将能够做到这一点
- 完成后,继续读取输入数据包并将其写入输出(transmux)
另一个解决方案是:若你们有选择帧的灵活性,那个么试着只重新编码关键帧。因为关键帧是完整的“位图”。你不需要处理GOP。你只需要解码和重新编码一帧。PHP可能不是最好的方法,因为它不够强大。你可能想研究一个二进制服务器端解决方案,并从PHP调用它。事实上,我的朋友,你知道有什么软件可以做到这一点吗?谢谢!你可以搜索FFMPEG选项。哟你可能想搜索像“ffmpeg覆盖”这样的东西——然后找出你想要像素的位置,然后找出如何指定帧,如果可能的话。这似乎是一个好的开始,与@RobW一起,
覆盖
视频过滤器需要重新编码,如果“重新处理”,我相信Chris Russo希望避免这种情况还包括或暗示重新编码。此外,您的覆盖URL是旧的:。无论如何,感谢@RobW和LordNeckbeardFirst,非常感谢您的响应。它实际上看起来是解决此问题的真正解决方案!幸运的是,我们在帧上具有灵活性,因此我们可以使用您提到的关键帧。在这种情况下,如果我理解您的意思,我们只能对1帧进行解码和重新编码,这将是我们的目标。您认为在流式传输视频时可以进行此过程吗?换句话说,我们可以将原始视频加载到缓冲区,然后创建另一个输出缓冲区来流式传输内容,仅进行编辑(并按需显示)预选的帧?是的,这是可能的!如果你理解muxing.c和demuxing.c这两个文件,你就可以这么做了。-)我的朋友,这可能有点离题了,但既然我们有预算,我想在facebook上和你谈谈。你似乎是项目这一部分的合适人选。