FFmpeg音频压缩


FFmpeg压缩音频

有的时候对音频质量要求不高的时候 可以降低音频的比特率来减小音频文件的大小

ffmpeg -i input.mp3 -b:a 128k output.mp3
这个命令将把名为 input.mp3 的音频文件压缩为比特率为128kbps的MP3格式,并将输出保存为 output.mp3 文件。

在这个命令中,-i 参数用于指定输入文件的路径和名称,-b:a 参数用于设置音频的目标比特率,128k 表示128kbps。你可以根据需要调整比特率的值来控制音频的压缩质量。较低的比特率会导致较小的文件大小,但可能会降低音频质量。

压缩前先看看这个音频的比特率原先多大

ffmpeg -i ~/Desktop/7aKdmDC9koXfxT9nueM8iK.mp3
ffmpeg version 5.1.1-tessus Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
[mp3 @ 0x7feea6104c80] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from '/Users/bzy/Desktop/7aKdmDC9koXfxT9nueM8iK.mp3':
  Duration: 00:00:43.90, start: 0.000000, bitrate: 160 kb/s
  Stream #0:0: Audio: mp3, 24000 Hz, mono, fltp, 160 kb/s
At least one output file must be specified

可以看到是160kb/s的比特率

这里压缩到64就足够了 前端在播放的时候 对音频没有什么要求

开始转码

ffmpeg -i ~/Desktop/7aKdmDC9koXfxT9nueM8iK.mp3 -b:a 64k ~/Desktop/7aKdmDC9koXfxT9nueM8iK_64k.mp3
ffmpeg -i ~/Desktop/7aKdmDC9koXfxT9nueM8iK_64k.mp3
ffmpeg version 5.1.1-tessus Copyright (c) 2000-2022 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)
  configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libmysofa --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Input #0, mp3, from '/Users/bzy/Desktop/7aKdmDC9koXfxT9nueM8iK_64k.mp3':
  Metadata:
    encoder         : Lavf59.27.100
  Duration: 00:00:43.94, start: 0.046042, bitrate: 64 kb/s
  Stream #0:0: Audio: mp3, 24000 Hz, mono, fltp, 64 kb/s
At least one output file must be specified

集成到代码

# if len(audio_files) == 1:
#     final_file = audio_files[0]
# else:
#     final_file = get_cache_path().joinpath(f"{uuid4()}.mp3")
#     os.system(f"ffmpeg -i \"concat:{'|'.join(audio_files)}\" -acodec copy {final_file}")
if len(audio_files) == 1:
    final_file = audio_files[0].replace(".mp3", "-zip.mp3")
    command = f"ffmpeg -i {audio_files[0]} -b:a {bitrate}k {final_file}"
    os.system(command)
else:
    final_file = get_cache_path().joinpath(f"{uuid4()}.mp3")
    os.system(f"ffmpeg -i \"concat:{'|'.join(audio_files)}\" -acodec copy {final_file}")
    command = f"ffmpeg -i \"concat:{'|'.join(audio_files)}\" -b:a {bitrate}k {final_file}"
    os.system(command)

文件大小比对

ls -l | grep 442801
-rw-r--r--@  1 bzy  staff   241440 Dec  8 14:30 442801.mp3
-rw-r--r--@  1 bzy  staff   100845 Dec  8 14:39 44280164k.mp3

可以看到 文件从241kb变成了100kb OK大功告成

另外

降低比特率或者采样率都能降低音频文件的大小 可以考虑同时降低比特率和采样率 这里前端对音频质量要求并不高 只是试听所以只是降低比特率了

ffmpeg -i input.mp3 -ar 44khz output.mp3

文章作者: Wanheng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wanheng !
评论
  目录