Ffmpeg图像到视频脚本任何人



我想拍摄一堆图像并从中制作视频幻灯片。会有相应的应用,对吧?是的,似乎有不少。问题是我想让幻灯片与音乐同步,而我看到的所有应用程序都只允许你将每张幻灯片的播放时间延长到整秒的倍数。我想让它们以1.714285714秒的倍数显示,以适应140 bpm。

我所见过的工具通常似乎都有ffmpeg,所以大概这种事情可以用脚本来完成。但是ffmpeg有太多的选择…我希望有人能在我身边。

我最多有100张幻灯片,这些幻灯片需要播放3.428571428秒或者其他时间我想我可以播放两次

对于最近版本的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

旧版本的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

如果您使用的是最新版本的ffmpeg

,则可能需要稍微修改以下命令

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

ffmpeg -f image2 -r 1/15 -i img%03d.png out.webm

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

ffmpeg -loop 1 -f image2 -i img.png -t 30 out.webm

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

cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - out.webm

或PNG图像:

cat *.png | ffmpeg -f image2pipe -r 1 -vcodec png -i - out.webm

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

重要提示:一个系列中的所有图像需要具有相同的大小(x和y尺寸)和格式。

解释:通过告诉FFmpeg将输入文件的FPS选项(每秒帧数)设置为一些非常低的值,我们使FFmpeg在输出中复制帧数,因此我们实现了在屏幕上显示每个图像一段时间。你已经看到,你可以设置任何分数作为帧率。140次/分钟等于-r 140/60。

来源:FFmpeg wiki


从视频中创建图像使用

ffmpeg -i video.mp4 img%03d.png

这将创建名为img001.png, img002.png, img003.png,…的图像

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

从视频中提取图像:

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

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

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

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

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

我最终使用了这个:

mencoder "mf://html/*.png" -ovc x264 -mf  fps=1.16666667  -o output.avi

,然后在LiVES中改变采样率。

加载更多细节(和最终结果视频):http://hyperdata.org/hackit/(mirror)

相关内容

最新更新