Node.jsvideo上传获取编解码器

我的用户可以上传video到我的网站。 然而,问题出现了,一些video文件有一个浏览器(YUV)不支持的编解码器。

所以我想看看我可以看到编解码器。

此刻我使用multer来处理我的文件:

 app.use(multer({ dest: './uploads/', rename: function (fieldname, filename) { return filename + Date.now(); }, onFileUploadStart: function (file) { var i = 0; }, onFileUploadComplete: function (file) { //Redirects request to path var i = 0; } })); 

设置断点和检查文件我得到的唯一信息:

在这里输入图像说明

所以我的问题是: 无论如何看到上传文件的编解码器?

首先,值得一提的是YUV是一种色彩空间,而不是一个编解码器 – 类似于更容易理解的RGB(红绿蓝)色彩空间。 这是表示图像中像素的亮度和颜色的一种方式。 许多编解码器使用YUV色彩空间,因为它促进了编解码器需要执行的计算types,并且减less了冗余。

如果你想find一个特定的video文件正在使用的编解码器,以及相当多的其他信息,然后做一个基本的分析,看看你上传了什么types和格式的video是一个相当艰巨的任务有这么多的格式。

我认为最简单的方法是使用ffprobefunction,如果你可以:

有些模块提供了ffprobe的包装,所以你可以在节点上使用它 – 例如:

使用这种方法,您可以非常简单地生成video文件信息,然后parsing编码解码器。 以上链接中的使用示例(在撰写本文时正确):

 var probe = require('node-ffprobe'); var track = '/path/to/media/file.mp3'; probe(track, function(err, probeData) { console.log(probeData); }); 

以及ffprobe为无处不在的BigBuckBunnyvideo的例子所产生的输出types的例子:

 ffprobe version 2.6.1 Copyright (c) 2007-2015 the FFmpeg developers built with llvm-gcc 4.2.1 (LLVM build 2336.11.00) configuration: --prefix=/Volumes/Ramdisk/sw --enable-gpl --enable-pthreads --enable-version3 --enable-libspeex --enable-libvpx --disable-decoder=libvpx --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-avfilter --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-filters --enable-libgsm --enable-libvidstab --enable-libx265 --disable-doc --arch=x86_64 --enable-runtime-cpudetect libavutil 54. 20.100 / 54. 20.100 libavcodec 56. 26.100 / 56. 26.100 libavformat 56. 25.101 / 56. 25.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 11.102 / 5. 11.102 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.../vid_bigbuckbunny.mp4': Metadata: major_brand : mp42 minor_version : 1 compatible_brands: mp42avc1 creation_time : 2010-02-09 01:55:39 Duration: 00:01:00.10, start: 0.000000, bitrate: 733 kb/s Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 65 kb/s (default) Metadata: creation_time : 2010-02-09 01:55:39 handler_name : Apple Sound Media Handler Stream #0:1(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 640x360, 612 kb/s, 23.96 fps, 24 tbr, 600 tbn, 1200 tbc (default) Metadata: creation_time : 2010-02-09 01:55:39 handler_name : Apple Video Media Handler Stream #0:2(eng): Data: none (rtp / 0x20707472), 45 kb/s Metadata: creation_time : 2010-02-09 01:55:39 handler_name : hint media handler Stream #0:3(eng): Data: none (rtp / 0x20707472), 5 kb/s Metadata: creation_time : 2010-02-09 01:55:39 handler_name : hint media handler 

任何ffprobe无法识别的东西大多不是video,或者如果是video,它无论如何都不会在普通的浏览器中播放。

它值得检查ffmpeg / ffprobe许可证,以确保它也符合您的需求。