6.填充视频
填充视频意味着向视频帧添加额外的区域以包含额外的内容。当输入应在具有不同宽高比的显示器上播放时, 通常需要填充视频。
填充视频基础知识
对于视频填充,我们使用表格中描述的填充过滤器。
描述 | 在输入视频帧中添加彩色填充,该帧位于协调系统中的[x,y]点,其中输出帧的左上角是[0,0]。 输出的大小由宽度和高度参数设置。 |
---|---|
语法 | pad=width[:height[:x[:y[:color]]]] 中括号里面的参数都是可选的 |
* | 参数的描述 |
color | 十六进制形式的RGB颜色值:0xRRGGBB [@AA],其中AA的范围是(0,1)中的十进制值或任何有效的颜色名称,如白色,蓝色,黄色等,默认值为黑色,请参见颜色有关详细信息,请参阅FFmpeg基本介绍章节中的名称部分 |
width, height | 带填充的输出帧的宽度和高度,宽度的值可以从高度导出,反之亦然,两个参数的默认值都是0 |
x, y | 输入左上角的坐标(偏移量)与输出帧的左上角有关,两个参数的默认值均为0 |
* | 参数的高度,宽度,x, y的表达式的可用变量 |
a | 纵横比,与iw/ih相同 |
dar | 输入显示宽比,与*sar相同 |
hsub, vsub | 水平和垂直的色度子样本值,对于像素格式yuv422p, hsub的值为2,vsub为1 |
in_h, ih | 输入的高度 |
in_w, iw | 输入的宽度 |
n | 输入框的数目,从0开始 |
out_h, oh | 输出高度,默认值=高度 |
out_w, ow | 输出宽度,默认值=宽度 |
pos | 位置在输入框的文件中,如果不知道NAN |
sar | 输入样本比例 |
t | 时间戳以秒表示,如果输入时间戳未知 |
x, y | x和y的偏移量由x和y表示,或者NAN如果没有指定 |
例如,为了在一个svga大小的照片周围创建一个30像素宽的粉红色框架,我们可以使用以下命令:
ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink framed_photo.jpg
- 这里面给大家说一下,我自己测试的结果是,我首先用了一张1920*1200大小的图片,一点问题都没有,命令如下:
ffmpeg -i /Users/zhangfangtao/Desktop/Work/002.jpg -vf pad=1980:1260:30:30:pink /Users/zhangfangtao/Desktop/Work/003.jpg
原来的图片如下图:
![](https://upload-images.jianshu.io/upload_images/661949-725178a42d28706d.jpg“ data-original-width=”1920” data-original-height=”1200” data-original-format=”image/jpeg” data-original-filesize=”352552”/>
原来的图片
新的图片如下图:
![](https://upload-images.jianshu.io/upload_images/661949-91a248e2d6936272.jpg“ data-original-width=”1980” data-original-height=”1260” data-original-format=”image/jpeg” data-original-filesize=”42596”/>
新的图片
后来我又用了一下一个尺寸是250*250的图片,做实验,结果发现乱码了:
指令如下:
ffmpeg -i /Users/zhangfangtao/Desktop/Work/001.jpg -vf pad=310:310:30:30:pink /Users/zhangfangtao/Desktop/Work/003.jpg
原图如下:
![](https://upload-images.jianshu.io/upload_images/661949-3fb16628ff7c8dbc.jpg“ data-original-width=”250” data-original-height=”250” data-original-format=”image/jpeg” data-original-filesize=”15670”/>
001.jpg
生成的图片如下:(虽然你们看到的没花屏,不过在我这儿确实是花的)
![](https://upload-images.jianshu.io/upload_images/661949-c33a7b6505322296.jpg“ data-original-width=”310” data-original-height=”310” data-original-format=”image/jpeg” data-original-filesize=”4359”/>
003.jpg
我看到的,其实这是一张图,我上传上去就正常了
见了鬼的图片。。。。
从4:3到16:9的填充视频
有些设备只能以16:9的宽高比播放视频,而4:3宽高比的视频必须在两种尺寸的水平方向上进行填充。 在这种情况下,高度保持不变,宽度等于高度值乘以16/9。 x值(输入视频帧水平偏移量)从表达式(output_width - input_width)/ 2开始计数,因此填充的语法为:
ffmpeg -i input -vf pad=ih*16/9:ih:(ow-iw)/2:0:color output
例如,不知道电影的确切分辨率。mpg文件有4:3的长宽比,我们可以在默认的黑色中添加所谓的“pillarbox”命令:
ffmpeg -i film.mpg -vf pad=ih*16/9:ih:(ow-iw)/2:0 film_wide.avi
从16:9到4:3的填充视频
为了显示在4:3高宽比的显示中所创建的视频,我们应该垂直地填充两个大小的输入。因此,宽度保持不变,高度为宽* 3/4。y值(输入视频帧垂直偏移)是从表达式(output_height - input_height)/2中计算的,填充的语法为:
ffmpeg -i input -vf pad=iw:iw*3/4:0:(oh-ih)/2:color output
- 为啥我自己测试的时候都是失败的呢%>_<%。。。
语法错误
例如,如果不知道输入文件的确切分辨率,我们可以在hd_video中添加默认为黑色的“letterbox”。avi文件在16/9宽比与命令:
ffmpeg -i hd_video.avi -vf pad=iw:iw*3/4:0:(oh-ih)/2 video.avi
*同样是语法错误。。。我测试不了%>_<%
填充从和到不同的纵横比
描述了4:3和16:9的填充率是最常见的,但例如,电视广告在14:9的长宽比中创建,一些电影的比例比16/9大。
Pillarboxing - adding boxes horizontally
为了调整较小的宽高宽比,我们需要增加输出宽度,它的值将是高度值乘以一个新的纵横比(ar)。通用公式是:
ffmpeg -i input -vf pad=ih*ar:ih:(ow-iw)/2:0:color output
Letterboxing - adding boxes vertically
为了调整更大的宽高宽比,我们需要增加输出高度,它的值将是宽度值除以新的纵横比(ar)。通用公式是:
ffmpeg -i input -vf pad=iw:iw*ar:0:(oh-ih)/2:color output