1 固定码率因子crf(Constant Rate Factor)
固定码率因子(CRF)是 x264 和 x265 编码器的默认质量(和码率控制)设置。取值范围是 0 到 51,这其中越低的值,结果质量越好,同时输出文件越大,越高的值意味着越高的压缩比,但可能会在值大到某个点的时候注意到明显的质量损失。
- 对 x264,一般取值在 18 到 28 之间,默认值是 23。
- 对 x265,默认CRF值是 28
CRF数值 +6 会使文件大小减半,为了达到最优编码效果,主要在离线文件存储中使用CRF编码如下:
命令行使用示例如下:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
2 指定编码速度preset
指定的编码速度越慢,获得的压缩效率就越高,取值范围如下:
ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
- placebo与veryslow相比提高了1%,以极高的编码时间为代价
- veryslow与 slower相比提升了3%
- slower与slow相比提升了5%
- slow 与 medium相比提升了5%~10%
3 视频帧率
3.1 输入帧率
帧率(frame per second)就是视频每秒播放的图片的帧数。帧率至少要达到15fps,人眼才能才能看到连贯的动作。15fps即1秒刷新15次。帧率主要分为两类,一种是交错的(interlaced 缩写为i),一种是步进的(progressive 缩写为p)。
- 交错帧率(interlaced 缩写为i)一般应用在电视节目上。NTSC(美国电视标准)使用60i的帧率,也就是每秒60个交错场(也就是30帧,两个交错场就是一帧)。PAL和SECAM标准使用50i的帧率,也就是每秒25帧。
- 步进帧率(progressive 缩写为p)通常使用在电影节目上,常使用的值包括24p、25p、30p。最近一些高清的电影电视终端节目上30p已经无法满足需求,最新使用的帧率通常为50p和60p。
常见帧率的使用场景说明如下表所示:
帧率 | 描述 |
24p/23.976p | 电影行业从1920年引入的标准帧率,在早期电影节目上使用的比较频繁。 NTSC采用该帧率的时候将帧率降到了23.976,PAL/SECAM采用该帧率的时候将帧率升到了25fps |
25p | 使用50HZ电子频率国家中的电视电影节目的标准帧率,因为25p的帧率很容易转换成50i的帧率 |
30p | 数码相机和摄像机的帧率,30p的帧率很容易转换成60i用于电视直播 |
50i | PAL和SECAM电视标准的标准帧率 |
60i/59.94 | NTSC标准中的标准帧率 |
50p/60p | 高清电视(HDTV)常用的帧率 |
48p | 新提出的帧率 |
72p | 新提出的帧率 |
120p | 超高清电视节目(UHDTV)使用的帧率 |
ffmpeg -i input.mp4
输出的帧率fps如下:
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 19999 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 120k tbc (default)
3.2 输出帧率
在设置输出视频的帧率时,需要使用-r选项。以下是使用-r项设置输出视频帧率为30 fps的示例命令:
ffmpeg -i input.mp4 -r 30 output.mp4
使用-r选项将输出视频的帧率设置为30 fps。输出视频的文件名为output.mp4。
通过代码使用Python的subprocess模块调用ffmpeg设置输出视频帧率
import subprocess
input_file = 'input.mp4'
output_file = 'output.mp4'
frame_rate = 30
command = ['ffmpeg', '-i', input_file, '-r', str(frame_rate), output_file]
subprocess.run(command)
4 输出分辨率
将input.mp4更改为分辨率320*240的视频输出,命令示例:
ffmpeg -i input.mp4 -s 320x240 output.mp4
分辨率 | Bitrate | 10分钟的视频 |
---|---|---|
320p 320×240 | 180 kbit/s | ~13 MB |
360p 640×360 | 300 kbit/s | ~22 MB |
480p 864×480 | 500 kbit/s | ~37 MB |
576p 720x576 | 850 kbit/s | ~63 MB |
720p 960×720 | 1000 kbit/s | ~75 MB |
5 视频文件转gif图像
-ss | 开始截图时间(秒) | 截图开始时间越接近篇尾,所花费的时间就越长。 |
-t | 截图时长(秒) | 省略-ss和-t转换整个视频文件。 |
-i | 输入文件 | |
-y | 覆盖旧文件 | |
-s | gif图片的宽和高 | |
-f | 生成图片格式 | 可以省略,按扩展名转换 |
-r | 帧率 | 视频文件中每一秒的帧数 |
命令示例:
ffmpeg -ss 5 -t 10 -i input.mp4 -y -s 640x480 -f gif -r 1 output.gif
6 用图片制作视频和gif
将test-001.jpg,test-002.jpg…顺序排列的图片文件转换为视频和gif。
ffmpeg -f image2 -r 1 -i test-%03d.jpg -y output.mp4
ffmpeg -f image2 -r 1 -i test-%03d.jpg -y output.gif