当前位置: 首页 > article >正文

使用FFmpeg压缩MP3格式音频

FFmpeg简介

FFmpeg 是一个开源的多媒体框架,能够录制、转换数字音频和视频,并将其转码到流行的格式。它被广泛应用于音视频处理领域,支持几乎所有的音视频格式和编解码器。以下是 FFmpeg 的一些关键特点和功能:

主要特点

  1. 跨平台支持

    • FFmpeg 可以在多个操作系统上运行,包括 Windows、macOS 和 Linux,使其成为一个灵活的选择。
  2. 强大的编解码功能

    • 支持几乎所有音频和视频编码格式,如 MP3、AAC、H.264、H.265、MPEG、AVI、MOV、MKV 等。
  3. 多功能性

    • 提供了一系列工具和库,用于音视频处理,如 ffmpeg(命令行工具)、ffplay(用于播放多媒体文件的工具)和 libavcodeclibavformatlibavutil 等库。
  4. 支持流媒体

    • 能够处理实时流媒体,包括从网络流中抓取和播放视频。
  5. 灵活的命令行界面

    • FFmpeg 的命令行工具允许用户通过简单的命令完成复杂的音视频转换和处理任务。
  6. 脚本化支持

    • 可以通过脚本实现批量处理和自动化任务,适合开发人员和媒体专业人士。

常用功能

  1. 转换格式

    • 可以将音频和视频文件转换为不同的格式。例如,将 MP4 文件转换为 AVI 文件。
    ffmpeg -i input.mp4 output.avi
    
  2. 提取音频

    • 从视频文件中提取音频。
    ffmpeg -i video.mp4 -q:a 0 -map a audio.mp3
    
  3. 压缩和调整比特率

    • 可以调整文件的比特率和大小,以减小文件体积。
    ffmpeg -i input.mp3 -b:a 64k output.mp3
    
  4. 裁剪和合并视频

    • 支持对视频进行裁剪、合并和编辑。
    # 裁剪视频
    ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 -c copy output.mp4
    
    # 合并视频
    ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
    
  5. 添加水印和滤镜

    • 可以在视频中添加图像水印或应用各种滤镜效果。
    ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
    
  6. 生成缩略图

    • 从视频中生成缩略图。
    ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.png
    

FFmpeg 是一个功能强大且灵活的工具,适合各种音视频处理任务,从简单的格式转换到复杂的音视频编辑。由于其强大的社区支持和广泛的文档,用户可以轻松找到解决方案和示例以满足他们的需求。

安装FFmpeg

Mac电脑安装ffmpeg

在Mac上安装FFmpeg有几种方法,以下是通过Homebrew安装的最简单方法:

1. 使用Homebrew安装FFmpeg

如果你已经安装了Homebrew,可以通过以下命令来安装FFmpeg:

  1. 打开终端 (Terminal)。
  2. 更新Homebrew:
    brew update
    
  3. 安装FFmpeg:
    brew install ffmpeg
    

这将下载并安装FFmpeg以及其所有必要的依赖项。

2. 检查安装

安装完成后,你可以通过运行以下命令来验证FFmpeg是否正确安装:

ffmpeg -version

这将显示FFmpeg的版本信息,表明它已经成功安装。

3. 安装带有特定编解码器支持的FFmpeg(可选)

FFmpeg可以使用许多不同的编解码器,有时你可能需要特定的编解码器。你可以使用Homebrew来安装带有某些选项的FFmpeg。例如:

brew install ffmpeg --with-opus --with-libvpx
4. 没有Homebrew?

如果没有Homebrew,你可以从FFmpeg官网下载预编译的二进制文件,但Homebrew是推荐的方法,因为它简化了安装和依赖管理。

卸载FFmpeg

要在Mac上卸载FFmpeg,可以使用Homebrew执行以下步骤:

1. 使用Homebrew卸载FFmpeg

如果你是通过Homebrew安装的FFmpeg,可以使用以下命令卸载它:

  1. 打开终端 (Terminal)。
  2. 输入以下命令来卸载FFmpeg:
    brew uninstall ffmpeg
    

这将卸载FFmpeg及其关联的软件包。

2. 检查卸载是否成功

你可以运行以下命令来确认FFmpeg是否被卸载:

ffmpeg

如果显示command not found,则说明FFmpeg已成功卸载。

