ffmpeg主要参数
主要参数:
◼-i设定输入流
◼-f 设定输出格式(format)
◼-ss 开始时间
◼-t 时间长度
视频参数:
◼-vframes 设置要输出的视频帧数
◼-b 设定视频码率
◼-b:v 视频码率
◼-r 设定帧速率
◼-s 设定画面的宽与高
◼-vn不处理视频
◼-aspect aspect 设置横纵比4:3
16:9 或 1.3333 1.7777
◼-vcodec 设定视频编解码器,如果用copy表示原始编解码数据必须被拷贝。
◼-vf视频过滤器
音频参数:
◼-aframes 设置要输出的音频帧数
◼-b:a 音频码率
◼-ar设定采样率
◼-ac 设定声音的Channel数
◼-acodec 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。
◼-an 不处理音频
◼-af 音频过滤器
ffmpeg从容器到帧
解复用
cpp
#解复用视频流
保留编码格式:
ffmpeg -i input.mp4 -c:v copy -an output_video.mp4
强制格式:
ffmpeg -i test.mp4 -vcodec libx264 -an test.h264
#解复用音频流
ffmpeg -i input.mp4 -c:a copy -vn output_audio.aac
#解复用特定流
#-map 0:a:1:选择输入文件中的第二个音频流(索引从 0 开始)
ffmpeg -i input.mp4 -map 0:a:1 -c:a copy -vn output_audio2.aac
#解复用字幕流
#-map 0:s:0:选择输入文件中的第一个字幕流。
ffmpeg -i input.mkv -map 0:s:0 -c:s copy output_subtitle.srt
解码
cpp
#提取3秒数据,分辨率和源视频一致
#-c:v rawvideo:指定视频编码器为原始视频(YUV)。
#-pix_fmt yuv420p:指定像素格式为 YUV 4:2:0(常用格式)
ffmpeg-i test_1280x720.mp4 -t 3 -c:v rawvideo -pix_fmt yuv420p yuv420p_orig.yuv
#RGB和YUV之间的转换
ffmpeg -s 320x240 -pix_fmt yuv420p-i yuv420p_320x240.yuv -pix_fmt rgb24
rgb24_320x240_2.rgb
#提取PCM
ffmpeg-i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm
ffmpeg-i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav
ffmpeg-i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav
ffmpeg-i buweishui.mp3 -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm
ffmpeg-i test.mp4 -t 10 -vn-ar 48000 -ac 2 -f f32le 48000_2_f32le_2.pcm
编码
cpp
#视频编码为 H.264
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 output_h264.mp4
#-c:v libx264:指定使用 H.264 编解码器。
#-preset fast:设置编码速度与压缩效率的平衡,fast 是一个较快的编码选项。
#-crf 23:恒定速率因子,控制视频质量,值越低质量越高(范围通常为 18 到 28)。
#音频编码为 AAC 格式
#-c:a aac:指定使用 AAC 编解码器。
#-b:a 192k:设置音频比特率为 192 kbps。
ffmpeg -i input.mp4 -c:a aac -b:a 192k output_audio.aac
#同时编码音频和视频
ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 -c:a aac -b:a 192k output_combined.mp4
#编码为不同的容器格式
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mkv
#转换视频格式
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
复用
cpp
#复用音频和视频流
ffmpeg -i video.mp4 -i audio.aac -c:v copy -c:a copy output.mp4
#复用多个音频流和视频流
ffmpeg -i video.mp4 -i audio1.aac -i audio2.aac
-map 0:v -map 1:a -map 2:a
-c:v copy -c:a copy output.mp4
其余常用命令示例
1. 基本格式转换
将视频从一种格式转换为另一种格式:
cpp
ffmpeg -i input.mp4 output.avi
2. 提取音频
从视频中提取音频:
cpp
ffmpeg -i input.mp4 -q:a 0 -map a output.mp3
3. 裁剪视频
裁剪视频的某一段:
cpp
# -ss 指定开始时间 -to 指定结束时间
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
4. 调整视频分辨率
调整视频的分辨率:
cpp
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
5. 压缩视频
压缩视频以减小文件大小:
cpp
#-crf 控制视频质量,数值越小质量越高(通常 18-28 是合理范围)
ffmpeg -i input.mp4 -vf scale=1280:720 -preset slow -crf 23 output.mp4
6. 添加水印
在视频上添加水印:
cpp
ffmpeg -i input.mp4 -i watermark.png
-filter_complex "overlay=10:10" output.mp4
7. 合并视频和音频
将视频和音频合并:
cpp
#-strict experimental:用于启用实验性特性。AAC 编码可能被视为实验性功能
ffmpeg -i video.mp4 -i audio.mp3
-c:v copy -c:a aac
-strict experimental output.mp4
8. 提取视频帧
从视频中提取某一帧:
cpp
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 output.jpg
9. 创建 GIF
将视频转换为 GIF:
cpp
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif
10. 流媒体处理
将视频推流到 RTMP 服务器:
cpp
#-preset 编码速度 -maxrate最大比特率 -bufsize控制编码器的比特率平滑性
ffmpeg -re -i input.mp4 -c:v libx264
-preset veryfast -maxrate 1000k -bufsize 2000k
-c:a aac -f flv rtmp://server/live/streamkey
11. 多路流处理
将多个视频流合并为一个:
cpp
ffmpeg -i input1.mp4 -i input2.mp4
-filter_complex "[0:v][1:v]hstack=inputs=2[v]"
-map "[v]" -map 0:a output.mp4
12. 字幕处理
将字幕嵌入视频:
cpp
ffmpeg -i input.mp4 -i subtitles.srt
-c:v copy -c:a copy -c:s mov_text output.mp4
13. 视频加速/减速
调整视频播放速度:
cpp
#setpts=0.5*PTS 使视频加速 2 倍,atempo=2.0 使音频加速 2 倍。
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" output.mp4
14. 视频旋转
旋转视频:
cpp
#transpose=1 表示顺时针旋转 90 度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
15. 批量处理
批量转换文件夹中的所有视频:
cpp
for f in *.mp4;
do
ffmpeg -i "$f" -c:v libx264 -c:a aac "${f%.mp4}_converted.mp4";
done
16. 定时视频截图
每隔一段时间截取一张图片:
cpp
ffmpeg -i input.mp4 -vf "fps=1/60" -q:v 2 output_%03d.jpg
17. 视频拼接
将多个视频文件拼接成一个:
cpp
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
filelist.txt
内容示例:
file 'input1.mp4'
file 'input2.mp4'
18. 音频处理
调整音频音量:
cpp
ffmpeg -i input.mp3 -af "volume=2.0" output.mp3
19. 视频降噪
使用降噪滤镜处理视频:
cpp
ffmpeg -i input.mp4 -vf "hqdn3d" output.mp4
20. 视频倒放
将视频倒放:
cpp
ffmpeg -i input.mp4 -vf reverse -af areverse output.mp4
学习资料分享