php视频上传和ffmpeg不会创建缩略图 [英] php video upload and ffmpeg won't create a thumbnail

查看:81
本文介绍了php视频上传和ffmpeg不会创建缩略图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为我的项目制作视频上传功能.但是我在 ffmpeg 部分中遇到了问题. ffmpeg 已安装在我的服务器上.但是我无法得到任何缩略图.我尝试使用以下代码创建缩略图:

I am trying to make a video upload feature for my project. But I have a problem with ffmpeg section. ffmpeg is already installed on my server. But i can not get any thumbnail. I have try to create thumbnail using the following code:

$videoa = exec("/usr/bin/ffmpeg  -i $videoUrlp.flv -f flv -s 650x390 $videoUrlp.mp4 2>&1");
$videob = exec("/usr/bin/ffmpeg  -i $videoUrlp.mp4 -vcodec png -ss 00:00:5 -s 650x390 -vframes 1 -an -f rawvideo $videoUrlp.png");

但是当对var_dump($videoa);var_dump($videob);

string(74)" https://mywebsite.com/uploads/video/ey1kXNew_video. flv : 输入/输出错误字符串(0)""

string(74) "https://mywebsite.com/uploads/video/ey1kXNew_video.flv: Input/output error" string(0) ""

如果我像这样使用shell_exec:

$videoa = shell_exec("/usr/bin/ffmpeg  -i $videoUrlp.flv -f flv -s 650x390 $videoUrlp.mp4");
$videob = shell_exec("/usr/bin/ffmpeg  -i $videoUrlp.mp4 -vcodec png -ss 00:00:5 -s 650x390 -vframes 1 -an -f rawvideo $videoUrlp.png");

var_dumps()给我NULL NULL.

请帮助我我在哪里错了.

Please help me where am I wrong.

这是我完整的视频上传代码:

And here is my full video upload code:

$valid_formats = array("mp4","MP4","flv");
            if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") {
               $name = $_FILES['uploading']['name'];
               $size = $_FILES['uploading']['size'];
               if(strlen($name)) {
                   $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); 
                   $name = alphaID(microtime(true) * 10000).'_video';
                   if(in_array($ext,$valid_formats)) {
                   if($size<(50024*50024)) {
                      $GetVideoName = $name;
                      $video_ext=$ext;
                       $tmp = $_FILES['uploading']['tmp_name'];
                       if(move_uploaded_file($tmp, $videoPath.$GetVideoName.'.'.$video_ext)) {
                           $videoUrlp = $base_url.'uploads/video/'.$GetVideoName;
                           $videoa = exec("/usr/bin/ffmpeg  -i $videoUrlp.flv -f flv -s 650x390 $videoUrlp.mp4 2>&1");
                           $videob = exec("/usr/bin/ffmpeg  -i $videoUrlp.mp4 -vcodec png -ss 00:00:5 -s 650x390 -vframes 1 -an -f rawvideo $videoUrlp.png");
                           echo var_dump($videoa);
                           echo var_dump($videob);

                        } else {
                            echo "Fail upload folder with read access.";
                        }
                     } else
                        echo "Image file size max 1 MB";                    
                     } else
                        echo "invalidvieo"; 
                 } else
                    echo "Please select image..!";
                 exit;
              }

我也这样测试过:

echo exec("/usr/bin/ffmpeg -i $videoUrlp.flv -ar 22050 -ab 32 -f flv -s 780x400 $videoUrlp.$video_ext");
echo exec("/usr/bin/ffmpeg -i $videoUrlp.$video_ext -deinterlace -an -ss 1 -t 00:00:05 -r 1 -y -vcodec mjpeg -f mjpeg $videoUrlp.png 2>&1");

我看到以下回声

video:71kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

video:71kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

,再尝试一次,我得到此注释: https://mywebsite.com /uploads/video/1547892356_video.flv :连接被拒绝

and another try then I get this note: https://mywebsite.com/uploads/video/1547892356_video.flv: Connection refused

echo exec("/usr/bin/ffmpeg -i $videoUrlp.flv -ar 22050 -ab 32 -f flv -s 780x400 $videoUrlp.$video_ext");
echo exec("/usr/bin/ffmpeg -i $videoUrlp.$video_ext -deinterlace -an -ss 1 -t 00:00:05 -r 1 -y -vcodec mjpeg -f mjpeg $videoUrlp.png 2>&1");

这是最后一个shell_exec输出:

Here is last shell_exec Output:

 $local = 'https://website.com/uploads/video/'.$GetVideoName.'.'.$video_ext;
 $localTumb = 'https://website.com/uploads/video/'.$GetVideoName.'.png';
 echo shell_exec("/usr/bin/ffmpeg -i $local -deinterlace -an -ss 1 -t 00:00:05 -r 1 -y -vcodec mjpeg -f mjpeg $localTumb 2>&1");    

