【问题标题】:Transcode Webm to Audio file (fluent-ffmpeg)将 Webm 转码为音频文件 (fluent-ffmpeg)
【发布时间】:2017-12-07 00:21:36
【问题描述】:

我有一个视频文件,当我通过 ffprobe 命令检查时,它的属性如下; 我的目的是仅获取音频文件,其大小不应> 100mb。 在 NPM 项目中有什么合适的方法吗?

ffprobe 2.webm
ffprobe version N-86175-g64ea4d1 Copyright (c) 2007-2017 the FFmpeg 
developers built with gcc 6.3.0 (GCC)   configuration: --enable-gpl -- 
nable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 
--
nable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable- 
ontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --
 nable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype -- 
nable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-
ibmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-
ibopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-
ibsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-
ibtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --
nable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
ibx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --
nable-zlib   libavutil      55. 63.100 / 55. 63.100   libavcodec     57. 
96.101   
7. 96.101
libavformat    57. 72.101 / 57. 72.101
libavdevice    57.  7.100 / 57.  7.100
libavfilter     6. 90.100 /  6. 90.100
libswscale      4.  7.101 /  4.  7.101
libswresample   2.  8.100 /  2.  8.100
libpostproc    54.  6.100 / 54.  6.100
Input #0, matroska,webm, from '2.webm':
 Metadata:
  encoder         : libwebm-0.2.1.0
  creation_time   : 2017-05-04T14:59:01.639000Z
 Duration: 00:02:35.16, start: 0.000000, bitrate: 32 kb/s
Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default)
Stream #0:1(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1 DAR 
4:3, 14.99 tbr, 1k tbn, 1k tbc (default)

【问题讨论】:

    标签: node.js ffmpeg fluent-ffmpeg


    【解决方案1】:

    使用fluent-ffmpeg的API

    您可以使用noVideo() 方法告诉ffmpeg 产生“无视频”的输出。

    ffmpeg('/path/to/file.avi').noVideo();
    

    使用 ffmpeg 的 CLI API

    我不确定fluent-ffmpeg,但是使用ffmpeg,您可以使用-map 选项来指定您希望在输出中输入哪些流。因此,对于您的示例,从您的输入中获取仅包含第一个音频流的 MP3 文件的命令是:

    ffmpeg -i 2.webm -map 0:a:0 out.mp3
    

    或者,您可以使用 -vn 选项告诉 ffmpeg 不包含视频流;但我喜欢明确。您的命令将是:

    ffmpeg -i 2.webm -vn out.mp3
    

    您还可以使用-acodec 选项来指定要使用的编码器,例如 AAC 或其他。如果您没有提供足够的选项,ffmpeg 将通过查看您提供输出的扩展来使用最佳猜测。

    关于限制文件大小,我不确定是否有一种干净的方法可以做到这一点,但 Video Production StackExchange 上的这个问题可能会有所帮助:How to limit file size with ffmpeg?。它建议使用你的比特率,直到你得到你想要的大小。我假设您可以提前计算正确的比特率。

    【讨论】:

    • 我确实收到以下错误;你觉得我怎么能克服它? (我的 ffmpeg 库已更新); [opus @ 00000000006a59c0] LBRR 帧未实现。将您的 FFmpeg 版本更新到 Git 的最新版本。如果问题仍然存在,则意味着您的文件具有尚未实现的功能。 [opus @ 00000000006a59c0] 解码 SILK 帧时出错。 [opus @ 00000000006a59c0] 解码 Opus 帧时出错。
    • @shamaleyte 尝试使用 libopus 强制 de 编码:ffmpeg -acodec libopus -i input.webm -vn -acodec mp3 output.mp3。在 ffmpeg 的 GitHub 上查看此问题:[支持 ffmpeg/avconv 输入参数](ffmpeg -acodec libopus -i input.webm -vn -acodec mp3 output.mp3)。
    • 它可以工作,但是从命令行使用 ffmpeg 就像你的命令一样。但是有没有办法在 NPM 项目中运行它?对我来说很重要。我也检查了 Github 问题,但不确定如何调整 Node 项目中的“AudioSegment.from_file”部分。我会接受你的这个答案,但我非常感谢你的进一步帮助!提前致谢。请同时查看这张票:stackoverflow.com/questions/44723558/…
    • @shamaleyte 不确定检查音频大小是否真的是一个问题,因为在 32 kBit/s 下,您可以将价值 7 小时的音频放入 100 MB。 (也就是说,如果您真的指的是 MB 而不是 MBit。)
    • @shamaleyte 看看我的编辑,有一种方法可以告诉 fluent 通过自己的 API 不包含视频。
    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 2022-09-27
    • 2023-03-23
    • 2017-02-23
    • 2011-03-16
    • 2018-01-03
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多