stream利的ffmpeg大小输出选项不起作用

总结:我试图限制输出为3mb, .outputOptions('-fs 3000000')对我不起作用,文件返回的大小为119260428或119mb。

这里是自己尝试的代码,你所需要的只是一个test.mp3足够大,结果testoutput.ogg大于3mb:

 var ffmpeg = require("fluent-ffmpeg"); var command = ffmpeg(); var convertToOGG = function(){ var fileName = 'test.mp3' ffmpeg.ffprobe(fileName, function(err, metadata) { command .input(fileName) .inputFormat("mp3") .audioChannels(1) .outputOptions('-fs', 3000000) .output('testoutput.ogg') .on("progress", function(progress) { console.log("Processing: " + progress.timemark); }) .on("error", function(err, stdout, stderr) { console.log("Cannot process video: " + err.message); }) .on("end", function(stdout, stderr) { ffmpeg.ffprobe('testoutput.ogg', function(err,metadata){ if(metadata.format.size >= 3000000){ console.log("didn't work") } }) }) .run(); }); }; convertToOGG(); 

根据fluent-ffmpeg文档,您应该能够在输出选项中使用ffmpeg命令: outputOption()

此方法允许将任何与输出相关的选项传递给ffmpeg。 你可以用一个参数调用它来传递一个选项,optionnaly用一个空格分隔的参数:

 /* Single option */ ffmpeg('/path/to/file.avi').outputOptions('-someOption'); 

并在FFMPEG的文件中 :

-fs limit_size(输出)设置文件大小限制,以字节表示。 超出限制后不会写入更多字节。 输出文件的大小稍微大于请求的文件大小。

它给了我没有错误,只是似乎忽略了99MB的文件大小限制和输出一个119.3mb文件。

编辑 – 看起来像-fs 3000000是工作的MP3到WAV,但仍然不会做MP3的ogg。 这是在terminal中运行命令的输出:

 ✗ ffmpeg -i test.mp3 -fs 3000000 testoutput.ogg ffmpeg version 3.2.2 Copyright (c) 2000-2016 the FFmpeg developers built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda libavutil 55. 34.100 / 55. 34.100 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.100 / 57. 56.100 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100 [mp3 @ 0x7fc6a4000000] Estimating duration from bitrate, this may be inaccurate Input #0, mp3, from 'test.mp3': Metadata: lyrics-eng : xxx title : xxx artist : xxx album_artist : xxx album : xxx genre : xxx Duration: 03:27:28.74, start: 0.000000, bitrate: 128 kb/s Stream #0:0: Audio: mp3, 44100 Hz, mono, s16p, 128 kb/s Stream #0:1: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 540x360, 90k tbr, 90k tbn, 90k tbc Metadata: title : Array comment : Cover (front) [swscaler @ 0x7fc6a4808800] deprecated pixel format used, make sure you did set range correctly [ogg @ 0x7fc6a3815800] Frame rate very high for a muxer not efficiently supporting it. Please consider specifying a lower framerate, a different muxer or -vsync 2 Output #0, ogg, to 'testoutput.ogg': Metadata: lyrics-eng : xxx title : xxx artist : xxx album_artist : xxx album : xxx genre : xxx encoder : Lavf57.56.100 Stream #0:0: Video: theora (libtheora), yuv444p, 540x360, q=2-31, 200 kb/s, 90k fps, 90k tbn, 90k tbc Metadata: title : Array DESCRIPTION : Cover (front) encoder : Lavc57.64.101 libtheora lyrics-eng : xxx artist : xxx ALBUMARTIST : xxx album : xxx genre : xxx Stream #0:1: Audio: vorbis (libvorbis), 44100 Hz, mono, fltp Metadata: encoder : Lavc57.64.101 libvorbis lyrics-eng : xxx title : xxx artist : xxx ALBUMARTIST : xxx album : xxx genre : xxx Stream mapping: Stream #0:1 -> #0:0 (mjpeg (native) -> theora (libtheora)) Stream #0:0 -> #0:1 (mp3 (native) -> vorbis (libvorbis)) Press [q] to stop, [?] for help frame= 1 fps=0.0 q=-0.0 Lsize= 116465kB time=03:27:28.71 bitrate= 76.6kbits/s speed=61.2x video:9kB audio:114907kB subtitle:0kB other streams:0kB global headers:6kB muxing overhead: 1.347787% 

mp3包含封面图片。 尝试将源文件转码为ogg导致videostream的帧率非常高。

帧速率估计有一个问题: 90k fps类似于stream时基值:

 [ogg @ 0x7fc6a3815800] Frame rate very high for a muxer not efficiently supporting it. [...] Stream #0:0: Video: theora (libtheora), yuv444p, 540x360, q=2-31, 200 kb/s, 90k fps, 90k tbn, 90k tbc 

这可能是由源文件的问题引起的,也可能是ffmpeg一个错误。

快速解决scheme是使用-map 0:a-vn忽略封面图像。