2

摘要:我正在尝试将输出限制为 3mb,.outputOptions('-fs 3000000')但对我不起作用,文件以119260428119mb 的大小返回。

这是您自己尝试的代码,您所需要的只是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。您可以使用单个参数调用它来传递单个选项,可选地使用空格分隔的参数:

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

在 FFMPEG 的文档中

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

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

编辑 - 看起来-fs 3000000正在为 mp3 工作到 wav,但仍然不会对 ogg 做 mp3。这是在终端中运行命令的输出:

✗ 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%
4

1 回答 1

1

mp3包含封面图像。尝试对源文件进行转码以ogg导致视频流的帧率异常高。

帧率估计存在问题:90k fps类似于流时基值:

[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或两者兼而有之。

一个快速的解决方案是使用-map 0:a或忽略封面图像-vn

于 2017-01-19T08:54:29.040 回答