3. 移除关联的依赖项(可选)

如果你想删除任何与FFmpeg相关的依赖项,可以使用以下命令清理Homebrew中的未使用包:

brew cleanup

这将清理Homebrew中不再需要的依赖项和缓存文件。

MP3格式音频压缩

要对MP3格式音频进行压缩,你可以通过以下几种方法来减少文件大小:

  1. 降低比特率 (Bitrate): MP3 文件的大小与比特率直接相关。标准比特率为 128 kbps 或 192 kbps,但你可以将其降低到 96 kbps 或更低来压缩文件。不过,降低比特率也会影响音质,所以在压缩时需要找到音质和文件大小之间的平衡。

    • 常用工具:FFmpeg
      ffmpeg -i input.mp3 -b:a 96k output.mp3
      
      这条命令将比特率降低到 96 kbps。
  2. 转换为单声道 (Mono): 如果音频是双声道立体声(stereo),你可以将其转换为单声道(mono),这将大幅减少文件大小,但音频的空间感可能会减弱。

    • 使用 FFmpeg:
      ffmpeg -i input.mp3 -ac 1 output.mp3
      
  3. 减少采样率 (Sample Rate): MP3 文件的采样率通常为 44.1 kHz 或 48 kHz,降低采样率可以减少文件大小,例如将其降低到 22.05 kHz,但这也会影响音质。

    • 使用 FFmpeg:
      ffmpeg -i input.mp3 -ar 22050 output.mp3
      
  4. 使用高效编码 (Variable Bitrate, VBR): VBR 是一种根据音频内容动态调整比特率的编码方式。相比固定比特率(CBR),VBR 在相同音质的情况下可以生成较小的文件。

    • 使用 FFmpeg:
      ffmpeg -i input.mp3 -qscale:a 2 output.mp3
      
      其中 -qscale:a 参数控制 VBR 的质量,值越低文件质量越高(1-5 通常是合理范围)。

通过这些方法,你可以有效地压缩 MP3 文件的大小,同时尽量保持音质。

如何查看MP3的各类信息?

要查看 MP3 文件的各种信息(如比特率、采样率、声道数、时长等),你可以使用多种工具。以下是几种常见的方法:

1. 使用 FFmpeg

FFmpeg 是一个强大的多媒体处理工具,可以轻松查看 MP3 文件的详细信息。

  • 查看 MP3 文件的基本信息:

    ffmpeg -i input.mp3
    

    输出结果将显示 MP3 的比特率、采样率、声道数、编码格式、时长等信息。

  • 如果你只想要显示文件信息而不生成任何输出文件,可以使用 ffprobe(FFmpeg 的子工具):

    ffprobe input.mp3
    

2. 使用 VLC 媒体播放器

VLC 不仅是一个播放器,还可以查看音频文件的详细信息。

  • 打开 MP3 文件。
  • 点击菜单中的 “工具” -> “媒体信息”
  • “编解码” 标签中可以查看比特率、采样率、声道等详细信息。

3. 使用 MediaInfo

MediaInfo 是一个开源软件,可以显示音频和视频文件的元数据。它支持多种格式,操作简单。

  • 安装 MediaInfo 后,右键点击 MP3 文件,选择 “MediaInfo”,即可查看文件的详细信息。
  • 也可以通过命令行查看:
    mediainfo input.mp3
    

4. 使用 MP3Tag

MP3Tag 是一个常用的 MP3 标签编辑工具,但也可以显示音频文件的详细信息,尤其是标签和元数据。

5. 使用 Windows 和 macOS 系统自带功能

Windows:
  • 右键点击 MP3 文件,选择 “属性”
  • “详细信息” 标签页,可以看到文件的比特率、采样率、声道数等信息。
macOS:
  • 右键点击 MP3 文件,选择 “显示简介”
  • “更多信息”“编码” 部分,可以看到文件的基本信息。

6. 使用 Python (Mutagen 库)

如果你想在编程环境中处理和提取 MP3 文件的元数据,可以使用 Python 的 mutagen 库。

pip install mutagen

示例代码:

from mutagen.mp3 import MP3

audio = MP3("input.mp3")
print(f"Duration: {audio.info.length} seconds")
print(f"Bitrate: {audio.info.bitrate} bps")
print(f"Sample rate: {audio.info.sample_rate} Hz")
print(f"Channels: {audio.info.channels}")

