• 运营托管
  • 装修设计
  • 摄影拍照
  • 客服外包
  • 全 部 栏 目

    装修设计 运营托管 摄影拍照 营销推广 客服外包 商城入驻 短视频推广 设计素材 电商百科

    抖音快手短视频分屏怎么做?ffmpeg scale过滤器了解下

    引言

    我们每天都在使用的抖音,快手,西瓜视频等APP,里面有为数众多的视频文件。对于这些文件,我们需要考虑各个手机厂商的品牌手机分辨率不同,宽高比不同。而视频发布者所上传的视频文件,格式画质帧频等等各不相同。

    那么为了让用户取得更为优质的体验,就需要对原始音视频文件进行深度处理。

    今天我们来说一说ffmpeg工具内的scale过滤器,很显然从字面上理解,这个是缩放的!

    下面这张是本文所使用的原始图片,分辨率 535x346。

    简单缩放

    如果想要简单地把图片resize为指定的宽高 320x240,可以使用 scale 过滤器的基本用法:

    ffmpeg -i input.avi -vf scale=320:240 output.avi

    用于缩放图片也一样有效:

    ffmpeg -i input.jpg -vf scale=320:240 output_320x240.png

    原始图片经过这么变换后,是这个样子:

    你也看到了,前后宽高比不同,画面出现了拉伸。

    保持宽高比缩放

    如果想要保持宽高比,那么我们需要先手动固定一个元素,比如宽度,或者高度,然后另外一个视情况而定。用下面的写法:

    ffmpeg -i input.jpg -vf scale=320:-1 output_320.png

    上面的指令,先固定宽度=320px,高度则根据情况裁切。保证了图片不变形。最终图片呈现为 320x207 的分辨率。如下:

    一些编码器会要求宽度/高度是n的倍数,那么可以将 -1 指定为需要的值,如下:

    ffmpeg -i input.jpg -vf scale=320:-2 output_320.png

    这样得到的就是一个 320x206 像素的图片。

    使用变量

    ffmpeg 过滤器内置了很多非常有用的变量,我们可以方便地使用,并组装成功能复杂的用法。比如把宽度拉伸2倍:

    ffmpeg -i input.jpg -vf scale=iw*2:ih input_DOU+ble_wIDth.png

    图片处理后长这样:

    如果是宽高都缩放到原始图片的一半,则可以是乘以 0.5 或 除以 2,像下面这样写:

    ffmpeg -i input.jpg -vf "scale=iw*.5:ih*.5" input_half_size.png ffmpeg -i input.jpg -vf "scale=iw/2:ih/2" input_half_size.png

    避免图像放大

    有时缩放图像,但如果尺寸太低,想要避免将其放大,我们可以使用 min 来限定:

    ffmpeg -i input.jpg -vf "scale='min(320,iw)':'min(240,ih)'" input_not_upscaled.png

    上述命令,宽度最多 320 像素,高度最多 240 像素。如果是低于此像素值的,会保持原始值。

    适配固定宽高比的窗口

    我们经常见到在短视频中分屏显示,比如用户喜欢玩的同步动作,需要将视频装进固定的窗口内,要怎么样操作呢?

    这个时候你需要 force_original_aspect_ratio 选项,它提供两个值:

    decrease:输出视频自动减小increase:输出视频自动增大

    下面的指令将原始图片强制装进一个 320x240 的盒子,并保持宽高比缩小比例:

    ffmpeg -i input.jpg -vf scale=w=320:h=240:force_original_aspect_ratio=decrease output_320.png

    输出的图片分辨率 320x207,跟前面贴出的那张一致:

    缩放到矩形区域之后,画面还会有一些空白,我们可以使用 pad 选项填充黑边:

    ffmpeg -i input.jpg -vf "scale=320:240:force_original_aspect_ratio=decrease,pad=320:240:(ow-iw)/2:(oh-ih)/2" output_320_padding.png

    上述指令有几个常量需要注意,这是经常使用的常量:

    iw:输入图片宽度ih:输入图片高度ow:输出图片宽度oh:输出图片高度

    高阶:指定缩放算法

    你可以使用 -sws_flags 选项指定缩放所使用的算法。比如明确指定使用 bilinear 代替默认的 bicubic 算法:

    ffmpeg -i test.tif -vf scale=504:376 -sws_flags bilinear out.bmp

    要同时适用多个算法,那就用 + 号连起来写:

    -sws_flags lanczos+full_chroma_inp

    或者不使用该选项,直接在 scale 过滤器内指定:

    -vf scale=1920x1080:flags=lanczos

    写在最后

    不要着急,一天一个知识点,把每个知识点弄懂,并且熟练掌握,自然水到渠成。

    ffmpeg 功能丰富繁杂,初学者易望而却步,掌握方法循序渐进,才是正道。

    Happy coding :_)

    我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

    上一篇:靠吃饭月入数十万元,为什么“吃播经济”越来越火?
    下一篇:让分享带来收获,要的短视频每次分享都有意义!

    © 2016-2020 巨人电商

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信