ffmpeg 的一些命令

FFmpeg

视频相关

视频转换

1
2
3
4
5
6
7
8
9
10
11
12
13
# 检查音视频是否可以播放
ffmpeg -v error -i input.mp4 -f null -
# 视频格式
ffmpeg -i test.mp4 -vcodec h264 output.mp4
# 视频分辨率
# -1 表示和之前的相同
ffmpeg -i test.mp4 -vf scale=480:-1 output.mp4
ffmpeg -i test.mp4 -s 800x600 output.mp4
# 视频帧率
ffmpeg -i test.mp4 -r 10 output.mp4
# 改变CRF 18-28是人可以接受的范围,超过之后会明显感觉有瑕疵
# 0-50是可选参数,50压缩比是最大的,质量也是最低的
ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 24 output.mp4

视频合成

1
2
3
4
5
6
7
8
9
// 转换为ts流
ffmpeg -i 0.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 0.ts
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i 3.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 3.ts
ffmpeg -i 4.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 4.ts
ffmpeg -i 5.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 5.ts
// 合并ts流为mp4
ffmpeg -i "concat:0.ts|1.ts|2.ts|3.ts|4.ts|5.ts" -acodec copy -vcodec copy -absf aac_adtstoasc FileName.mp4

视频截取

1
ffmpeg -ss 00:00:00 -t 00:30:00 -i test-1.mp4 test-2.mp4

视频倒放

1
2
3
4
5
6
7
8
// 1.视频倒放,无音频
ffmpeg.exe -i inputfile.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4
// 2.视频倒放,音频不变
ffmpeg.exe -i inputfile.mp4 -vf reverse reversed.mp4
// 3.音频倒放,视频不变
ffmpeg.exe -i inputfile.mp4 -map 0 -c:v copy -af "areverse" reversed_audio.mp4
// 4.音视频同时倒放
ffmpeg.exe -i inputfile.mp4 -vf reverse -af areverse -preset superfast reversed.mp4

视频流

将流媒体服务器上的流dump到本地

1
ffmpeg -i rtmp://127.0.0.1/rh/mylive -acodec copy -vcodec copy -f flv test.flv

将视频推送到流媒体服务器上

1
ffmpeg -re -i pm.mp4 -acodec copy -vcodec copy -f flv rtmp://127.0.0.1/rh/mylive 

合并m3u8文件

1
ffmpeg -f concat -safe 0 -i input.m3u8 -c copy output.mp4

input.m3u8 中的内容为

1
file '文件地址.ts'

读取视频流到文件

1
ffmpeg -i https://example.com/live/example.m3u8 -vcodec copy -acodec copy example.mp4

音频相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 提取音频文件
ffmpeg -i test.mp4 -vn -acodec copy output.mp3
ffmpeg -i test.mp4 -map 0:a -acodec libmp3lame output.mp3
# 音频静音
ffmpeg -i test.mp4 -an -vcodec copy output.mp4
# 将单独左声道音频提升为立体声道
ffmpeg -i left.mp3 -af "channelmap=0-1|0-0" all.mp3
# 双声道合并为单声道
ffmpeg -i music.mp3 -ac 1 music.aac
# 单声道转双声道 ac 指定声道数
ffmpeg -i left.aac -ac 2 output.m4a
# 将两个音频源合并为双声道
ffmpeg -i left.aac -i right.aac -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" output.mka
# 双声道提取
ffmpeg -i music.mp3 -map_channel 0.0.0 letf.aac -map_channel 0.0.1 right.aac
# 声道转换
ffmpeg -i music.mp3 -filter_complex channelsplit=channel_layout=stereo output.mka

查看音频布局情况

1
ffmpeg -layouts查看音频的布局情况

绘制音频波形图 (多声道混合)

1
ffmpeg -i music.mp3 -filter_complex "showwavespic=s=640*120" -frames:v 1 output.png 

绘制不同声道的波形图

1
ffmpeg -i 1.mp3 -filter_complex "showwavespic=s=640*240:split_channels=1" -frames:v 1 output.png

音量设置

声音音量应该仔细调整,以保护我们的耳朵和ffmpeg提供2种方法。第一个使用-vol选项,它接受从0到256的整数值,其中256是最大值

1
ffmpeg -i music.mp3 -vol 30 sound_low.mp3

另一种方法是使用表中描述的卷过滤器:

音量降低到三分之二

1
ffmpeg -i music.mp3 -af volume=2/3 quiet_music.mp3

增加10分贝的音量

1
ffmpeg -i music.mp3 -af volume=10dB louder_sound.mp3

加快/减慢节奏

atempo 值范围0.5-2.0

1
2
3
4
# 加快
ffplay music.mp3 -af atempo=1.5
# 减慢
ffplay music.mp3 -af atempo=0.5

噪音处理

  1. 音频分离
1
2
ffmpeg.exe -i input.mp4 tmpvid.mp4
ffmpeg -i input.mp4 tmpaud.wav
  1. 提取噪音
1
ffmpeg -i noise.mp4 noise.wav
  1. 分析噪音,去除噪音
1
2
sox noise.wav -n noiseprof noise.prof
sox tmpaud.wav denoise.wav noisered noise.prof 0.21
  1. 合并音频
1
ffmpeg.exe -i denoise.wav -i tmpvid.mp4 fin.mp4