FFmpeg常用音频操作

一、介绍

ffmpeg是一个非常快速的视频和音频转换器,也可以从实时音频、视频源中获取。它还可以在任意采样率之间转换,并使用高质量的多相波滤器及时调整视频大小。

二、下载

https://ffmpeg.org/download.html

根据官网下载指定系统的安装文件后,配置相应的环境变量后即可执行

# 输入 ffmpeg -version 查看是否安装配置成功
ffmpeg version n4.3.1-20-g8a2acdc6da Copyright (c) 2000-2020 the FFmpeg developers
# 可以查看相应的参数,除了通用参数外,还提供了视频、音频、字幕各个特定的参数
ffmpeg -h

三、常用操作

3.1 获取音频基本信息

获取音频的基本信息,如时长、比特率、格式等。

# ffmpeg -i 音频文件
ffmpeg -i demo.mp3
ffmpeg version n4.3.1-20-g8a2acdc6da Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3-win32 (GCC) 20200320
# .... 忽略中间信息
Input #0, mp3, from 'demo.mp3':
Metadata:
encoder : Lavf58.45.100
Duration: 00:03:10.04, start: 0.069063, bitrate: 24 kb/s
Stream #0:0: Audio: mp3, 16000 Hz, mono, fltp, 24 kb/s

FFmpeg安装好后,会带有两外一个工具 ffprobe ,也可以用来获取更加全面的音频信息。

λ ffprobe -print_format json -loglevel error -show_streams Users\quanzhu\Desktop\audio\first.mp3
{
"streams": [
{
"index": 0,
"codec_name": "mp3",
"codec_long_name": "MP3 (MPEG audio layer 3)",
"codec_type": "audio",
"codec_time_base": "1/16000",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"sample_fmt": "fltp",
"sample_rate": "16000",
"channels": 1,
"channel_layout": "mono",
"bits_per_sample": 0,
"r_frame_rate": "0/0",
"avg_frame_rate": "0/0",
"time_base": "1/14112000",
"start_pts": 974610,
"start_time": "0.069062",
"duration_ts": 2681900928,
"duration": "190.044000",
"bit_rate": "24000",
"disposition": {
"default": 0,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0
}
}
]
}
3.2 获取音频波形图
ffmpeg -i c:\Users\quanzhu\Desktop\audio\demo.m4a -f lavfi -i color=c=black:s=640x320 -filter_complex "compand,aformat= channel_layouts=mono,showwavespic=s =640x120:colors=#ffffff" -frames:a 1  c:\Users\quanzhu\Desktop\audio\output.jpg
3.3 音频切割

指定开始、结束时间

ffmpeg -i c:\Users\quanzhu\Desktop\demo.m4a -ss 00:00:00 -t 00:01:00  c:\Users\quanzhu\Desktop\demo1.m4a
3.4 wav 转 mp3
ffmepg -i xxx.wav -f mp3 yyyy.mp3
3.5 音频合并
ffmpeg -i "concat:aaa.mp3|bbb.mp3" -acodec copy ccc.mp3
3.6 音频混音

混音可以设置,音频时长是按照哪个一个时长为准。

ffmpeg -i aaa.wav -i bbb.wav -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 -f mp3 ccc.wav

四、Java操作FFmpeg

public class Test {

public static void main(String[] args) throws IOException {
LinkedList<String> paramList = new LinkedList<>();
// ffmpeg
paramList.add("D:/software/install/ffmpeg-share/bin/ffmpeg.exe");
paramList.add("-version");
ProcessBuilder builder = new ProcessBuilder(paramList);
Process process = builder.start();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8));

String content;
while (StringUtils.hasText(content = reader.readLine())) {
System.out.println(content);
}
}
}