一、FFmpeg简介
FFmpeg是一款自由软件,核心功能就是音视频编解码,其中的“FF”指的是“Fast Forward(快速前进)。FFmpeg作为MPlayer姊妹项目,在2000年由法布里斯·贝拉发起的。FFmpeg强大的编解码功能使得它应用广泛:
1、FFMPEG作为内核视频播放器:
Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音...
2、FFMPEG作为内核的Directshow Filter:
ffdshow,lav filters...
3、FFMPEG作为内核的转码工具:
ffmpeg,格式工厂...
二、FFmpeg函数库
FFmpeg官网 :下载源码编译。
FFmpeg编译版本:该网站中的FFMPEG分为3个版本:Static,Shared,Dev。前两个版本可以直接在命令行中使用,他们的区别在于:Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。Shared里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。Shared里面的exe体积很小,他们在运行的时候,到相应的Dll中调用功能。
Dev版本是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。
1、avcodec:编解码库
2、avformat:格式封装
3、avfilter:滤镜特效处理
4、avdevice:各种设备的输入输出
5、avutil:公共库
6、postproc:后处理
7、swresample:音频采样数据格式转换
8、swscale:视频像素数据格式转换
【温馨提示1:其他版本下载】
【温馨提示2:h264、h265源码下载】
h264源码下载
h265源码下载
三、FFmpeg用例
- 编码
//有损压缩
ffmpeg -s 1920x1080 -i input.yuv output.h265
//无损压缩:lossless=1
ffmpeg -s 1920x1080 -pix_fmt yuv420p -r 30 -i input_1920x1080_30.yuv -c:v libx265 -preset ultrafast -x265-params lossless=1 output_1920x1080_30.mp4
- 解码
ffmpeg -i input.mp4 -vsync 0 -y output.yuv
- 转码
ffmpeg -i input.mp4 output.avi
- 解封装
ffmpeg -i example.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 example.h264
- 降采样
ffmpeg -s 1920x1080 -i input_1920x1080.yuv -vf scale=480:270:flags=lanczos,setsar=1:1 output_480x270.yuv -hide_banner
- 抽样
//从30fps抽样为10fps
ffmpeg -r 30 -i input_30.mp4 -c:v libx264 -x264-params qp=0 -r 10 output_10.mp4
- 截取
//yuv按帧数截取:-ss 0 -t 60
ffmpeg -r 1 -s 1280x720 -i input.yuv -ss 0 -t 60 output_60.yuv
//mp4按帧数截取:
ffmpeg -i input.mp4 -vf "select=between(n\,0\,59)" -y -acodec copy ./output.mp4
-
裁剪
ffmpeg -i input.mp4 -vsync 0 -vf crop=1920:1080:0:0 output.yuv
-
缩放
ffmpeg -s:v 1920x1080 -i example.yuv -vf scale=320:240 -c:v rawvideo -pix_fmt yuv420p example.yuv
-
加标签:
ffmpeg -s 1920x1080 -pix_fmt yuv420p -i example.yuv -vf “pad=1920:1200:0:120:white,drawtext=fontfile=arial.ttf:fontsize=130:fontcolor=black:borderw=1:start_number=100:text=‘%{n}’:x=12:y=12” -an -vcodec libx264 -preset veryslow -x264-params crf=12:bframes=0:rc-lookahead=64 example.mp4
-
反转
ffmpeg -i example.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4
-
逆序播放
ffmpeg -i input.mp4 -vf reverse reversed.mp4
-
空域拼接
ffmpeg -i exam1.mp4 -i exam2.mp4 -i exam3.mp4 -lavfi hstack=inputs=3 output.mp4
-
时域拼接
1、转码TS
ffmpeg -i exam1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb exam1.ts
2、串联TS:
ffmpeg -i “concat:exam1.ts|exam2.ts” -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
3、解码:
ffmpeg -i output.mp4 -c:v rawvideo -pix_fmt yuv420p output.yuv
-
播放视频
ffplay test.avi
- 查看文件格式
查看帧信息
key_frame:是否是关键帧
pict_type:帧类型(I、B、P)
//TO DO
ffprobe -show_frames -select_streams v -of xml test15.mp4 >videoframes.info
- 从MP4中提取视频流到h265文件
ffmpeg -i input.mp4 -codec copy -bsf: hevc_mp4toannexb -f hevc out.h265
-i input.mp4: 是输入的MP4文件
-codec copy: 从mp4中拷贝
-bsf: hevc_mp4toannexb: 从mp4拷贝到annexB封装
-f hevc: 采用hevc格式
out.h265: 输出的文件
更多命令
更多命令
参数详解
四、相关链接
- FFmpeg官网
- ffmpeg已编译版本
- API文档
- WIKI
- h264源码
- h265源码
- 错误集锦
- 逆序播放-视频拼接
- 雷神博客
- ffmpeg论坛
- 罗索实验室