探索 FFmpeg Basics 音视频技术(4):调整和伸缩视频

这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 4 篇:FFmpeg  调整和伸缩视频。

—— 来自公众号“关键帧Keyframe”的分享

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

1、调整视频大小

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

ffmpeg -i input_file -s 320x240 output_file

2、预定义的视频帧大小

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

ffmpeg -i input.avi -s 640x480 output.avi
ffmpeg -i input.avi -s vga output.avi
探索 FFmpeg Basics 音视频技术(4):调整和伸缩视频

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×1024sxga显示器
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 音视频技术(4):调整和伸缩视频

3、调整大小时的注意事项 – 奈奎斯特采样定理

视频通常被调整为比来源更小的分辨率,这被称为下采样,主要用于便携式设备和通过互联网流媒体。重要的是要考虑,在较小的尺寸中,一些细节将会丢失,这一事实解释了奈奎斯特 – 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个像素的细节才会可见。(采用的是四舍五入的向下取整的方式)

4、专业的扩大滤波器

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

描述通过像素艺术缩放算法将源帧大小放大2倍,同时不降低锐度。“2xSaI”表示“2倍尺度和插值”。
语法-vf super2xsai

例如,将128×96的手机视频放大到256×192像素的分辨率,可以使用以下命令:

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

5、高级缩放技能

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

视频过滤器:缩放

描述通过更改输出样本宽高比来缩放源,显示宽高比保持不变。
语法scale=width:height[:interl={1
**********宽度和高度参数的变量表示。
iw 或 in_w输入宽度
ih 或 in_h输入高度
ow 或 out_w输出宽度
oh 或 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滤镜的优点在于,对于框架设置,可以使用上面表中描述的其他参数。

6、按比例缩放视频输入

如果不知道输入帧的大小,可以使用scale滤镜的ih和iw参数相应地改变其分辨率。例如,要创建一个半尺寸的视频,可以使用以下命令:

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

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

7、扩展到预定义的宽度或高度

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

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

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

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

音视频方向学习、求职,欢迎加入我们的星球

丰富的音视频知识、面试题、技术方案干货分享,还可以进行面试辅导

探索 FFmpeg Basics 音视频技术(4):调整和伸缩视频

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论