使用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 MP3audio = 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"
doneecho "所有文件压缩完成,保存在 $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"
doneecho "所有文件压缩完成,保存在 $output_dir 文件夹中。"

关键参数说明:

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

注意事项:

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

压缩效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548748.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

微服务Redis解析部署使用全流程

1、什么是Redis Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 可以理解成一个大容量的map。…

PCI数据采集卡500K频率32路模拟量采集 DIO各16路 DAQ卡——PCI8735

品牌:阿尔泰科技 型号:PCI8735 概述: 产品应用: 板卡图片: 指标参数: 模拟量输入 通道数 单端32路/差分16路 精度 12位 采样频率 500KHz 通道切换方式 首末通道顺序切换 AD量程 10V,5V&#x…

Mbox物联网关:驱动工业数据汇聚与智能处理的核心引擎

在数字化转型的汹涌浪潮中,Mbox物联网关作为工业物联网领域的佼佼者,正引领着制造业向智能化、高效化方向迈进,深刻重塑着传统工业的生产生态与效率边界。作为连接物理世界与数字世界的智能桥梁,明达技术自主研发的Mbox物联网关在…

大数据新视界 --大数据大厂之数据压缩算法比较与应用:节省存储空间

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

mysql---索引类型及索引方法使用

mysql索引类型 Normal、Full Text、Unique 在 MySQL 中,索引的类型主要有以下几种: Normal Index(普通索引): 这是最基本的索引类型,没有唯一性要求。允许重复值,可以加速查询性能。用法&#…

容器编排工具Docker Compose

目录 一、Docker Compose概述 1、主要功能 2、工作原理 二、常用命令参数 1、服务管理 2、构建和重新构建服务 三、Docker Compose的yml文件 1、服务 2、网络 3、存储卷 四、容器编排实现haproxy和nginx负载均衡 一、Docker Compose概述 1、主要功能 定义服务&#xf…

又一条地铁无人线开通!霞智科技智能清洁机器人正式“上岗”

2024年9月26日12时,又一条无人线开通运营,这是陕西省首条全自动无人驾驶地铁线路。该线路作为北跨战略的先行工程,是连接主城区与渭北地区的轨道交通快线,对优化城市总体空间布局、推动区域融合发展、促进沿线产业升级具有十分重要…

HBuilder X中搭建vue-cli项目(一)

一、前端项目结构 传统结构:一个项目中有很多HTML文件,一个HTML文件就是一个网页。他们之间彼此独立,互相没有联系,我们每次导入其它前端文件时,需要给每一个HTML文件都导入,需要导入的文件一旦过多,就会很麻烦,并且整体看来很乱。 现代结构:在一个nod…

相关数据库类型介绍

数据库类型可以根据不同的维度进行分类,但最常见的分类方式是将其分为关系型数据库(Relational Databases)和非关系型数据库(Non-Relational Databases),也称为NoSQL数据库。下面我将详细介绍这两种类型的数…

5.3 克拉默法则、逆矩阵和体积

本节是使用代数而不是消元法来求解 A x b A\boldsymbol x\boldsymbol b Axb 和 A − 1 A^{-1} A−1。所有的公式都会除以 det ⁡ A \det A detA, A − 1 A^{-1} A−1 和 A − 1 b A^{-1}\boldsymbol b A−1b 中的每个元素都是一个行列式除以 A A A 的行列式。…

机器学习-模型集成

文章目录 模型集成为什么要集成?模型集成要解决的问题主要的集成思想 Committees多个模型的结果进行融合。BaggingBagging 特点 BoostingAdaBoost算法过程 GBDT负梯度拟合 XGBoostXGBoost 参数通用参数booster 参数学习目标参数 模型保存 模型集成 三个臭皮匠顶一个…

Nginx的核心架构和设计原理

Nginx 是一个免费的、开源的、高性能 Http 服务器和反向代理。Nginx 的架构设计是为了提供高性能、稳定性和可扩展性。 Nginx 的主要架构组件和工作原理: 1、Master 进程:Nginx 的运行始于一个 master 进程,它负责管理所有的工作进程。mast…

MySQL递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点(同级节点) 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…

Docker配置阿里云镜像加速器,拉取Tomcat,使用云服务器访问Tomcat容器

一、简介与概述 1.Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 2. Doc…

数据结构编程实践20讲(Python版)—03栈

本文目录 03 栈 StackS1 说明S2 示例基于列表的实现基于链表的实现 S3 问题:复杂嵌套结构的括号匹配问题求解思路Python3程序 S4 问题:基于栈的阶乘计算VS递归实现求解思路Python3程序 S5 问题:逆波兰表示法(后缀表达式)求值求解思路Python3程…

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon(禹贡),基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力,提供专业的GIS(Geographic Information System)功能,赋能传统关系型数据库。 Yukon 支…

Go基础编程 - 15 - 延迟调用(defer)

延迟调用 defer 1. 特性2. 常用用途3. defer 执行顺序:同函数内先进后出4. defer 闭包5. defer 陷阱 上一篇:泛型 1. 特性 1. 关键字 defer 用于注册延迟调用。 2. defer 调用直到 return 前才被执行。 3. 同函数内多个 defer 语句,按先进后…

怎么绕开华为纯净模式安装软件

我是标题 众所周不知,华为鸿蒙系统自带纯净模式,而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示,无视风险,“仍要安装”。但我这次遇到的问题是,根本没有这个选项,只有“应用市场”和“取消”&…

数据结构:二叉树的遍历和线索二叉树

二叉树的遍历 二叉树的遍历是二叉树的一种重要的操作,指按照某种顺序访问树中的每个节点,并且每个节点仅被访问一次。常见的遍历方式有四种:前序遍历、中序遍历、后序遍历和层次遍历(或称为广度优先遍历)。 二叉树的…

物联网系统中LCD屏主流驱动方案详解

01 物联网系统中为什么要使用LCD驱动芯片 在物联网系统中使用LCD驱动芯片的原因主要有以下几点: 节省资源 1、减少IO端口占用:在物联网设备中,单片机或其他主控芯片的IO资源通常非常有限。LCD驱动芯片可以通过简单的接口(如SP…