使用的版本4.3.1
FFmpeg 是一个开放源代码的自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。 “FFmpeg”这个单词中的“FF”指的是“Fast Forward”。
FFmpeg的封装模块AVFormat
FFmpeg的编解码模块AVCodec
FFmpeg的滤镜模块AVFIlter
FFmpeg的视频图像转换计算模块swscale
FFmpeg的音频转换计算模块swresample
编解码工具ffmpeg
播放器 ffplay
多媒体分析器ffprobe
FFmpeg 常用的命令行参数如下。
-c:指定编码器
-c copy:直接复制,不经过重新编码(这样比较快)
-c:v:指定视频编码器
-c:a:指定音频编码器
-i:指定输入文件
-an:去除音频流
-vn: 去除视频流
-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y:不经过确认,输出时直接覆盖同名文件。
ffmpeg -encoders 可以查看ffmpeg是否支持H.264编码器
MP4视频文件封装格式是基于QuickTime容器格式定义的,因此参考QuickTime的格式定义对理解MP4文件格式很有帮助。MP4文件格式是一个十分开放的容器,几乎可以用来描述所有的媒体结构,MP4文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。同时,MP4也支持流媒体。MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。MP4格式的官方文件后缀名是“.mp4”,还有其他的以mp4为基础进行的扩展或者是缩水版本的格式,包括:M4V, 3GP, F4V等。
MP4文件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4文件由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。box中可以包含另一个box,这种box称为container box。一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息;之后会有且只有一个“moov”类型的box(Movie Box),它是一种container box,子box包含了媒体的metadata信息;MP4文件的媒体数据包含在“mdat”类型的box(Midia Data Box)中,该类型的box也是container box,可以有多个,也可以没有(当媒体数据全部引用其他文件时),媒体数据的结构由metadata进行描述。
FFmpeg 抽取音视频文件中的 AAC 音频流
ffmpeg -i input.mp4 -vn -acodec copy output.aac
FFmpeg 抽取音视频文件中的 H.264 视频流
ffmpeg -i input.mp4 -vcodec copy -an output.h264
-vcodec copy 保持原样不动
#例子
#-b:v 是视频比特率
ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4
ffmpeg -i input.mp4 -vcodec libx264 -preset medium -b:v 2000k output.mp4
2.编码优化参数tune
可以包含几个场景film,animation,grain,stilllimage,psnr,ssim,fastdecode,zerolatency
具体区别待整理
在使用FFmpeg与H。264直播编码并推流时,只用tune参数的zerolatency将会提升效率,因为其降低了编码导致的时延。
3.H.264的profile与level设置
profile包含
Baseline,Extented,Main,High,High10,High422,High444
4.控制场景切换关键帧插入参数sc_threshold
5.设置x264内部参数x264opts
6.CBR恒定码率设置参数nal-hrd
我的文件夹拥有的内容
推荐视频学习链接
https://www.bilibili.com/video/BV1Ft411s7Xa?p=9
ffmpeg -i teat.mp4 -i kuaishou.jpg -filter_complex "[1:v]scale=176:144[logo];[0:v][logo]overlay=x=20:y=20" res.mp4
结果
关于上面-filter_complex的理解我找了一篇博客
https://www.jianshu.com/p/b30f07055e2e
ffmpeg -re -i test.mp4 -vf "movie=test2.mp4,scale=480:320[test]; [in][test]overlay [out]" -vcodec libx264 output.mp4
结果
ffmpeg -i test.mp4 -ss 5 -vframes 1 res2.jpg
ffmpeg -i test3.mp4 -ss 5 -to 8 -s 320:640 -r 15 res.gif
ffmpeg -i img.jpg -vf "movie=res2.jpg,scale=250:250[logo];[in][logo]overlay[out]" res5.jpg
ffprobe [OPTIONS] [INPUT_FILE]
官网 https://ffmpeg.org/ffprobe.html#toc-Stream-specifiers-1
官网关于这个的介绍很详细,有需要的话,我以后再将博客中的内容更新的更细致
-show_format 显示输入多媒体流的容器格式信息
-show_streams 显示输入多媒体流中每一个流的信息
-i input_file 指定输入文件
-print_format json json 形式输出
-of 或者 -print_format default/compact/csv/flat/ini/json/xml
命令
./ffprobe -print_format json -show_format -show_streams -i ./video/c.ts
-print_format json 以 json 格式输出 ,
-show_format 输出封装格式信息 ,
-show_streams 输出流信息,
-i ./video/c.ts 输入文件