《ffmpeg basics》中文版 -- 15.图片处理

15.图片处理

​ 尽管 FFmpeg 工具设计的主要目的是处理音频和视频,但 ffmpeg 也能编解码多种图片格式,很多图片相关的任务也可以快速完成。在一个 web服务器中使用 ffmpeg 可以创建一个网页图片编辑器,如何在 web 主机中支持 FFmpeg 将在 《Video on Web》一节中介绍。

支持的图片格式

​ 下表为 FFmpeg 中支持的图片格式,使用它们特有的后缀来表示图片。以下列表中,除了 LJPEG (Lossless JPEG)都可以被解码,除了 EXR,PIC 和 PTX 外,都可以被编码。

在这里插入图片描述

创建图片

从视频中截图

​ 想要将特定时刻的视频帧保存为图片时,可以使用 -ss(seek from start)选项指定从开始的延迟时间。我们想要保存时刻为 t 的帧,语法为:

ffmpeg -i input -ss t image.type

​ -ss 选项也可以放在输入文件之前,但这样做会导致时间的准确度要差一些。例如,如果我们想要将 1 小时 23 分钟 45 秒 的 videoclip.avi 保存为图片,命令为:

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

从视频保存为GIF

​ 视频是由帧组成的,这些帧可以转而保存为GIF文件中的帧。动画 GIF 文件是一种图片类型,它常用于网页上作为横幅或者短动画。由于GIF 中的帧是未压缩保存的,因此 GIF 仅用于短视频,当 GIF 的时长较长时,它的文件尺寸可能会变得非常大。例如,将一个短的 SWF 文件(网页上需有 FLASH 插件才能播放)转化为 GIF 动画文件(不需要其他依赖),此时的像素格式必须设为 rgb24 ,命令如下:

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

从FFmpeg的视频源保存图片

​ 另一种选择是使用 FFmpeg 中内置的视频源来创建图片,视频源有:

在这里插入图片描述

​ mptestsrc 视频源的默认分辨率是 521x521 像素,其他视频源的像素为 320x240 像素。效果最多的是 color 视频源,它可以生成任意颜色和任意尺寸的图片,例如,想要生成一个 728x90 像素大小的横幅图片,我们可以使用命令:

ffmpeg -f lavfi -i color=c=#008080:s=728x90 leaderboard.jpg

在这里插入图片描述

视频转化为图片

​ 视频文件是由帧组成的,我们可以将这些帧保存成图片,因此生成的图片的数量等于视频帧率和视频时长的乘积。例如,clip.avi 有 1 分钟长,其帧率为 25 fps,那么下面的命令会生成 60x25=1500 张图片,每秒生成 25张图片:

ffmpeg -i clip.avi frame%d.jpg

​ 输出目录中会包含新生成的 1500 张图片,他们的名称为 frame1.jpg , frame2.jpg 等。如果想要让生成的文件名称长度一样,那么我们可以在 % 后加一个数据来指定跟随的数字所使用的位数,例如:

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

​ 此时,新生成的图片名称就会变成 frame0001.jpg , frame002.jpg , … , frame1500.jpg。

调整图片的尺寸,裁剪图片,填充图片

​ 调整图片大小的方式和调整视频大小的方式是一样的。例如。默认情况下,color 视频源的输出图像的分辨率为 320x240 像素,我们可以用两种方式来将它的尺寸调整为 VGA 大小:

  • 对 color 视频源使用 s 或 size 参数

  • 对输出使用 -s 选项

​ 例如以下两条命令,它们的效果相同,都是生成一张 CIF (352x288)大小的橘色图片:

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

​ 在 filterchains 中,通过参数的方式来指定尺寸是非常有用的,这是因为在 filterchains 的处理中,当我们需要一个特定分辨率大小的输入时,我们不能通过使用选项的方式来指定尺寸,只能使用参数的方式。最常见的例子就是使用 color 作为一个输入进行覆盖操作。

