FFMPEG将视频流转化成图片帧,将图片帧转化为视频
先上官方文档:
其中-r
和-framerate
都是代表帧率(这个属性属于图片的属性,需要放在图片之前)-s
控制输出格式大小。
本人在一个视频稳定的项目中用需要将视频分解为图片帧,图片帧经过稳定扭曲之后需要再次合成视频。
于是按照官方文档中的例子来操作了一遍:
ffmpeg -i 13.avi %04d.png |
这里将视频转化为图片帧,默认的帧率为30,得到的图片质量和视频质量差别基本不大可以忽略。
ffmpeg -f image2 -framerate 30 -i %04d.png 13stbself.avi |
在用默认参数将图片转换为视频的过程中,合成的视频质量却大打折扣,肉眼可以见的像素块,感觉是被压缩了很多。
下面查阅了很多文档资料后才解决这个问题!
影像视频质量的最重要因素是视频码率,在上述两步的转化过程信息中可以查到。
可以看出原视频码率是5626kbits/s
,而在图片转化为视频的过程中,输出视频的码率是默认的,只有200kbits/s,所以导致了转化前后视频质量相差巨大的问题。
解决方法是修改默认的视频码率属性 -b:v
ffmpeg -f image2 -framerate 30 -i %04d.png -b:v 5626k 13stbself2.avi |
这样转化前后的视频质量几乎没有差别(基本无损)。
另外再记录一个视频转换的小技巧:
ffmpeg -i 1.mp4 -f image2 -vf fps=fps=1 -qscale:v 2 ./data/mp4-%05d.jpeg |
fps=fps=1 代表每一秒一帧,也可以fps=fps=1/10,代表代表每一秒十帧,也就是每隔十秒抓一张图片。
扫码手机观看或分享: