ffmpeg图片视频互转

图片转视频

方法1:图片文件命名相似

ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi

例如:

## C语言格式输入图片
ffmpeg -y -f image2 -framerate 1 -i foo-%03d.jpeg -s 720x1280 foo.mp4
## 正则表达式方式
ffmpeg -y -f image2 -pattern_type glob -framerate 1 -i 'image*.jpg' -s 720x1280 foo.mp4
## 多线程处理
ffmpeg -threads 2  -y -r 2 -pattern_type glob -i 'big*.jpg' -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4

参数解析
-i 输入文件的地址
-y 表示直接覆盖已经存在的输出文件
-f 强制设置输入输出的文件格式,默认情况下ffmpeg会根据文件后缀名判断文件格式
-codec(-c) 指定输入输出的解码编码器 copy 则将输入流直接复制到输出流不进行编解码操作
-c:v 或-vcodec 可以为所有视频流指定编码器。
foo-%03d.jpeg 文件名中含有3个连续数字,不足用0补充
-pattern_type glob 文件名匹配正则表达式
-framerate 每秒帧率,-framerate 12即每秒视频产生12帧图片。
-r 设置某个流的帧率按ffmpeg官方文档说-r与-framerate作用相同,-framerate 用于限制输入,而-r用于限制输出。
-threads 设置处理线程数
-pix_fmt 指定像素的颜色模式

方法2:文件列表方式

原理就是创建一个临时文件将要使用的图片全部列出,可以指定每个图片的展示时间,也可以在稍候的命令中指定视频的总时长。例如:先创建一个文本文件filelist.txt,文件内容:

file 'girl/image1.jpg' 
duration 2
file 'girl/image2.jpg'
duration 2
file 'photo5.jpg'
duration 2
file 'photo1.jpg'
duration 2

执行命令:

## 简单模式
ffmpeg -y -f concat -i filelist.txt output.mp4
## 指定视频的编码格式
ffmpeg -y -f concat -i filelist.txt -c:v libx264 output.mp4
ffmpeg -y -f concat -safe 0 -i filelist.txt -vsync vfr -pix_fmt yuv420p output.mp4

视频转图片

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

多视频合成视频

ffmpeg -i "concat:input1.mp4|input2.mp4|input3.mp4" -c copy output.mp4

注意:多视频合成视频也可以使用文件列表的方式。
videolist.txt文件内容:

file 'test1.mp4'
file 'test2.mp4'
file 'test3.mp4'
file 'test4.mp4'

FFmpeg官方链接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章