ffmpeg版本2.8.15版权所有(c)2000-2018年,使用gcc 4.8.5(GCC)20150623(Red Hat 4.8.5-36)构建的FFmpeg开发人员 配置:--prefix =/usr --bindir =/usr/bin
--datadir =/usr/share/ffmpeg --incdir =/usr/include/ffmpeg --libdir =/usr/lib64 --mandir =/usr/share/man --arch = x86_64 --optflags ='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE = 2 -fexceptions -fstack-protector-strong --param = ssp-buffer-size = 4 -grecord-gcc-switches -m64 -mtune = generic'--extra-ldflags ='-Wl,-z,relro'--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable- gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfdk-aac --enable-nonfree --disable-indev = jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static--enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir =/usr/lib64 --enable-runtime-cpudetect libavutil 54. 31.100/54. 31.100 libavcodec 56. 60.100/56. 60.100 libavformat 56. 40.101/56. 40.101 libavdevice 56. 4.100/56. 4.100 libavfilter 5. 40.101/5. 40.101 libavresample 2. 1. 0/2. 1. 0 libswscale 3. 1.101/3. 1.101 libswresample 1. 2.101/1. 2.101 libpostproc 53. 3.100/53. 3.100输入#0,mov,mp4,m4a,3gp,3g2,mj2,来自' https ://website.com/uploads/video/e0J6HwtK_video.mp4 ':元数据: major_brand:mp42 minor_version:0compatible_brands:isommp42 creation_time:2018-01-01 12:09:49持续时间:00:00:41.49,开始: 0.000000,比特率:230 kb/s流#0:0(und):视频:h264(受约束的基线)(avc1/0x31637661),yuv420p,240x360 [SAR 1:1 DAR 2:3],158 kb/s,9.73 fps,9.73 tbr,19462 tbn,19.46 tbc(默认)元数据: handler_name:VideoHandler流#0:1(und):音频:aac(LC)(mp4a/ 0x6134706D),44100 Hz,单声道,fltp,71 kb/s(默认)元数据: creation_time:2018-01-01 12:09:49 handler_name:IsoMedia文件 由Google生产,2011年5月11日[swscaler @ 0xc8c580]已弃用的像素 使用的格式,请确保您正确设置了范围输出#0,mjpeg, 到" https://website.com/uploads/video/e0J6HwtK_video.png " :元数据: major_brand:mp42 minor_version:0compatible_brands:isommp42 编码器:Lavf56.40.101流#0:0(und):视频:mjpeg,yuvj420p(pc), 240x360 [SAR 1:1 DAR 2:3],q = 2-31,200 kb/s,1 fps,1 tbn,1 tbc (默认)元数据:handler_name:VideoHandler编码器: Lavc56.60.100 mjpeg流映射:流#0:0->#0:0(h264(本机) -> mjpeg(本机))按[q]停止,[?]表示帮助帧= 5 fps = 0.0 q = 1.6 Lsize = 100kB时间= 00:00:05.00比特率= 163.9kbits/s dup = 0 drop = 32视频:100kB音频:0kB字幕:0kB其他流:0kB全局 标头:0kB合并开销:0.000000%

ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36) configuration: --prefix=/usr --bindir=/usr/bin
--datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect libavutil 54. 31.100 / 54. 31.100 libavcodec 56. 60.100 / 56. 60.100 libavformat 56. 40.101 / 56. 40.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 40.101 / 5. 40.101 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 2.101 / 1. 2.101 libpostproc 53. 3.100 / 53. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://website.com/uploads/video/e0J6HwtK_video.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2018-01-01 12:09:49 Duration: 00:00:41.49, start: 0.000000, bitrate: 230 kb/s Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 240x360 [SAR 1:1 DAR 2:3], 158 kb/s, 9.73 fps, 9.73 tbr, 19462 tbn, 19.46 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 71 kb/s (default) Metadata: creation_time : 2018-01-01 12:09:49 handler_name : IsoMedia File Produced by Google, 5-11-2011 [swscaler @ 0xc8c580] deprecated pixel format used, make sure you did set range correctly Output #0, mjpeg, to 'https://website.com/uploads/video/e0J6HwtK_video.png': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 encoder : Lavf56.40.101 Stream #0:0(und): Video: mjpeg, yuvj420p(pc), 240x360 [SAR 1:1 DAR 2:3], q=2-31, 200 kb/s, 1 fps, 1 tbn, 1 tbc (default) Metadata: handler_name : VideoHandler encoder : Lavc56.60.100 mjpeg Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native)) Press [q] to stop, [?] for help frame= 5 fps=0.0 q=1.6 Lsize= 100kB time=00:00:05.00 bitrate= 163.9kbits/s dup=0 drop=32 video:100kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

推荐答案

如果您使用的是https,则必须为ffmpeg配置ssl支持(

If you are using https, your ffmpeg has to be configured with ssl support (ffmpeg over https fails).

这篇关于php视频上传和ffmpeg不会创建缩略图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