探索 FFmpeg Basics 音视频技术(15): 图像处理

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

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

虽然FFmpeg工具的主要用途与音频和视频有关,但ffmpeg可以对各种图像格式进行解码和编码,并且许多图像相关任务可以快速完成。 在网络服务器上使用ffmpeg可创建Web图像编辑器,支持FFmpeg的网络主机相信信息位于 Web视频 一章。

1、支持的图像格式

表格中列出了FFmpeg支持的图像格式及其特征后缀。 除LJPEG(无损JPEG)以外的所有这些文件类型都可以解码,除EXR,PIC和PTX之外都可以编码。

FFmpeg支持的图像格式

扩展名编码解码描述
.Y.U.VXX每个组件的一行文件
BMPXX微软BMP图像
DPXXX数码照片交换
EXRXOpenEXR
GIFXX动画gif是未压缩的
JPGXX不支持渐进式JPEG
JP2XXJPEG 2000
JLSXXJPEG-LS
LJPGX无损的JPEG
PAMXXPAM是带有alpha支持的PNM扩展
PBMXX便携式位图图像
PCXXXPC画笔
PGMXX便携式GrayMap形象
PGMYUVXXPGM与U和V的分量在YUV 4:2 0
PICXPictor/PC Paint
PNGXX便携式网络图形
PPMXX便携式PixelMap形象
PTXXV.Flash PTX格式
SGIXXSGI RGB图像格式
RASXXSun Rasterfile图像格式
TIFFXXYUV, JPEG和一些扩展还没有被支持
TGAXXTruevision Targa 图像格式
XBMXXX位图图像格式
XFaceXXXFace图像格式
XWDXXX窗口转储图像格式

2、创建图像

为了将一个视频帧从指定的时刻保存到图像中,使用-ss(从start开始)选项来指定从开始的延迟。在时间t中截图的语法

ffmpeg -i input -ss t image.type

-ss选项也可以在输入文件之前使用,但结果不太准确。例如,从文件视频中截取1小时23分45秒的截图。avi,我们可以使用命令:

 ffmpeg -i videoclip.avi -ss 01:23:45 image.jpg

3、从视频动画gif

视频文件是从可以保存到GIF动画帧的帧中创建的,这是一种经常在web上以条幅和动画形式使用的图像类型。因为帧是没有压缩的,所以只有在较短的视频中才有用,否则GIF动画文件的文件大小就会非常大。例如,要将一个短的SWF文件转换为GIF动画,以便为没有Flash插件的用户创建一个替代文件,我们可以使用该命令(必须将像素格式设置为rgb24):

ffmpeg -i promotion.swf -pix_fmt rgb24 promotion.gif

4、来自FFmpeg视频源的图像

另一个创建图像的选项是使用内置的视频源,在表中描述:

探索 FFmpeg Basics 音视频技术(15): 图像处理

mptestsrc视频源的默认分辨率为512×512像素,其他列出的源分辨率为320×240像素。最通用的是能够生成任何颜色和任何大小的图像的彩色图像源,例如为一个标题大小的728×90像素创建一个teal背景,我们可以使用这个命令。

ffmpeg -f lavfi -i color=c=#008080:s=728x90 leaderboard.jpg
描述提供一种颜色为320×240的矩形,并带有指定的颜色
语法color[=c=clr[:d=time[:r=fps[:sar=value[:s=resolution]]]]]
所有参数都是可选的
斜体中的项目将被替换为实际值
参数描述
color, c源的颜色、颜色的名称(不区分大小写的匹配)或0xRRGGBB[AA]序列,可能后跟一个alpha说明符,默认值为黑色
duration, d源视频的持续时间,被接受的句法是:[-]HH[:]]]或[-]S +[m…],如果未指定,或表示持续时间为负,则视频将永远生成
rate, r源视频的帧速率,每秒生成的帧数,它可以是format frame_rate_factor / frame_rate_denumator,一个整数或浮点数,或者一个有效的视频帧率缩写,默认值是25
sar样本纵横比的源视频
size, s源视频的大小、窗体宽度的字符串或相应的缩写,默认值为320×240

5、视频转换为图像

视频文件是由可以通过一个命令保存到图像文件的帧组成的,结果图像的数量是视频帧速率的产物,它的持续时间为秒。例如,如果剪辑。avi文件的持续时间为1分钟,帧率为25 fps,下面的命令将产生60×25=1500张图片,每秒25张:

ffmpeg -i clip.avi frame%d.jpg

输出目录将包含1500个文件,名为frame1.jpg、frame2.jpg等。为了保持所有文件名的长度相同,我们在%符号后指定附加数字的数目:

