在 PHP 中从没有 ffmpeg 的视频创建缩略图

Posted

技术标签:

【中文标题】在 PHP 中从没有 ffmpeg 的视频创建缩略图【英文标题】:Create thumbnail from video without ffmpeg in PHP 【发布时间】:2014-02-06 09:46:10 【问题描述】:

我需要在没有 ffmpeg 的情况下创建缩略图,因为我必须在共享主机上部署站点,而 ffmpeg 在共享主机上不可用。

有人可以提出一些解决方案吗?

【问题讨论】:

【参考方案1】:

如果视频可以在浏览器中播放,您可以尝试使用 html5 的 Canvas 功能在画布中播放视频,然后使用 javascript 将该视频中的静止图像发布到您的服务器...也许您甚至可以自动化它,或者如果您只有几十个视频,请手动制作...

以下是一些 jquery 风格的 javascript,用于上传 base64 编码的 jpg 以帮助您入门。 (来自几个不同的项目,未经测试,可能是一场安全噩梦。)

<script>
    var vidDOM = $('article').children('video');
    var vid = vidDOM.get(2);
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');

    vidDOM.bind(
        'paused':function () 
            vid.width = canvas.width = vid.offsetWidth;
            vid.height = canvas.height = vid.offsetHeight;
            var $this = this; 
            ctx.drawImage($this, 0, 0, vid.width, vid.height);
            uploadbase64();
        
    )

    function uploadbase64()
        canvasData = canvas.toDataURL("image/jpeg"); 
        var ajax = new XMLHttpRequest();
        ajax.open("POST",'ImageUpload.php?filename='+vidDOM.id,false);
        ajax.setRequestHeader('Content-Type', 'application/upload');
        ajax.send(canvasData);
    
</script>

这里有一点 php 来接受上传。

<?php
    $filename =$_GET['filename'];

    if (file_get_contents('php://input'))
        // Remove the headers (data:,) part.
        $filteredData=substr(file_get_contents('php://input'), strpos(file_get_contents('php://input'), ",")+1);

        // Need to decode before saving since the data we received is already base64 encoded
        $decodedData=base64_decode($filteredData);

        //create the file
        if($fp = fopen( $filename, 'wb' ))
            fwrite( $fp, $decodedData);
            fclose( $fp );
         else 
            echo "Could not create file.";
        


echo "Created image ".$filename;

?>

【讨论】:

这里可能是什么:'php://input' 请指导。 @NaveedRamzan php://input 直接从 php 输入读取。 感谢 Naveed。我忽略了那条评论。

以上是关于在 PHP 中从没有 ffmpeg 的视频创建缩略图的主要内容,如果未能解决你的问题,请参考以下文章

如何为视频创建缩略图或预览?

如何在没有 ffmpeg 的情况下在 php 中创建缩略图并将视频转换为 mp4? [关闭]

如何在视频上传时创建缩略图? [php/codeigniter]

使用 php GD 创建 MP4 视频缩略图

视频引擎无法为视频轨道创建缩略图

如何在 ffmpeg 中居中裁剪视频缩略图(方形缩略图)?