流畅的 ffmpeg 大小输出选项不起作用

2023-12-27

摘要:我试图将输出限制为 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();

Per the 流利的 ffmpeg 文档 https://github.com/fluent-ffmpeg/node-fluent-ffmpeg您应该能够在输出选项中使用 ffmpeg 命令:outputOption()

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

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

以及 FFMPEG 的文档中 https://ffmpeg.org/ffmpeg.html:

-fs limit_size(输出) 设置文件大小限制,以字节为单位表示。超过限制后,不会再写入任何字节块。这 输出文件的大小略大于请求的文件大小。

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

编辑 - 看起来像-fs 3000000可以将 mp3 转换为 wav,但仍然无法将 mp3 转换为 ogg。这是在终端中运行命令的输出:

✗ 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导致视频流的帧速率异常高。

帧率估计存在问题: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 or -vn.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流畅的 ffmpeg 大小输出选项不起作用 的相关文章

随机推荐