Featured image of post FFmpeg 音频文件日常处理指令

FFmpeg 音频文件日常处理指令

FFmpeg 是处理音频文件的命令行神器,强大且高效。本文档旨在整理日常工作中最为核心的三大操作:裁剪、转码与合并。这里只提供最常用、最直接的指令范例,帮助你快速解决问题,无需深入复杂的理论。

一、准备工作:查看音频信息

在进行任何操作前,先用 ffprobe 快速了解文件的编码、码率、采样率等信息,这对于后续操作至关重要,尤其是在合并文件时。

1
2
3
4
5
# 快速查看基本信息
ffmpeg -hide_banner -i input.m4a

# 获取详细的技术参数 (JSON格式)
ffprobe -v error -show_format -show_streams -print_format json input.m4a

二、裁剪音频:精确提取或分割

无论是截取一段,还是将长音频分割成章节,裁剪都是基础操作。

方案一:无损裁剪(速度最快)

此方法不重新编码,速度极快,且无任何质量损失。它会在最接近你指定时间点的“关键帧”上进行切割。

1
2
3
4
5
6
7
8
# 从 1分30秒 开始,截取 15秒 的片段
ffmpeg -ss 00:01:30 -i input.m4a -t 00:00:15 -c copy output_segment.m4a

# 将文件从 3小时43分07秒 处分割成两段
# 第一段:从头到分割点
ffmpeg -i input.m4a -to 03:43:07.300 -c copy part1.m4a
# 第二段:从分割点到结尾
ffmpeg -i input.m4a -ss 03:43:07.300 -c copy part2.m4a

提示-c copy 是无损操作的核心。为提升网络播放体验,可以在 M4A/MP4 容器后添加 -movflags +faststart

方案二:重编码裁剪

如果你需要毫秒级的绝对精确切割,或者需要改变输出格式,则需要进行重编码。只需去掉 -c copy 并指定编码参数即可。

1
2
# 从 1分30秒 开始,精确截取 15秒,并重新编码
ffmpeg -ss 00:01:30 -i input.m4a -t 00:00:15 -c:a aac -b:a 192k output_segment.m4a

三、格式转码

将音频转换为不同格式或码率,以适应不同平台或压缩文件体积。

核心参数解析

  • -c:a:指定音频编码器 (e.g., libmp3lame, aac, alac, flac)
  • -b:a:指定音频码率 (e.g., 128k, 192k, 320k)
  • -q:a:指定 VBR 质量(仅部分编码器支持,如 libmp3lame,数值越小质量越高)
  • -ar:指定采样率 (e.g., 44100, 48000)
  • -ac:指定声道数 (e.g., 1 for mono, 2 for stereo)

常用转码范例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# WAV (无损) -> MP3 (高品质 VBR)
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3

# FLAC (无损) -> AAC/M4A (192kbps CBR,兼容性好)
ffmpeg -i input.flac -c:a aac -b:a 192k output.m4a

# FLAC (无损) -> ALAC/M4A (Apple 无损,适用于苹果生态)
ffmpeg -i input.flac -c:a alac output.m4a

# 统一规格:转为 48kbps AAC-LC,用于网络分发
ffmpeg -i source.wav -vn \
  -c:a aac -profile:a aac_low \
  -b:a 48k -ar 44100 -ac 2 \
  -movflags +faststart \
  output_for_web.m4a

四、合并音频:拼接多个片段

将多个音频文件合并成一个。这里介绍两种核心方法。

方法一:无损合并(最快,但有前提)

此方法通过一个清单文件进行流拷贝,速度飞快。但它有一个严格的前提:所有待合并文件的编码参数必须完全一致(编码器、Profile、采样率、声道数等)。

  1. 创建清单文件 list.txt,内容如下:

    1
    2
    3
    
    file 'part1.m4a'
    file 'part2.m4a'
    file 'part3.m4a'
    
  2. 执行合并命令

    1
    
    ffmpeg -f concat -safe 0 -i list.txt -c copy output_merged.m4a
    

    排错:如果合并后出现播放问题(如后半段无声),通常是因为各片段的编码参数不一致(例如一个是 AAC-LC,另一个是 HE-AAC)。请先使用“转码”操作将它们统一规格,再进行合并。

方法二:重编码合并(最通用,但较慢)

此方法会解码所有输入文件,将它们连接起来,然后重新编码为一个新文件。它不要求输入文件规格一致,因此通用性最强

1
2
3
4
ffmpeg -i part1.m4a -i part2.mp3 -i part3.wav \
  -filter_complex "[0:a][1:a][2:a]concat=n=3:v=0:a=1[a]" \
  -map "[a]" -c:a aac -b:a 192k \
  output_merged.m4a

concat=n=3 中的 n=3 表示有 3 个输入文件。

附录:指令备忘清单

任务 核心指令
查看信息 ffmpeg -i [输入文件]
无损裁剪 -ss [开始时间] -i [输入] -t [时长] -c copy [输出]
转为MP3 -c:a libmp3lame -q:a 2
转为AAC -c:a aac -b:a 192k
无损合并 -f concat -i list.txt -c copy
重编码合并 -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1[a]" -map "[a]"
使用 Hugo 构建
主题 StackJimmy 设计