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