ffmpeg是强大的音视频处理软件,提供了丰富的音视频转码、提取、合并功能。
FFmpeg 是领先的多媒体框架,能够解码、编码、转码、复用、解复用、流式传输、过滤和播放几乎所有人类和机器创造的媒体格式。它支持从最古老的冷门格式到最前沿的最新格式,无论这些格式是由标准委员会、社区还是公司设计的。FFmpeg 还具有高度的可移植性:它能够在 Linux、Mac OS X、Microsoft Windows、BSD 系统、Solaris 等操作系统上编译、运行,并通过我们的测试基础设施 FATE 测试,支持各种构建环境、机器架构和配置。
查看文件信息
ffprob sample.wav

格式转换
ffmpeg -i sample.wav sample.mp3
片段截取
ffmpeg -i sample.wav -ss 00:00:00 -t 00:00:30 sample-30s.wav
提取视频中的音频
# -vn 输出中忽略视频流, -an 输出中忽略音频流 # -acodec copy 保持原有音频格式 ffmpeg -vn -i sample.mp4 -acodec copy sample.aac
立体声转单声道(stereo -》mono)
# -ac 只提取一个声道 ffmpeg -i sample.aac -acodec mp3 -ac 1 sample-mono.mp3
音频合并
# 使用amix filter 简单合并2个音频(左合到左,右合到右;如果都是单声道,结果也是单声道) ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amix=inputs=2:duration=longest mix.mp3 # 使用join filter合并2个音频成立体声 ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex join=inputs=2:channel_layout=stereo stereo.mp3 # 使用amerge filter合并2个音频成立体声 ffmpeg -i 1.mp3 -i 2.mp3 -filter_complex amerge=inputs=2 mix.mp3
shell脚本批量格式转换
for i in {1..10} do ffmpeg -i ${i}.wav ${i}.mp3 done
RTP推流
# -re 按照帧率发送 ffmpeg -re -i sample.opus -c:v copy -f rtp -sdp_file sample.sdp "rtp://127.0.0.1:1234"
播放RTP流
ffplay -protocol_whitelist "file,udp,rtp" -i sample.sdp
RTMP推流(nginx 需要提前配置rtmp端口)
# -re 按照帧率发送 ffmpeg -re -i sample.flv -vcodec copy -f flv "rtmp://127.0.0.1:1234/live"
播放RTMP流
ffplay "rtmp://127.0.0.1:1234/live"
备注:
opus是一种音频格式,比mp3的压缩率更高,而且在传输解码时,有更低的延迟,同样条件下,opus音质要好于mp3
生成波形图
ffmpeg -i audio.pcm -filter_complex "showwavespic=s=640x240:split_channels=1" -frames:v 1 audio.png
参考文档:
RTP (II): Streaming with FFmpeg – Kurento
混音合并:How to overlay/downmix two audio files using ffmpeg – Stack Overflow
Nginx RTMP配置:FFmpeg + nginx + rtmp 实现推流 | Mr.Blog