Php 在循环中使用ff mpeg创建缩略图
我有一个上传,我是一个网站创建。uploader是我正在创建的一个jquery插件,它允许一次或多次上传图像或视频 上传器工作没有问题,ffmpeg创建缩略图也没有问题。然而,我有一个1GB的最大文件大小,我将实施的总上传,所以用户不能上传到一次过多。但对于测试,我还没有这样做,所以我可以在添加限制之前测试上传程序功能的限制 我有4个视频,我用以测试246mb的每一个。文件上传并移动到测试服务器(localhost)上设置的文件夹中,但由于PHP脚本延长了最大时间限制,因此不会创建缩略图。简单的选择是在php.ini中轻松地更改此选项 问题是进度条只跟踪上传,而不是ffmpeg转换。是否有一种方法可以在我的进度条中跟踪此内容,或者将其作为后台任务运行,并包含多个视频文件 这可能值得一提,但对于较小的视频,每个视频小于70mb,创建所有缩略图都没有问题,但仍然是在进度条达到100%之后 如果有帮助,请参阅本规范的相关章节。如果需要,我可以在git上添加完整的源代码。但是我担心答案是否定的,或者改变php.ini文件 JQuery/Ajax:Php 在循环中使用ff mpeg创建缩略图,php,jquery,for-loop,ffmpeg,exec,Php,Jquery,For Loop,Ffmpeg,Exec,我有一个上传,我是一个网站创建。uploader是我正在创建的一个jquery插件,它允许一次或多次上传图像或视频 上传器工作没有问题,ffmpeg创建缩略图也没有问题。然而,我有一个1GB的最大文件大小,我将实施的总上传,所以用户不能上传到一次过多。但对于测试,我还没有这样做,所以我可以在添加限制之前测试上传程序功能的限制 我有4个视频,我用以测试246mb的每一个。文件上传并移动到测试服务器(localhost)上设置的文件夹中,但由于PHP脚本延长了最大时间限制,因此不会创建缩略图。简单的
$.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";