通过这些工具和方法,你可以轻松获取 MP3 文件的详细信息。

批量压缩MP3音频

你可以使用批处理的方法对多个 MP3 文件进行压缩。以下是几种不同方式来批量压缩 MP3 文件的方法:

1. 使用 Bash 脚本和 FFmpeg

如果你使用的是 Linux 或 macOS 系统,或者在 Windows 上通过 WSL 运行 Linux 环境,你可以编写一个简单的 Bash 脚本来批量处理 MP3 文件。

示例脚本:
#!/bin/bash

# 设置目标比特率
bitrate="96k"

# 创建输出文件夹
output_dir="compressed_mp3s"
mkdir -p "$output_dir"

# 遍历当前目录中的所有 MP3 文件
for file in *.mp3; do
  # 获取文件名,不包含扩展名
  filename=$(basename "$file" .mp3)
  
  # 压缩并输出到目标文件夹
  ffmpeg -i "$file" -b:a $bitrate "$output_dir/${filename}_compressed.mp3"
  
  echo "压缩完成: $file"
done

echo "所有文件压缩完成,保存在 $output_dir 文件夹中。"
  • 将此脚本保存为 compress_mp3.sh,然后给它执行权限:

    chmod +x compress_mp3.sh
    
  • 运行脚本:

    ./compress_mp3.sh
    

这个脚本会将当前目录中的所有 MP3 文件压缩到 96kbps,并将压缩后的文件保存在 compressed_mp3s 文件夹中。

2. 使用 Windows 批处理文件和 FFmpeg

在 Windows 系统中,你可以使用批处理文件(.bat)来实现批量压缩。

示例批处理文件:
@echo off
set bitrate=96k
set output_dir=compressed_mp3s
mkdir %output_dir%

for %%f in (*.mp3) do (
  ffmpeg -i "%%f" -b:a %bitrate% "%output_dir%\%%~nf_compressed.mp3"
  echo 压缩完成: %%f
)

echo 所有文件压缩完成,保存在 %output_dir% 文件夹中。
pause
  • 将以上代码保存为 compress_mp3.bat 文件。
  • 双击运行该文件即可批量压缩当前目录中的所有 MP3 文件。

3. 使用 Python 和 FFmpeg

你也可以使用 Python 脚本来批量压缩 MP3 文件,结合 os 模块来遍历目录,并调用 FFmpeg 命令行。

示例 Python 代码:
import os
import subprocess

# 设置目标比特率
bitrate = "96k"
output_dir = "compressed_mp3s"

# 创建输出文件夹
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 遍历当前目录中的所有 MP3 文件
for file in os.listdir():
    if file.endswith(".mp3"):
        # 获取文件名,不包含扩展名
        filename = os.path.splitext(file)[0]
        
        # 构建 FFmpeg 命令
        output_file = f"{output_dir}/{filename}_compressed.mp3"
        cmd = ["ffmpeg", "-i", file, "-b:a", bitrate, output_file]
        
        # 执行命令
        subprocess.run(cmd)
        print(f"压缩完成: {file}")

print(f"所有文件压缩完成,保存在 {output_dir} 文件夹中。")
  • 保存并运行此 Python 脚本,将压缩当前目录下的所有 MP3 文件。

4. 批量处理工具

如果你更喜欢图形界面,以下是一些支持批量 MP3 文件压缩的工具:

  • Audacity: 一款免费的音频编辑工具,支持批量处理音频文件,通过“链”或“宏”功能进行批处理。
  • MP3 Quality Modifier: 专门用于 MP3 压缩和批量处理的工具,操作简单。

通过这些方法,你可以批量压缩多个 MP3 文件,并根据需求选择合适的比特率和其他参数。

多参数压缩音频

你可以使用以下 FFmpeg 命令来压缩音频,同时降低比特率、转换为单声道、减少采样率,并使用高效编码(例如 AAC)。以下是优化后的脚本:

ffmpeg -i 4.mp3 -ac 1 -ar 22050 -b:a 96k -codec:a aac compressed_4.m4a

