php 拼接视频方案

167 阅读2分钟

「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

课程背景

  • 最近各种项目忙的焦头烂额,正好掘金粑粑开始更文挑战了,抽着空也写写技术文章。
  • 前天遇到个需求大概是这样,
  • 有大约120G的监控视频,每3秒钟一个。
  • 每一天下面有24个文件夹代表24小时
  • 每一个小时下面有60个文件夹代表60分钟
  • 每一个分钟文件夹下有 20个三秒的视频
  • 需求就是,能恢复拼接好这些视频。

问题分析

每分钟60秒 会有20个视频。那么一个小时的视频就有1200个文件组成。这可把我那客户愁坏了。不会视频剪辑,还得排着复制粘贴。出了1500RMB让我搞,还要给她把视频剪辑好,要360个视频,我一口回绝了,真把咱当苦力了。

解题思路

难点在于视频拼接上,尝试一下步骤

  • 去百度搜 php拼接视频 没找到
  • 去php手册视频处理扩展 没找到
  • 去百度搜 python有没有相关功能 。找到库,但是感觉挺复杂,需要研究时间
  • 转了一圈没找到方法 只能自己动脑子了
  • 把每个文件用二进制读出来,然后再拼起来成一个新文件。感觉这个方法可行
  • 于是进行了以下尝试

正文开始

找两个测试文件,并建立index.php文件

image.png

读取 1.mp4 2.mp4文件到流中。把两部分保存成一个新文件。

<?php
    $file1 = fopen('./1.mp4','rb');
    $content1 = fread($file1, filesize ('./1.mp4'));
    fclose($file1);

    $file2 = fopen('./2.mp4','rb');
    $content2 = fread($file2, filesize ('./2.mp4'));
    fclose($file2);

    $fp = fopen('3.mp4', 'w');
    fwrite($fp, $content1);
    fwrite($fp, $content2);

    fclose($fp);

此时运行会生成 3.mp4文件 点击 3.MP4发现文件能正常播放。这就完成了合并的操作。 剩下的就是扫描目录下的文件,拍着去处理每一个文件即可

scandir('./');

总结

类似上面的思路,把文件夹遍历完成。获取所有的文件,依次将文件拼接到一起即可。