ffmpeg -i clip.avi frame%4d.jpg

现在该目录包含名为frame0001.jpg、frame0002.jpg的文件…,frame1500.jpg。

6、调整大小,裁剪和填充图像

图像可以以类似视频的方式调整大小,例如,彩色视频源的输出分辨率为320×240像素,可以通过两种方式放大到VGA分辨率:

  • 使用彩色视频源的s或大小参数。
  • 使用 -s选项来输出

例如,接下来的两个命令具有相同的结果,CIF(352×288)大小的橙色矩形:

ffmpeg -f lavfi -i color=c=orange:s=cif orange_rect1.png
ffmpeg -f lavfi -i color=c=orange -s cif orange_rect2.png

当过滤链内的输入应该具有特定的分辨率时,带参数的大小规格对过滤链很有用,因此大小不能被指定为选项。 一个常见的例子是使用颜色源作为叠加层的输入之一。裁剪图像与使用作物过滤器的视频是一样的,下一个示例的结果是rgbtestsrc视频源中心的150×150像素的正方形:

ffmpeg -f lavfi -i rgbtestsrc -vf crop=150:150 crop_rgb.png
探索 FFmpeg Basics 音视频技术(15): 图像处理

图像可以像使用pad过滤器的视频一样进行padd,例如下一个命令为smptebars视频源创建一个橙色框架:

ffmpeg -f lavfi -i smptebars -vf pad=360:280:20:20:orange pad_smpte.jpg
探索 FFmpeg Basics 音视频技术(15): 图像处理

7、翻转,旋转和叠加图像

翻转图像的镜像版本与由hflip和vflip过滤器提供的翻转视频类似,例如,接下来的两个命令会翻转输入图像,第一个是水平的,第二个是垂直的:

ffmpeg -i orange.jpg -vf hflip orange_hflip.jpg
ffmpeg -i orange.jpg -vf vflip orange_vflip.jpg
探索 FFmpeg Basics 音视频技术(15): 图像处理

旋转的图像也类似于旋转的视频,使用的转置滤波器有四个可能的值:

  • 值0逆时针旋转90度,垂直翻转。
  • 数值1按顺时针方向旋转90度。
  • 数值2逆时针旋转90度。
  • 值3顺时针旋转90度,然后垂直翻转。

例如,把图像顺时针旋转90°我们可以使用命令:

ffmpeg -i image.png -vf transpose=1 image_rotated.png

类似于视频叠加,图像可以通过叠加过滤器放置在另一个图像上。例如,要将smptebars包含到rgbtestsrc视频源中,我们可以使用以下命令:

ffmpeg -f lavfi -i rgbtestsrc -s 400x300 rgb.png
ffmpeg -f lavfi -i smptebars smpte.png
ffmpeg -i rgb.png -i smpte.png -filter_complex overlay=(W-w)/2:(H-h)/2 ^ rgb_smpte.png
探索 FFmpeg Basics 音视频技术(15): 图像处理

8、图像类型之间的转换

几乎所有支持的图像类型都可以转换为另一个,异常是EXR、LJPEG、PIC和PTX文件类型,只能进行解码。转换的语法是:

ffmpeg -i image.type1 image.type2

例如,要将PNG图像转换为JPG图像格式,我们可以使用以下命令:

ffmpeg -i illustration.png illustration.jpg

9、创建视频图像

将静态图像转换为视频很容易,可以用来创建幻灯片,从图像(添加文本)的短视频连接到一起,连接视频在第 23章 中有描述。例如,在photo.jpg文件中创建一个10秒的视频,我们在命令中包含一个值true或1的-loop boolean选项:

ffmpeg -loop 1 -i photo.jpg -t 10 photo.mp4

10、视频来自多个图像

要从多个图像创建视频,它们的文件名必须以数字结束,这些数字与图像编码到视频文件的顺序一致。在这种情况下,媒体格式是在输入之前指定的,它是一个image2格式。例如,来自img1.jpg、img2.jpg的100幅图片。,img100.jpg可以使用以下命令创建一个4秒视频,帧率为25 fps。

ffmpeg -f image2 -i img%d.jpg -r 25 video.mp4

如果图像编号以0开头,例如img001.jpg、img002.jpg等,以提供相同的文件名长度,则命令为:

ffmpeg -f image2 -i img%3d.jpg -r 25 video.mp4

%符号后的数字必须与图像文件名中的位数相同。

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

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

探索 FFmpeg Basics 音视频技术(15): 图像处理

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

(0)

相关推荐

发表回复

登录后才能评论