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

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

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

【问题讨论】:

    标签: php thumbnails


    【解决方案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。我忽略了那条评论。
    猜你喜欢
    • 2011-04-24
    • 2013-12-20
    • 2015-01-24
    • 1970-01-01
    • 2019-06-08
    • 2017-12-27
    • 2012-02-24
    • 2016-12-09
    相关资源
    最近更新 更多