《FFmpeg Basics》中文版-04-调整和伸缩视频

写在前面

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

正文

在FFmpeg中调整视频的大小意味着可以通过一个选项改变其宽度和高度,而缩放则意味着使用一个具有高级功能的scale filter来改变帧的大小。

调整视频

输出视频的宽度和高度可以在输出文件名之前设置-s选项。视频分辨率以wxh格式输入,其中w为像素宽度,h为像素高度。例如,要将初始分辨率的输入调整为320×240,我们可以使用以下命令:

 ffmpeg -i input_file -s 320x240 output_file

给大家看看我的测试命令行:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -s 320x480 /Users/zhangfangtao/Desktop/newtest.mp4 

原来的视频信息如下图:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

重新编码之后如下图:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

确实发生了改变。

预定义的视频帧大小

FFmpeg工具没有输入视频宽度和高度的精确数字,而是提供了在下一页的表中列出的预定义视频大小。下面两个命令的结果相同:

ffmpeg -i input.avi -s 640x480 output.avi
ffmpeg -i input.avi -s vga output.avi

输入vga参数之后显示的如下图:(确实是640:480)

《《FFmpeg Basics》中文版-04-调整和伸缩视频》
《《FFmpeg Basics》中文版-04-调整和伸缩视频》
《《FFmpeg Basics》中文版-04-调整和伸缩视频》

FFmpeg中视频大小的缩写

大小缩写典型用法
128×96sqcif手机
160×120qqvga手机
176×144qcif手机
320×200cga旧的CRT显示器
320×240qvga手机、摄像头
352×288cif手机
640×350ega旧的CRT显示器
640×480vga显示器,摄像头
704×5764cif官方数字视频大小的电视。
800×600svga显示器
852×480hd480, wvga摄像机
1024×768xga显示器,摄像头
1280×720hd720高清电视,摄像机
1280 x1024sxga显示器
1366×768wxga显示器
1408×115216cif设备使用CIF
1600×1024wsxga显示器
1600×1200uxga显示器,摄像机
1920×1080hd1080高清电视,摄像机
1920×1200wuxga宽屏显示器
2048×1536qxga显示器
2560×1600woxga显示器
2560×2048qsxga显示器
3200×2048wqsxga显示器
3840×2400wquxga显示器
5120×4096hsxga显示,显微镜相机
6400×4096whsxga显示器
7680×4800whuxga显示器

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

调整大小时的注意事项-奈奎斯特采样定理。

视频通常被调整为比来源更小的分辨率,这被称为下采样,主要用于便携式设备,通过互联网流媒体等。重要的是要考虑,在较小的尺寸中,一些细节将会丢失,这一事实解释了奈奎斯特 -Shannon采样定理。 它的一般形式与任何信号有关,并告知为了完全重构采样信号,我们必须使用比信源频率高至少2倍的频率。 这意味着要将小细节保留在缩小的视频中,它们的原始尺寸必须高于缩放比例除以2。

例如,800×600(SVGA)分辨率的视频包含2像素宽的细节。 当缩放到640×480(VGA)分辨率时,缩放比率为0.8,并且2像素再缩放为2像素:

640 pixels / 800 pixels = 0.8
2 pixels * 0.8 = 1.6 ≈ 2 pixels

但是当这个视频被缩放到160×120 (QQVGA)分辨率时,细节就丢失了:

160 pixels / 800 pixels = 0.2
2 pixels * 0.2 = 0.4 ≈ 0 pixels

这意味着在向下采样后,可见的只有输入大小至少3个像素的细节。(采用的是四舍五入的向下取整的方式)

专业的扩大滤波器

将视频调整为更大的帧大小比较少见,因为该功能几乎可以提供所有媒体播放器,但由此产生的图像有时并不清晰,特别是当源解析度非常小时。 用于平滑放大的源的特殊滤波器是super2xsai滤波器:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》 视频过滤器:super2xsai

视频过滤器:super2xsai

描述在不减少锐度的情况下,使用像素艺术缩放算法放大源帧的大小2倍。“2xSaI”的意思是“2倍尺度和插值”。
Syntax-vf super2xsai

例如,将128×96视频从移动电话放大到分辨率256×192像素,可以使用下一个命令:

 ffmpeg -i phone_video.3gp -vf super2xsai output.mp4

给大家看一下我的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf super2xsai /Users/zhangfangtao/Desktop/newTest.mp4 

原始的视频信息如下图:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

重新编码之后的视频信息:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

高级缩放技能

当使用-s选项更改视频帧大小时,会在相关滤镜图片的末尾插入缩放视频滤镜。 要管理缩放过程开始的位置,可以直接使用缩放过滤器。

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

视频过滤器:缩放

描述通过更改输出样本宽高比来缩放源,显示宽高比保持不变。
语法scale=width:height[:interl={1|-1}]
**********变量表示宽度和高度参数。
iw or in_w输入的宽度
ih or in_h输入的高度
ow or out_w输出的宽度
oh or out_h输出的高度
a纵横比,与iw/ih相同。
sar输入样本纵横比,与dar/a相同。
dar输入显示纵横比,与*sar相同。
hsub水平色度子样本值,为yuv422p像素格式为2。
vsub垂直色度子样本值,为yuv422p像素格式为1。
**********可选的interl参数的可用值。
1应用交错感知扩展。
-1如果源被标记为交错的,应用是交错的意识扩展。

例如,下面两个命令的结果相同:

ffmpeg -i input.mpg -s 320x240 output.mp4
ffmpeg -i input.mpg -vf scale=320:240 output.mp4

scale filter的优点是,对于框架设置,可以使用上面表中描述的其他参数。

按比例缩放视频输入

如果不知道输入框的大小,可以使用scale filter的ih和iw参数相应地改变其分辨率,例如创建一个半大小的视频,我们可以使用下一个命令:

ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4

我的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=iw/2:ih/2 /Users/zhangfangtao/Desktop/newTest.mp4 

转换之前的视频信息:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

转换之后的视频信息:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

90%大小的视频命令:

ffmpeg -i input.mpg -vf scale=iw*0.9:ih*0.9 output.mp4

这个就不需要测试了吧。

用黄金比例缩放输入值= 1.61803398874989484820…用PHI来表示这个数值:

ffmpeg -i input.mpg -vf scale=iw/PHI:ih/PHI output.mp4

扩展到预定义的宽度或高度。

当输出视频应该有一定的宽度或一定的高度时,输入视频的大小和纵横比都是未知的,第二个维度可以通过一个方面参数来指定,比如下面的例子。要将输出宽度设置为400像素,高度按比例设置,我们可以使用以下命令:

ffmpeg -i input.avi -vf scale=400:400/a

我的测试指令:宽度确实成为了400.高度是等比缩放的,300

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=400:400/a /Users/zhangfangtao/Desktop/newTest.mp4 

输出文件的视频信息:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

若要将输出高度更改为300像素,宽度按比例改变,命令可以是:(注意到了么,如果需要指定高度,需要用*,不是/,我试了一下,貌似用除号不行,因为那个参数a意思是纵横比,下面我有说明)

ffmpeg -i input.avi -vf scale=300*a:300

看看我的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=300*a:300 /Users/zhangfangtao/Desktop/newTest.mp4 

输出视频信息:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

如果指令里面这样写:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=300/a:300 /Users/zhangfangtao/Desktop/newTest.mp4

会报下面的错误:

《《FFmpeg Basics》中文版-04-调整和伸缩视频》

    原文作者:张芳涛
    原文地址: https://www.jianshu.com/p/64b017e08ca8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