#毕设 #JavaCV
FFMPEG Introduction
基本介绍
- 是一个命令行工具,解决的是如何将每帧画面存储成二进制数据的问题,功能强大
- 配置之后可以在命令行进行音视频的处理工作,并生成文件
- 常见mp4格式:H.264/MPEG-4 AVC
- 基本存储命令
ffmpeg -i test.avi test.mp4
- 指定编码器命令:
ffmpeg -i test.avi -c:v libx264 output.mp4
-c:v
video encoder 尽量放在-i后面libx264
是默认的,可替换为显卡h264_nvenc
- 指定渲染速度命令:
ffmpeg -i test.avi -c:v libx264 -preset veryfast output.mp4
- 速度可以设置为:
ultrafast/superfast/veryfast/fast/medium(默认)/slow/slower/veryslow
- 编码越快生成的文件越大
- 速度可以设置为:
- 指定文件质量:
ffmpeg -i test.avi -c:v lib264 -crf 22 output.mp4
-crf
constant rate factor 范围 0~50,越大越差,常用范围为19~28
过滤器
调整视频
- 指定大小:
ffmpeg -i test.avi -c:v lib264 -vf "scale=1024:576" output.mp4
- 1024:576 视频画面长度 :宽度
- 任一长度或宽度指定为-1,ffmpeg会自动推算另一个参数
- 指定旋转方向:
ffmpeg -i test.avi -c:v lib264 -vf "transpose=2" output.mp4
- transpose=2 逆时针旋转90度
- 指定裁剪大小:
ffmpeg -i test.avi -c:v lib264 -vf "crop=400:400:100:100" out.mp4
- crop=w:h❌y 为裁剪位置
- 也可以
ffmpeg -i test.avi -c:v lib264 -vf "crop=iw/3:ih/3" output.mp4
指定比例
- 裁剪指定位置后的数秒:
ffmpeg -i test.avi -c:v lib264 -ss 00:00:03 -t 00:00:05 output.mp4
- -t 00:00:05 表示5秒,可以用5直接代替
- -ss 表示起始位置
- -t 00:00:05 改成 -to 00:00:05表示裁剪到第5秒
- 裁剪多个文件:
- 将文件名放入一个列表中,每个文件换行.假设名字为
mylist.txt
,内容为 clip1.mp4 clip2.mp4 clip3.mp4 ffmpeg -f concat -i mylist.txt -c copy output.mp4
- copy 表示直接复制原文件而不重新编码
- 将文件名放入一个列表中,每个文件换行.假设名字为
- 不同过滤器可以组合起来,用逗号分隔
调整音频
- 使用音频过滤器:-af “”
- 调整音量:
ffmpeg -i test.mp4 -af "volume=1.5" output.mp4
- 统一音量:
"loudnorm=I=-5:LRA=1"
- 高通、低通滤波器、均衡器:
equalizer=f=1000:width_type=h:width=200:g=-10
- 删除音轨:
ffmpeg = test.mp4 -an output.mp4
- 类似的删除还有 -vn(视频),-sn(字幕),-dn(数据流)
特殊用法
- 输出缩略图:
ffmpeg - i test.mp4 -vf "fps=1/10, scale=-2:720" thumbnail-%03d.jpg
- fps=1/10 代表每10秒输出一帧画面
- scale=-2:720 表示输出缩略图的大小
- thumbnail-代表最后输出的文件名格式
- 添加水印:
ffmpeg -i test.mp4 -i cat.jpg -filter_complex "overplay=100:100" output.mp4
- 表示将cat.jpg作为水印
- 100:100 表示在图像中的位置
- 生成gif:
ffmpeg -i test.avi -ss 0 -t 3 -filter_complex [0:v]fps=15, scale=-1:256,split[a][b];[a]palette gen[p];[b][p]paletteuse output.gif
- 先裁剪
- 缩放视频并降低帧率
- 由于gif256色限制,需要创建调色板