将 Webm 转码为音频文件 (fluent-ffmpeg)
Transcode Webm to Audio file (fluent-ffmpeg)
我有一个视频文件,通过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)
使用 fluent-ffmpeg
的 API
您可以使用 noVideo()
方法,该方法告诉 ffmpeg
使用 "no video" 生成输出。
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 将通过查看您为输出提供的扩展名来使用最佳猜测。
至于限制文件大小,我不确定是否有一种干净的方法来做到这一点,但视频制作 StackExchange 上的这个问题可能会有所帮助:How to limit file size with ffmpeg?。它建议使用您的比特率进行播放,直到获得您想要的大小。我假设您可以提前计算出正确的比特率。
我有一个视频文件,通过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)
使用 fluent-ffmpeg
的 API
您可以使用 noVideo()
方法,该方法告诉 ffmpeg
使用 "no video" 生成输出。
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 将通过查看您为输出提供的扩展名来使用最佳猜测。
至于限制文件大小,我不确定是否有一种干净的方法来做到这一点,但视频制作 StackExchange 上的这个问题可能会有所帮助:How to limit file size with ffmpeg?。它建议使用您的比特率进行播放,直到获得您想要的大小。我假设您可以提前计算出正确的比特率。