Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在循环中使用ff mpeg创建缩略图_Php_Jquery_For Loop_Ffmpeg_Exec - Fatal编程技术网

Php 在循环中使用ff mpeg创建缩略图

Php 在循环中使用ff mpeg创建缩略图,php,jquery,for-loop,ffmpeg,exec,Php,Jquery,For Loop,Ffmpeg,Exec,我有一个上传,我是一个网站创建。uploader是我正在创建的一个jquery插件,它允许一次或多次上传图像或视频 上传器工作没有问题,ffmpeg创建缩略图也没有问题。然而,我有一个1GB的最大文件大小,我将实施的总上传,所以用户不能上传到一次过多。但对于测试,我还没有这样做,所以我可以在添加限制之前测试上传程序功能的限制 我有4个视频,我用以测试246mb的每一个。文件上传并移动到测试服务器(localhost)上设置的文件夹中,但由于PHP脚本延长了最大时间限制,因此不会创建缩略图。简单的

我有一个上传,我是一个网站创建。uploader是我正在创建的一个jquery插件,它允许一次或多次上传图像或视频

上传器工作没有问题,ffmpeg创建缩略图也没有问题。然而,我有一个1GB的最大文件大小,我将实施的总上传,所以用户不能上传到一次过多。但对于测试,我还没有这样做,所以我可以在添加限制之前测试上传程序功能的限制

我有4个视频,我用以测试246mb的每一个。文件上传并移动到测试服务器(localhost)上设置的文件夹中,但由于PHP脚本延长了最大时间限制,因此不会创建缩略图。简单的选择是在php.ini中轻松地更改此选项

问题是进度条只跟踪上传,而不是ffmpeg转换。是否有一种方法可以在我的进度条中跟踪此内容,或者将其作为后台任务运行,并包含多个视频文件

这可能值得一提,但对于较小的视频,每个视频小于70mb,创建所有缩略图都没有问题,但仍然是在进度条达到100%之后

如果有帮助,请参阅本规范的相关章节。如果需要,我可以在git上添加完整的源代码。但是我担心答案是否定的,或者改变php.ini文件

JQuery/Ajax:

$.ajax({
        url: options.processor,
        type: "POST",
        data: formdata,
        processData: false,
        contentType: false,
        dataType:"JSON",
        beforeSend: init,
        error: error,
        xhr: function() {
            var myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){
                myXhr.upload.addEventListener('progress',uploadProgress, false);
            }
            return myXhr;
        },
        success: onComplete
    });

var uploadProgress = function(e){
        if(e.lengthComputable){
            if(options.single === true){
                $('#'+options.counter).html('File 1 of 1');
            }else{
                $('#'+options.counter).html('Files '+ item_count +' of ' + item_count + ' uploading');  
            }
            var p = (e.loaded / e.total) * 100;
            $('#'+options.progress_text).html(Math.round(p) + '%');
            $('#'+options.progress_bar).width(p + '%');
        }
    }
PHP:

**更新将文件转换为缩略图的过程花费的时间更少,如果我删除从ie获取缩略图的位置:

$cmd = "ffmpeg -i $input -an -ss $pos -s $size $output";
将成为

$cmd = "ffmpeg -i $input -an -ss 3 -s $size $output";

我认为这是因为ffmpeg播放视频,直到它到达视频中的那个点以获取缩略图。如果视频是5分钟,拇指是2.30,那么每次转换需要2分钟30。我想我在这里回答了我自己的问题,但是在1-5秒之间的某个地方使用缩略图形式。或者,在onComplete处理程序中添加第二个进度条,该进度条将计算这将花费的时间并将其显示给用户。

使用
-ss
作为输入选项(在
-i
之前)。从:

“-ss位置(输入/输出)”

当用作输入选项(在-i之前)时,在此输入文件中查找 位置。注意:在大多数格式中,无法查找 确实如此,因此ffmpeg将在搜索之前搜索到最近的搜索点 位置。当转码和“-精确搜索”被启用时( 默认情况下),搜索点和位置之间的这个额外段将 被解码并丢弃。在执行流复制或 如果使用了'-noaccurate_seek',则会保留它

当用作输出选项时(在输出文件名之前),解码但 丢弃输入,直到时间戳到达位置

位置可以是秒或hh:mm:ss[.xxx]形式


另请参见。

这太酷了,我当时离目标不远,只需重新排列命令即可
$cmd = "ffmpeg -i $input -an -ss 3 -s $size $output";