参数解释:

  • -i 4.mp3: 输入文件为 4.mp3
  • -ac 1: 将音频通道设置为 单声道(1 表示单声道)。
  • -ar 22050: 将采样率降低到 22.05 kHz,这可以减少文件大小。
  • -b:a 96k: 设置音频比特率为 96 kbps,这是一种较低的比特率,适合语音或背景音乐。
  • -codec:a aac: 使用 AAC 编码器,这是一种高效的音频编码格式,通常比 MP3 更高效。
  • compressed_4.m4a: 输出文件名为 compressed_4.m4a,使用 .m4a 扩展名,表示 AAC 编码的音频。

额外建议:

  • 如果你希望保留原 MP3 格式,但仍想实现相同的设置,可以将输出文件扩展名改为 .mp3
ffmpeg -i 4.mp3 -ac 1 -ar 22050 -b:a 96k -codec:a libmp3lame compressed_4.mp3

以上命令将输出压缩后的 MP3 文件,但 AAC 编码通常能提供更好的音质和更小的文件大小,所以推荐使用 .m4a 格式。

批量压缩脚本(推荐使用)

以下是优化后的脚本,旨在尽量减小压缩后音频文件的大小。该脚本设置了较低的比特率、单声道音频和较低的采样率,同时使用高效的 MP3 编码器:

#!/bin/bash
# 说明:此脚本为录音压缩脚本,需要放到录音所在目录执行,前提,自行安装ffmpeg

# 设置目标比特率和采样率
bitrate="64k"     # 设置较低的比特率
sample_rate="22050"  # 设置较低的采样率

# 创建输出文件夹
output_dir="compressed_mp3s"
mkdir -p "$output_dir"

# 遍历当前目录中的所有 MP3 文件
for file in *.mp3; do
  # 获取文件名,不包含扩展名
  filename=$(basename "$file" .mp3)
  
  # 压缩并输出到目标文件夹,转换为单声道,降低采样率,并使用高效 MP3 编码
  ffmpeg -i "$file" -ac 1 -ar "$sample_rate" -b:a "$bitrate" -codec:a libmp3lame "$output_dir/${filename}.mp3"
  
  echo "压缩完成: $file"
done

echo "所有文件压缩完成,保存在 $output_dir 文件夹中。"

关键参数说明:

  1. 比特率:将目标比特率设置为 64k,这通常能显著减少文件大小。
  2. 采样率:采样率设置为 22050 Hz,能够进一步减少文件大小,但请注意音质会有所下降。
  3. 声道:通过 -ac 1 将音频转换为单声道,进一步减小文件大小。
  4. 编码器:使用 libmp3lame 编码器,以便在较低比特率下获得更好的压缩效果。

注意事项:

  • 音质权衡:使用较低的比特率和采样率可能会影响音质,确保根据需要调整参数,以达到最佳的文件大小与音质平衡。
  • 测试和调整:根据音频内容的不同,文件大小的变化可能会有所不同,可以通过尝试不同的比特率来进一步优化压缩效果。例如,尝试 48k32k 等更低的比特率,看看文件大小和音质的变化。

压缩效果

在这里插入图片描述


http://www.kler.cn/a/322994.html

相关文章:

  • 智能化运维与AI/ML辅助决策:实现自动化与预测优化
  • Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射
  • 【WebRTC】视频发送链路中类的简单分析(下)
  • 小程序如何完成订阅
  • Linux运维常用命令
  • Flutter:Widget生命周期
  • 利用模糊综合评价法进行数值评分计算——代码实现
  • 基于Java开发的(控制台)模拟的多用户多级目录的文件系统
  • Redis的主要特点及运用场景
  • 【Linux】ubuntu 16.04 搭建jdk 11 环境(亲测可用)
  • 数据结构:特殊矩阵 及其存储
  • 策略路由控制选路
  • apt update时出现证书相关问题,可以关闭apt验证
  • 【Redis 源码】3dict字典数据结构
  • 打点 - 泛微 E-Cology WorkflowServiceXml
  • FPGA学习(3)-38译码器实现
  • LLM基础概念:Prompt
  • LeetCode --- 416周赛
  • Unity图形用户界面!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。(万字解析)
  • 常用性能优化方法
  • jdk tomcat 镜像制作
  • Activiti7《第九式:破气式》——流畅驱动工作流进程。面试题大全
  • Maya没有Arnold材质球
  • Docker的实践应用举例
  • C++并发编程实战
  • re轻松拆分四则运算expression(^从头匹配、(?:xxxx)非捕获组、| 交替运算符联合演习)