《FFmpeg Basics》中文版-06-填充视频

写在前面

如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。

正文

填充视频意味着向视频帧添加额外的区域以包含额外的内容。当输入应在具有不同宽高比的显示器上播放时, 通常需要填充视频。

填充视频基础知识

对于视频填充,我们使用表格中描述的填充过滤器。


描述 在输入视频帧中添加彩色填充,该帧位于协调系统中的[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如果没有指定
《FFmpeg Basics》中文版-06-填充视频_第1张图片

例如,为了在一个svga大小的照片周围创建一个30像素宽的粉红色框架,我们可以使用以下命令:

ffmpeg -i photo.jpg -vf pad=860:660:30:30:pink framed_photo.jpg
《FFmpeg Basics》中文版-06-填充视频_第2张图片
  • 这里面给大家说一下,我自己测试的结果是,我首先用了一张1920*1200大小的图片,一点问题都没有,命令如下:

      ffmpeg -i /Users/zhangfangtao/Desktop/Work/002.jpg -vf pad=1980:1260:30:30:pink /Users/zhangfangtao/Desktop/Work/003.jpg 
    

原来的图片如下图:


《FFmpeg Basics》中文版-06-填充视频_第3张图片
原来的图片

新的图片如下图:


《FFmpeg Basics》中文版-06-填充视频_第4张图片
新的图片

后来我又用了一下一个尺寸是250*250的图片,做实验,结果发现乱码了:
指令如下:

ffmpeg -i /Users/zhangfangtao/Desktop/Work/001.jpg  -vf pad=310:310:30:30:pink /Users/zhangfangtao/Desktop/Work/003.jpg

原图如下:

《FFmpeg Basics》中文版-06-填充视频_第5张图片
001.jpg

生成的图片如下:(虽然你们看到的没花屏,不过在我这儿确实是花的)


《FFmpeg Basics》中文版-06-填充视频_第6张图片
003.jpg

我看到的,其实这是一张图,我上传上去就正常了


《FFmpeg Basics》中文版-06-填充视频_第7张图片
见了鬼的图片。。。。

从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
《FFmpeg Basics》中文版-06-填充视频_第8张图片

从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

*同样是语法错误。。。我测试不了%>_<%

《FFmpeg Basics》中文版-06-填充视频_第9张图片

填充从和到不同的纵横比

描述了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

你可能感兴趣的