ffmpeg 常用知识点收集
一、基础简介
FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能1,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。
FFmpeg官网:https://www.ffmpeg.org/
Github地址:https://github.com/FFmpeg/FFmpeg
FFmpeg项目由以下几部分组成:
-
FFmpeg
视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件;
-
ffserver
基于HTTP
、RTSP
用于实时广播的多媒体服务器.也支持时间平移;
-
ffplay
用 SDL
和FFmpeg
库开发的一个简单的媒体播放器;
-
libavcodec
一个包含了所有FFmpeg
音视频编解码器的库。为了保证最优性能和高可复用性,大多数编解码器从头开发的;
-
libavformat
一个包含了所有的普通音视格式的解析器和产生器的库。
帧率:帧率(Frame rate)也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。
码率:比特率(Bit rate)(也叫码率,数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中中比特率用bps来表达。
【帧率】
1、用 -r 参数设置帧率
ffmpeg –i input –r fps output
2、用fps filter设置帧率
ffmpeg -i 1.mp4-vf fps=fps=25 11.mp4
例如设置帧率为29.97fps,下面三种方式具有相同的结果:
ffmpeg -i input.avi -r 29.97 output.mp4
ffmpeg -i input.avi -r 30000/1001 output.mp4
ffmpeg -i input.avi -r netsc output.mp4
【码率】设置参数-b
ffmpeg -i 1.mp4 -b 1.5M 2.mp4
音频:-b:a
视频: - b:v
设置视频码率为1500kbps
ffmpeg -i input.avi -b:v 1500k output.mp4
控制输出文件大小
-fs (file size首字母缩写)
ffmpeg -i input.avi -fs 1024K output.mp4
计算输出文件大小:( 视频码率 + 音频码率 ) * 时长 / 8 = 文件大小(K)
二、视频压缩
命令行参数-crf
优先保证画面质量(转码时间可能较长)的情况下,使用-crf参数压缩,取值范围为0~51,其中0为无损模式,数值越大,画质越差,输出文件越小。
参考值:18~28,18被认为是视觉无损的,输出视频质量和输入视频相当。
ffmpeg -i 源文件.mov -c:v libx264 -preset veryslow -crf 18 -c:a copy 目标文件.mp4
意思是:将D盘的源文件src.mov,以 veryslow 的速度重新编码成H.264格式并保存为mp4文件。-preset指定的编码速度越慢,获得的压缩效率就越高。
查看 -preset 取值范围:
ffmpeg -i 源文件.mov -c:v libx264 -preset -tune 目标文件.mp4
-c:a copy 是将音频数据从源文件中以原有编码格式直接拷入目标文件。
-c:v 参数取值查看
三、ffmpeg 视频转ts切片 生成m3u8视频播放列表
1、首先将视频文件转为视频编码h264,音频编码aac格式的mp4文件
使用ffprobe查看文件编码方式
如果音视频编码为h264/aac则执行
ffmpeg -i input.mkv -acodec copy -vcodec copy out.mp4
否则执行
ffmpeg -i input.mkv -acodec libfaac -vcodec libx264 out.mp4
2、将mp4文件转为ts文件并生成m3u8
1. 将mp4转为完整的ts
ffmpeg -i out.mp4 -c copy -bsf h264_mp4toannexb output.ts
2. 将ts切片,并生成m3u8文件
ffmpeg -i output.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 10 output%03d.ts
四、使用ffmpeg对视频进行TS切片
1.ffmpeg切片命令,以H264和AAC的形式对视频进行输出
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls output.m3u8
2.ffmpeg转化成HLS时附带的指令
- -hls_time n: 设置每片的长度,默认值为2。单位为秒
- -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
- -hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
- -hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
3.对ffmpeg切片指令的使用
ffmpeg -i output.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 5 output1.m3u8
原文:https://www.cnblogs.com/fieldtianye/p/13155013.html