先上官方文档:
image

其中-r-framerate 都是代表帧率(这个属性属于图片的属性,需要放在图片之前)-s 控制输出格式大小。

本人在一个视频稳定的项目中用需要将视频分解为图片帧,图片帧经过稳定扭曲之后需要再次合成视频。
于是按照官方文档中的例子来操作了一遍:

ffmpeg -i 13.avi %04d.png

这里将视频转化为图片帧,默认的帧率为30,得到的图片质量和视频质量差别基本不大可以忽略。

ffmpeg -f image2 -framerate 30 -i %04d.png 13stbself.avi

在用默认参数将图片转换为视频的过程中,合成的视频质量却大打折扣,肉眼可以见的像素块,感觉是被压缩了很多。

下面查阅了很多文档资料后才解决这个问题!
影像视频质量的最重要因素是视频码率,在上述两步的转化过程信息中可以查到。

image
image

可以看出原视频码率是5626kbits/s,而在图片转化为视频的过程中,输出视频的码率是默认的,只有200kbits/s,所以导致了转化前后视频质量相差巨大的问题。
解决方法是修改默认的视频码率属性 -b:v

ffmpeg -f image2 -framerate 30 -i %04d.png -b:v 5626k 13stbself2.avi

image

这样转化前后的视频质量几乎没有差别(基本无损)。

另外再记录一个视频转换的小技巧:

ffmpeg -i 1.mp4 -f image2  -vf fps=fps=1 -qscale:v 2 ./data/mp4-%05d.jpeg

fps=fps=1 代表每一秒一帧,也可以fps=fps=1/10,代表代表每一秒十帧,也就是每隔十秒抓一张图片。


扫码手机观看或分享: