1 介绍
近期采了一组数据(包含GNSS、IMU、LiDAR、相机),想要将其中一段图片转为视频放到PPT中结合轨迹图进行讲解,使用了ffmpeg将图片流转换为了视频文件,在此记录一下大致过程,方便后续使用时进行查阅。
首先介绍一下FFmpeg(官网):
FFmpeg 是一个开放原始码的自由软体,可以执行音讯和视讯多种格式的录影、转档、串流功能,包含了libavcodec——这是一个用于多个专案中音讯和视讯的解码器函式库,以及libavformat——一个音讯与视讯格式转换函式库。 —Wikipedia
2 转换过程
2.1 文件名更改 & 转换视频
在使用ffmpeg将图片转为视频时首先需要对图片文件名进行预处理,将图片按照顺序使用数字来作为其文件名,可在终端中使用以下命令来批量修改文件夹中的文件名:
1 | declare -i num=0; |
然后,使用以下命令将图片转换为视频:
1 | ffmpeg -f image2 -i %d.jpg video.mp4 |
注:上述两个命令中需要根据图片的实际格式对“jpg”进行更改。
2.2 ffmpeg参数
首先介绍一下上述命令中的参数:
1 | ffmpeg -f image2 -i %d.jpg video.mp4 |
- -f:指定输入/输出文件格式,包括视频(MP4、AVI等)、音频(MP3、WAV等)、图片(PNG、JPEG等),此处后面为image2表示输入为图片流。注:-f参数应在-i参数前使用。
- -i:指定输入文件。
ffmpeg还有各种参数可以进行自定义设置,现挑几个常用的参数进行说明。
-r 帧率
ffmpeg默认帧率设置为25帧,可通过下述命令来修改帧率:
1 | ffmpeg -r 40 -f image2 -i %d.jpg video.mp4 |
值得注意的是,-r 40
需要放在 -i %d.jpg
前方可生效。
-s -vf 分辨率
如果想将视频分辨率调整为某分辨率,可直接使用-s参数进行修改:
1 | ffmpeg -r 40 -f image2 -i %d.jpg -s 640x480 video.mp4 |
但是如果原始图片分辨率不是4:3的话,会对原始图片进行拉伸、压缩操作,导致视频效果不好。这种情况下可以考虑-vf参数,固定高度或宽度,进行比例缩放:
1 | ffmpeg -r 40 -f image2 -i %d.jpg -vf scale=-1:480 video.mp4 |
其中,-1表示比例缩放。
-b:v 码率
首先简要介绍一下视频码率:
视频码率或者码率是指视频信息每秒传输的比特数目。码率的单位通常为:
- kbps或者千比特每秒
- mbps或兆比特每秒
根据概念可知,码率会影响视频的质量,即高码率一般对应着较高的视频质量。但两者之间并不存在绝对的对应关系,因为一方面码率对视频质量的增加存在一个瓶颈,视频质量一旦达到某一点,无论如何增加码率也无法进一步提升视频质量;另一方面,视频质量也是由多方因素决定的,如分辨率、帧率、编解码格式等。
ffmpeg修改码率的命令如下:
1 | ffmpeg -r 40 -f image2 -i %d.jpg -b:v 4M video.mp4 |
-c:v 编码格式
默认使用的是h264,如想要切换为h265,可使用如下命令:
1 | ffmpeg -r 40 -f image2 -i %d.jpg -c:v libx265 video.mp4 |
注:使用该参数时可能需要安装编码器依赖,否则会报错。