多媒体格式转换--FFmpeg
FFmpeg 是领先的多媒体框架,能够对音视频等进行解码、编码、 转码、复用、解复用、流式传输、过滤和播放,也可以操作提取关键帧和GIF等。
FFmpeg 可以在 Linux、Mac OS X、Microsoft Windows、BSD、Solaris 等各种构建环境、机器架构和配置下编译、运行。
1、ffmpeg下载安装:ffmpeg官网下载
Mac安装:
1️⃣安装homebrew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
2️⃣安装ffmpeg
brew install ffmpeg
3️⃣验证ffmpeg安装
ffmpeg -version
Windows安装:
1️⃣进入官网下载对应的压缩包
ffmpeg官网下载,找到 Windows 区域,点击 gyan.dev(推荐稳定版):
进入后在 Release Builds 里选:
ffmpeg-release-essentials.zip(基础版,够用、体积小)
或 ffmpeg-release-full.zip(完整版,含更多编码)
2️⃣安装
Windows安装相对比较简单,下载的压缩包文件直接解压即可
ps:文件所在路径最好不要有空格或文字出现,后续配置环境会有影响
3️⃣配置环境变量并验证安装
打开环境变量(“我的电脑”右键找到属性-->高级系统设置-->环境变量),找到“path”,打开编辑
复制ffmpeg解压缩后文件bin所在文件路径,将文件路径粘贴到path编辑栏,点击“保存”即可
ffmpeg -version成功打印版本
2、常用基础指令
视频格式转换、截取、提取
ffmpeg -i input.mp4 output.avi 将mp4格式转换为avi
ffmpeg -i input.avi -c:v libx265 -c:a aac output.mp4 强制转换指定格式h.265
ffmpeg -i input.mp4 -t 10 output.mp4 提取视频前10s输出新文件
ffmpeg -i input.mp4 -ss 00:00:05 -t 10 output.mp4 提取视频从05s开始往后的10s输出新文件(HH:MM:SS-时分秒)
ffmpeg -i input.mp4 -vn -c:a libmp3lame audio.mp3 提取视频文件中音频输出单独音频文件
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif 视频mp4文件转换为GIF文件-帧率10
ffmpeg -i input.mp4 -r 1 output_%04d.jpg 视频mp4文件中提取图片-图/帧
ffmpeg -framerate 24 -i frame_%04d.jpg -c:v libx264 output.mp4 图片集合成视频
ps:可修改视频分辨率(input.mp4 -s 分辨率 output.mp4),上传后视频分辨率会改变----使用格式工厂转换后的资源分辨率稳定
查看视频分辨率:ffmpeg -i 视频文件名.mp4
仅输出视频原始宽高比:ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 视频文件名.mp4
3、常用参数标注
| 参数 | 说明 | 举例 | 说明 |
|---|---|---|---|
| -i | 输入文件路径 | -i input.mp4 | 当前文件夹存在input.mp4文件 |
| -c:v | 视频编码器 | ibx264 | 设置输出视频编码(h264) |
| -vf | 视频滤镜 | crop=640:360 | 裁剪视频大小为640:360 |
| -c:a | 音频编码器 | aac | 设置输出音频编码格式(aac) |
| -af | 音频滤镜 | afftdn=nf=-20 | 音频降噪-20db |
| -r | 帧率 | -r 30 | 设置输出视频帧率(fps) |
| -b:v | 视频比特率 | -b:v 1M | 设置输出视频比特率(1M) |
| -ss | 开始时间 | -ss 00:00:05 | 从视频第5s开始 |
| -t | 持续时间 | -t 30 | 从开始时间点持续30s截取 |
| -t0 | 结束时间 | -t0 00:00:10 | 截取结束时间点为第10s |
-vf:视频滤镜-可以实现对视频画面的裁剪、缩放、旋转、叠加文字、调整色彩等,位于输入文件之后,输出文件之前,多个滤镜可用,分割
裁剪视频 (Crop) -- crop=out_w:out_h:y:z(y、z为坐标偏移量;out_w:out_h为输出视频宽高)crop=640:360:90:50_从坐标 (90, 50) 开始,裁剪出一个宽 640、高 360 的区域
缩放视频 (Scale) -- scale=w:h(设置宽高比,-1自动调整高度,iw、ih等比例缩放)scale=1280:720_固定;scale=640:-1_高度自适应;scale=iw2:ih2_等比放大2倍
旋转视频 (Rotate/Transpose) 、添加水印或文字 (Drawtext/Overlay)、调整帧率 (FPS)
选择滤镜(select)可用于抽帧:eq(pict_type,I) ——抽取关键帧、eq(n,num) ——抽取指定帧num+1,后面要加-vsync vfr设置为可变帧,防止有出现空白帧
帧率-vf和-r:
-vf对帧率重新采样,对视频要求较高情况下使用,如后期、强制音画同步
-r会出现丢帧或补帧情况,对视频要求不高情况下使用,如gif等
-af:音频滤镜-可以实现对音量调整、降噪、均衡器设置、重采样、声道混合等复杂的音频编辑,位于输入文件之后,输出文件之前,多个滤镜可用,分割
降噪 (Noise Reduction) -- afftdn=nf=-20,数值越小降噪越强,但可能损伤音质
均衡器 (Equalizer) -- equalizer=f=
音量调整 (Volume) -- volume=
loudnorm (响度归一化)、淡入淡出(afade=t=in:ss=0:d=5)、声道合并/分离(pan=stereo|c0=c0|c1=c1)、移除音频(-af换成-an)
恒定速率因子-crf 23
x264编码器的质量控制参数,取值0~51,默认值为23(数值越小,画质越高,文件越大)
音频比特率-b:a 128k设置音频的码率为 xx kbps。128这是一个标准的立体声音频质量,适用于大多数网络播放和存储场景
控制视频量化参数-q:v主要用于调节输出视频的画质与文件大小之间的平衡,取值1~31(数值越低,输出图片画质越清晰)
4、常见问题
执行视频切割时看到 Press [q] to stop, [?] for help 后程序停止
暂时不用着急,等等后续是否会打印
frame=,如果有,说明正在切割视频--可能因为视频较大,处理有延迟(不用急着操作,等待完成就行)
可以在命令后加上 -report输出日志,方便后续定位问题
帮助文档
ffmpeg -h full
更多详情可查看:ffmpeg使用文档。
浙公网安备 33010602011771号