ffmpeg图像到视频脚本任何人?

dan*_*nja 11 media video ffmpeg image slideshow

我想要拍摄一堆图像并制作视频幻灯片.会有一个应用程序,对吧?是的,看起来不少.问题是我希望幻灯片同步到一段音乐,而我看到的所有应用程序只允许您显示每张幻灯片一整秒的倍数.我希望它们以1.714285714秒的倍数显示,以适应140 bpm.

我见过的工具通常看起来很糟糕,所以推测这种事情可以用脚本来完成.但ffmpeg有很多选择......我希望有人会有一些接近的东西.

我将有大约100张幻灯片,那些必须显示3.428571428秒或我认为我可以简单显示两次.

svr*_*vrx 24

您可以从视频中提取图像,也可以从许多图像中创建视频:

用于从视频中提取图像:

ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
Run Code Online (Sandbox Code Playgroud)

这将从视频中每秒提取一个视频帧,并将其输出到名为" foo-001.jpeg'," foo-002.jpeg等的文件中.图像将重新调整以适应新的WxH值.如果只想提取有限数量的帧,可以将上述命令与-vframes或-t选项结合使用,或与-ss结合使用以开始从某个时间点提取.要从许多图像创建视频:

ffmpeg -f image2 -i foo-%03d.jpeg -r 12 -s WxH foo.avi
Run Code Online (Sandbox Code Playgroud)

语法foo-%03d.jpeg指定使用由用零填充的三个数字组成的十进制数来表示序列号.它与C printf函数支持的语法相同,但只有接受普通整数的格式才适合.

这是文档的摘录,有关ffmpeg 文档页面的更多信息,请查看.


eri*_*rik 23

对于ffmpeg的最新版本(大致从2013年底开始)

以下将从当前目录中的所有png图像创建视频幻灯片(使用视频编解码器libx264webm).该命令接受图像名称编号和有序串联(img001.jpg,img002.jpg,img003.jpg)以及图像的随机串.

(每张图片的持续时间为5秒)

ffmpeg -r 1/5 -pattern_type glob -i '*.png' -c:v libx264 out.mp4   # x264 video
ffmpeg -r 1/5 -pattern_type glob -i '*.png'              out.webm  # WebM video
Run Code Online (Sandbox Code Playgroud)

对于旧版本的ffmpeg

这将创建一个视频幻灯片(使用视频编解码器libx264WEBM)由一系列png图片,命名img001.png,img002.png,img003.png,...

(每张图片的持续时间为5秒)

ffmpeg -f image2 -r 1/5 -i img%03d.png -vcodec libx264 out.mp4     # x264 video
ffmpeg -f image2 -r 1/5 -i img%03d.png                 out.webm    # WebM video
Run Code Online (Sandbox Code Playgroud)

如果您有最新版本的ffmpeg,则可能需要稍微修改以下命令

这将创建一个幻灯片,每个图像的持续时间为15秒:

ffmpeg -f image2 -r 1/15 -i img%03d.png out.webm
Run Code Online (Sandbox Code Playgroud)

如果你想只用一个图像创建一个视频,这样做(输出视频持续时间设置为30秒):

ffmpeg -loop 1 -f image2 -i img.png -t 30 out.webm
Run Code Online (Sandbox Code Playgroud)

如果你没有自己的编号,系列(有序图像img001.jpg,img002.jpg,img003.jpg),但图像的,而随机一堆,你可以试试这个:

cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - out.webm
Run Code Online (Sandbox Code Playgroud)

或者用于png图像:

cat *.png | ffmpeg -f image2pipe -r 1 -vcodec png -i - out.webm
Run Code Online (Sandbox Code Playgroud)

这将读取当前目录中的所有jpg/png图像,并使用管道将它们逐个写入ffmpeg的输入,这将产生视频.

重要提示:系列中的所有图像都需要具有相同的尺寸(x和y尺寸)和格式.

说明:通过告诉FFmpeg将输入文件的FPS选项(每秒帧数)设置为某个非常低的值,我们在输出处制作了FFmpeg重复帧,因此我们实现了在屏幕上显示每个图像一段时间.您已经看到,您可以将任何分数设置为帧率.每分钟140次击打将是-r 140/60.

资料来源:FFmpeg维基


用于从视频使用创建图像

ffmpeg -i video.mp4 img%03d.png
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为图片img001.png,img002.png,img003.png,...