- Bit Rate, Frame Rate 和 File Size
- Resizing and Scaling Video
- Cropping Video
- Padding Video
- Filpping and Rotating Video
- Blur Sharpen adn Other Denoising
- Overlay - Picture in Picture
- Adding Text on Video
- Conversion Between Formats
FFmpeg Basics —Multimedia handling with a fast audio and video encoder 是 FFmpeg 官网提供的一本对 FFmpeg 使用的介绍手册。本文就是对读此手册时的简单记录。方便了解 FFmpeg 的作用。
Bit Rate, Frame Rate 和 File Size
Frame Rate 是一秒钟播放的 frame 的个数,又可以分为 interlaced 和 progressive 两种, Interlaced Frame 主要用于 TV,如 NTSC 标准使用 60i fps ,即 60 interlaced fields(30 frames)每秒。
Frame rate 设置使用 -r 选项: ffmpeg -i input -r fps output
1
|
|
除此之外,也可用 fps filter 设置 frame rate。
1
|
|
Bit Rate 是单位时间内可以处理的 bits 数,可分为 ABR(Average bit rate)
CBR(Constant bit rate)
VBR(Variable bit rate)
。
Bit Rate 设置使用 -b 选项:ffmpeg -i input -b bitrates output
针对 video 和 audio 的不同,又可使用 -b:v
和 -b:a
。
1 2 |
|
CBR 的设置需要同时设置 bitrate、minimal rate 和 maximal rate 为相同的值,设置 maxrate的同时需要设置 bufsize 选项。
1
|
|
File Size 是由 Video Size 和 Audio Size 两者之和组成的。
1 2 3 |
|
也可设置输出文件的最大值,设置选项为 -fs(file size) :
1
|
|
Resizing and Scaling Video
Resizing 是指改变宽高,Scaling 是利用 scale filter 改变 frame size。
Resizing Video : 利用 -s
选项指定输出视频的宽高,格式为wxh
,其中 w 是以 pixel 为单位的宽, h 是以 pixel 为单位的高。例如:
1
|
|
此外,FFmpeg 针对不同的宽高信息,提供了预定义的视频大小简写,下面两个命令的作用相同,都是将 input_file 转换为 640*480 的输出文件:
1 2 |
|
通常情况下,做 resize 是从big frame -> small frame
,反过来的话,可能导致图片不清晰,尤其是当原始视频的 resolution 比较小的时候。针对 small frame -> big frame
,有专门的特殊 filter(super2xsai
) 可以使用,它可以使原视频文件变大两倍。2xsai 即指 2 times scale and interpolate, syntax 是 -vf super2xsai
。
例如把 128x96 的 phone_video.3gp 文件转换为 256x192 的视频文件。
1
|
|
Scaling Video : 当使用-s
选项来改变 frame size 时,其实在 filtergraph 的最后有一个 scale filter。scale filter也可以通过设置来固定在某个位置。
scale 可以改变输出视频的 sample aspect ration,同时 display aspect ration 保持不变。
syntax 是 scale=width:height[:interl={l|-l}]
。其中 width 和 height 可以是 iw/in_w/ih/in_h/ow/out_w/oh/out_h等。
下面两个 command 执行效果相同:
1 2 |
|
如果不知道源视频的 resolution,又需要做 scale,可以用下面的方法:
1 2 3 |
|
Cropping Video
Cropping Video 是指截取源视频中的某个矩形区域作为输出视频显示。通常它会与 Resizing/Padding 等共同配合使用。
旧版 FFmpeg 中会使用 cropbottom/cropleft/cropright/croptop 等选项,现在的版本中废弃了这种使用方式,改用crop filter
的方式来实现Cropping Video。
syntax 是crop=ow[:oh[:x[:y[:keep_aspect]]]]
,其中 ow=out_w oh=out_h
。示例如下:
1 2 |
|
如果x和y没有专门给出,会有默认值计算:
1 2 |
|
1 2 |
|
Padding Video
对于 Padding Video ,使用 pad filter 来实现。
syntax 是pad=width[:height[:x[:y[:color]]]]
,其中的 color 表示 padding 的颜色。
1
|
|
Padding videos from 4:3 to 16:9
1 2 |
|
Padding videos from 16:9 to 4:3
1 2 |
|
Padding from and to various aspect ratios
1 2 |
|