《FFmpeg Basics》中文版-15-图像处理

写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。正文虽然FFmpeg工具的主要用途与音频和视频有关,但ffmpeg可以对各种图像格式进行解码和编码,并且许多图像相关任务可以快速完成。 在网络服务器上使用ffmpeg可创建Web图像编辑器,支持FFmpeg的网络主机相信信息位于Web视频一章。支持的图像格式表格中列出了FFmpeg支持的图像格式及其特征后缀。 除LJPEG(无损JPEG)以外的所有这些文件类型都可以解码,除EXR,PIC和PTX之外都可以编码。FFmpeg支持的图像格式扩展名编码解码描述.Y.U.VXX每个组件的一行文件BMPXX微软BMP图像DPXXX数码照片交换EXRXOpenEXRGIFXX动画gif是未压缩的JPGXX不支持渐进式JPEGJP2XXJPEG 2000JLSXXJPEG-LSLJPGX无损的JPEGPAMXXPAM是带有alpha支持的PNM扩展PBMXX便携式位图图像PCXXXPC画笔PGMXX便携式GrayMap形象PGMYUVXXPGM与U和V的分量在YUV 4:2 0PICXPictor/PC PaintPNGXX便携式网络图形PPMXX便携式PixelMap形象PTXXV.Flash PTX格式SGIXXSGI RGB图像格式RASXXSun Rasterfile图像格式TIFFXXYUV, JPEG和一些扩展还没有被支持TGAXXTruevision Targa 图像格式XBMXXX位图图像格式XFaceXXXFace图像格式XWDXXX窗口转储图像格式创建图像从视频截图为了将一个视频帧从指定的时刻保存到图像中,使用-ss(从start开始)选项来指定从开始的延迟。在时间t中截图的语法ffmpeg -i input -ss t image.type我的测试命令:ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -ss 20 /Users/zhangfangtao/Desktop/image.jpg结果生成了第二十秒的一张图片:

背后的视频正好处在20秒钟的位置-ss选项也可以在输入文件之前使用,但结果不太准确。例如,从文件视频中截取1小时23分45秒的截图。avi,我们可以使用命令:ffmpeg -i videoclip.avi -ss 01:23:45 image.jpg从视频动画gif视频文件是从可以保存到GIF动画帧的帧中创建的,这是一种经常在web上以条幅和动画形式使用的图像类型。因为帧是没有压缩的,所以只有在较短的视频中才有用,否则GIF动画文件的文件大小就会非常大。例如,要将一个短的SWF文件转换为GIF动画,以便为没有Flash插件的用户创建一个替代文件,我们可以使用该命令(必须将像素格式设置为rgb24):ffmpeg -i promotion.swf -pix_fmt rgb24 promotion.gif我的测试命令:ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -pix_fmt rgb24 /Users/zhangfangtao/Desktop/test.gif结果就是生成了一个gif图来自FFmpeg视频源的图像另一个创建图像的选项是使用内置的视频源,在表中描述:名称描述图片color提供以其名称或十六进制格式指定的任何颜色,例如颜色=c=#87cefamptestsrc不同的测试模式,详细的描述都在章节的调试和测试中rgbtestsrc红绿蓝颜色模式smptebars彩色条纹图案来自于电影和电视工程师协会,工程指南(1-1990)testsrc带有滚动渐变和时间戳的视频测试模式mptestsrc视频源的默认分辨率为512x512像素,其他列出的源分辨率为320x240像素。最通用的是能够生成任何颜色和任何大小的图像的彩色图像源,例如为一个标题大小的728x90像素创建一个teal背景,我们可以使用这个命令。ffmpeg -f lavfi -i color=c=#008080:s=728x90 leaderboard.jpg我的测试命令:ffmpeg -f lavfi -i color=c=#008080:s=728x90 /Users/zhangfangtao/Desktop/timer2.jpg*生成的图片:描述提供一种颜色为320x240的矩形,并带有指定的颜色语法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,一个整数或浮点数,或者一个有效的视频帧率缩写,默认值是25sar样本纵横比的源视频size, s源视频的大小、窗体宽度的字符串或相应的缩写,默认值为320x240视频转换为图像视频文件是由可以通过一个命令保存到图像文件的帧组成的,结果图像的数量是视频帧速率的产物,它的持续时间为秒。例如,如果剪辑。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、frame0002.jpg的文件…,frame1500.jpg。我的测试命令:ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 /Users/zhangfangtao/Desktop/Images/frame%03d.jpg效果:image.png调整大小,裁剪和填充图像图像可以以类似视频的方式调整大小,例如,彩色视频源的输出分辨率为320x240像素,可以通过两种方式放大到VGA分辨率:使用彩色视频源的s或大小参数。使用-s选项来输出例如,接下来的两个命令具有相同的结果,CIF(352x288)大小的橙色矩形:ffmpeg -f lavfi -i color=c=orange:s=cif orange_rect1.pngffmpeg -f lavfi -i color=c=orange -s cif orange_rect2.png当过滤链内的输入应该具有特定的分辨率时,带参数的大小规格对过滤链很有用,因此大小不能被指定为选项。 一个常见的例子是使用颜色源作为叠加层的输入之一。裁剪图像与使用作物过滤器的视频是一样的,下一个示例的结果是rgbtestsrc视频源中心的150x150像素的正方形:ffmpeg -f lavfi -i rgbtestsrc -vf crop=150:150 crop_rgb.png图像可以像使用pad过滤器的视频一样进行padd,例如下一个命令为smptebars视频源创建一个橙色框架:ffmpeg -f lavfi -i smptebars -vf pad=360:280:20:20:orange pad_smpte.jpg翻转,旋转和叠加图像翻转图像的镜像版本与由hflip和vflip过滤器提供的翻转视频类似,例如,接下来的两个命令会翻转输入图像,第一个是水平的,第二个是垂直的:ffmpeg -i orange.jpg -vf hflip orange_hflip.jpgffmpeg -i orange.jpg -vf vflip orange_vflip.jpg我的测试命令:ffmpeg -i /Users/zhangfangtao/Desktop/001.jpg -vf hflip /Users/zhangfangtao/Desktop/002.jpg ffmpeg -i /Users/zhangfangtao/Desktop/001.jpg -vf vflip /Users/zhangfangtao/Desktop/003.jpg旋转的图像也类似于旋转的视频,使用的转置滤波器有四个可能的值:值0逆时针旋转90度,垂直翻转。数值1按顺时针方向旋转90度。数值2逆时针旋转90度。值3顺时针旋转90度,然后垂直翻转。例如,把图像顺时针旋转90°我们可以使用命令:ffmpeg -i image.png -vf transpose=1 image_rotated.png我的测试命令:ffmpeg -i /Users/zhangfangtao/Desktop/001.jpg -vf transpose=1 /Users/zhangfangtao/Desktop/004.jpg生成的图像:004旋转90度之后的照片.jpg类似于视频叠加,图像可以通过叠加过滤器放置在另一个图像上。例如,要将smptebars包含到rgbtestsrc视频源中,我们可以使用以下命令:ffmpeg -f lavfi -i rgbtestsrc -s 400x300 rgb.pngffmpeg -f lavfi -i smptebars smpte.pngffmpeg -i rgb.png -i smpte.png -filter_complex overlay=(W-w)/2:(H-h)/2 ^ rgb_smpte.png我的测试命令:ffmpeg -f lavfi -i rgbtestsrc -s 400x300 /Users/zhangfangtao/Desktop/005.pngffmpeg -f lavfi -i smptebars /Users/zhangfangtao/Desktop/006.pngffmpeg -i /Users/zhangfangtao/Desktop/005.png -i /Users/zhangfangtao/Desktop/006.png -filter_complex overlay=\(W-w\)/2:\(H-h\)/2 /Users/zhangfangtao/Desktop/007.png生成的效果图(从左到右依次是005,006,007):图像类型之间的转换几乎所有支持的图像类型都可以转换为另一个,异常是EXR、LJPEG、PIC和PTX文件类型,只能进行解码。转换的语法是:ffmpeg -i image.type1 image.type2例如,要将PNG图像转换为JPG图像格式,我们可以使用以下命令:ffmpeg -i illustration.png illustration.jpg我的测试命令:ffmpeg -i /Users/zhangfangtao/Desktop/001.jpg /Users/zhangfangtao/Desktop/001.png创建视频图像视频来自一个图像将静态图像转换为视频很容易,可以用来创建幻灯片,从图像(添加文本)的短视频连接到一起,连接视频在第23章中有描述。例如,在photo.jpg文件中创建一个10秒的视频,我们在命令中包含一个值true或1的-loop boolean选项:ffmpeg -loop 1 -i photo.jpg -t 10 photo.mp4我的测试命令:ffmpeg -i /Users/zhangfangtao/Desktop/001.jpg /Users/zhangfangtao/Desktop/001.png显示的效果:视频来自多个图像要从多个图像创建视频,它们的文件名必须以数字结束,这些数字与图像编码到视频文件的顺序一致。在这种情况下,媒体格式是在输入之前指定的,它是一个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 -f image2 -i /Users/zhangfangtao/Desktop/Images/frame%3d.jpg /Users/zhangfangtao/Desktop/001.mp4结果就是生成了一个没有声音的视频,视频里面的图片就是我刚才从test.mp4里面解析出来的图片

(0)

相关推荐