本文介绍了如何使用ffmpeg将大量图片拼接成视频,并介绍了一些参数的含义。在使用ffmpeg将图片拼接成视频之前,需要对图片文件名进行预处理。文件名中必须有一个数字来标记其顺序。这里我直接用数字重命名图片,如下:直接用命令ffmpeg-fimage2-i%d.jpegoutput.mp4可以转成mp4视频,命令中的%d是数字占位符,ffmpeg会按顺序加载1-250.jpeg作为输入。这里我们不指定任何其他参数,所以ffmpeg使用默认参数,比如帧率为25fps,视频使用h264编码,分辨率直接使用图片的原始分辨率...输入#0,mov,mp4,m4a,3gp,3g2,mj2,来自'output.mp4':元数据:major_brand:isomminor_version:512compatible_brands:isomiso2avc1mp41编码器:Lavf58.76.100持续时间:00:00:10.00,开始:0.000000,比特率:28140(und):视频:h264(High)(avc1/0x31637661),yuvj420p(pc,bt470bg/unknown/unknown),2816x2160[SAR1:1DAR176:135],28141kb/s,25fps,25tbr,12800tbn,50tbc(default)Metadata:handler_name:VideoHandlervendor_id:[0][0][0][0]我们可以调整它的参数来生成更符合我们需求的视频。下面是一些常用的参数。-r调整帧率如果不指定帧率,ffmpeg会使用默认的25帧,即1秒拼接25张图片。我们可以通过调整帧率来控制最终生成视频的时长。ffmpeg-r10-fimage2-i%d.jpegoutput1.mp4上面的命令会每秒拼接10张图片,250张图片最终会生成一个25秒的视频。这里需要注意-r10参数的位置,-i%d.jpeg前后的效果是不一样的。放在-i之后只会改变输出视频帧率,输入依然是默认值25,比如ffmpeg-fimage2-i%d.jpeg-r10output1.mp4,250张图片仍然只会生成一个10s的视频,但是视频的播放速率会降低到10秒。-b:v调整视频码率-b:v视频码率。如果原图比较大,默认参数生成的视频尺寸也会比较大。比如我上面用的图片都是2k的高清图片,最后生成的10s视频有35MB,码率接近30Mb/s(码率是只播1s的数据量,注意这里的单位很小b)。ffmpeg-r10-fimage2-i%d.jpeg-b:v4Moutput2.mp4在这里额外提醒一下,改变码率会影响视频清晰度,但不代表一定要高码率视频比低比特率视频更好更高的视频分辨率取决于视频编码格式。比如h265编码可以用更小的码率生成和h264一样的视频质量,av1、v8、v9等编码也比h264好。-crf调整视频质量-crfConstantRateFactor,用于平衡视频质量和文件大小的参数,FFMPEG中取值范围为0-51,值越大,内容丢失越多,视频质量越差。ffmpeg默认值为23,推荐取值范围为17-28。ffmpeg-r10-fimage2-i%d.jpegoutput3.mp4-c:v调整视频编码格式-c:v视频编解码器。目前ffmpeg默认为mp4使用h264,您可以使用-c:vlibx265生成具有相同质量但文件大小更小的h265视频。ffmpeg-fimage2-i%d.jpeg-c:vlibx265output4.mp4output4.mp4与上面生成的output.mp4相比,视频文件大小减少了60%,但视频质量保持不变。您还可以使用-c:vlibvpx-c:vlibvpx-vp9分别生成v8和v9编码的webm文件。ffmpeg-fimage2-i%d.jpeg-c:vlibvpxoutput-v8.webm#注意webm默认生成低质量视频,可以使用-crf或-b:v参数调整视频质量。-vfscale调整视频分辨率-vfscale:VideoFilterScaleffmpeg-fimage2-i%d.jpeg-s640x480output5.mp4以上命令会直接将视频缩放到640x480分辨率,如果原图不是4??:3的话肯定会拉伸原始图像。可以使用如下命令缩放ffmpeg-fimage2-i%d.jpeg-vfscale=-1:480output5.mp4#-1表示比例缩放,或者-vfscale=640:-1固定宽度缩放高度以上是几个常用的参数。这些参数不仅限于图片转视频,还可以在视频转视频时使用。