​ 裁剪图片和裁剪视频一样,都使用 crop filter 来完成。例如,下面的命令就会从 rgbtestsrc 视频源的画面中心位置截取 150x150 像素的方框:

ffmpeg -f lavfi -i rgbtestsrc -vf crop=150:150 crop_rgb.png

在这里插入图片描述

​ 填充图片的方式和填充视频的方式相同,都是使用 pad filter,例如,下面的命令为 smptebars 视频源创建了一个橘色的边框:

ffmpeg -f lavfi -i smptebars -vf pad=360:280:20:20:orange pad_smpte.jpg

在这里插入图片描述

翻转,旋转和覆盖图片

​ 翻转图片,创建图片的镜像对称版本,和翻转视频类似,都是使用 hflip 和 vflip filter 完成的。例如,下面两个命令用于翻转输入的图片,第一个水平翻转,第二个垂直翻转:

ffmpeg -i orange.jpg -vf hflip orange_hflip.jpg
ffmpeg -i orange.jpg -vf vflip orange_vflip.jpg

在这里插入图片描述

​ 旋转图片和旋转视频一样,也是使用 transpose filter,它有四个可使用的值:

  • 0 :逆时针方向旋转90度,然后垂直翻转

  • 1:顺时针方向旋转90度

  • 2:逆时针方向旋转90度

  • 3:顺时针方向旋转90度,然后垂直翻转

​ 例如,想要将图片顺时针旋转90度,命令如下:

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

​ 和视频覆盖一样,图片也可以使用 overlay filter 来完成覆盖操作。例如,想要在 rgbtestsrc 视频源上覆盖一个 smptebars,命令如下:

ffmpeg -f lavfi -i rgbtestsrc -s 400x300 rgb.png
ffmpeg -f lavfi -i smptebars smpte.png
ffmpeg -i rgb.png -i samte.png -filter_complex oevelay=(W-w)/2:(H-h)/2 rgb_smpte.png

在这里插入图片描述

图片类型转化

​ 在 FFmpeg 中,几乎所有被支持的图片类型都可以被转化,除了 EXR , LJPEG , PIC , PTX 文件类型,因为它们不能被解码。转换的语法为:

ffmpeg -i image.type1 image.type2

​ 例如,将一个 PNG 图片转化为 JPG 图片格式,命令如下:

ffmpeg -i illustration.png illustration.jpg

使用图片创建视频

使用一张图片创建视频

​ 使用一张图片来创建视频非常简单。我们可以用一张图片来创建一个静态的视频,然后把多个同样的视频连接(joining video)起来,就可以创建类似幻灯片的效果视频。连接视频将在第 23 章描述。例如,我们想要使用 photo.jpg 创建一个 10 秒钟长的视频,此时我们需要使用 -loop 选项,它的值为布尔值,因此需要赋值为 true 或者 1 等非 0 整数值,命令如下:

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

使用多张图片创建视频

​ 想要使用多张图片来创建视频,图片的名称需要以一个数字来结束,这个数字对应着该图片编码到视频文件时的序列位置。我们还需要在输入文件之前指定媒体的格式,我们使用 image2 format,来表示我们想要从多个图片生成一个视频。例如,有 100 张图片,名称依次为 img1.jpg , img2.jpg , … , img100.jpg ,它可以用来创建帧率为 25 fps 的长为 4 秒的视频,命令如下:

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

​ 如果图片名称中最后面的数字是以0开头,且数字位数相同,如 img001.jpg , img002.jpg , … , img100.jpg,那么我们需要指定名称的长度,命令如下:

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

deo.mp4


​	如果图片名称中最后面的数字是以0开头,且数字位数相同,如 img001.jpg , img002.jpg , ... , img100.jpg,那么我们需要指定名称的长度,命令如下:

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


​	% 后面的数字必须和实际文件的数字所使用的数字位数相同。
H&A
发布了7 篇原创文章 · 获赞 4 · 访问量 809

猜你喜欢

转载自blog.csdn.net/qq_34305316/article/details/103937930