【发布时间】:2012-03-05 08:18:22
【问题描述】:
假设我有 10 张图片,我想将这些图片组合成一个视频,例如幻灯片。
例如,我想将每个图像显示 5 秒钟,然后再继续显示下一张图像 5 秒钟。
如果可能的话,最好包含音乐和一些描述性文字。
ffmpeg 库中是否有此示例代码?
【问题讨论】:
标签: php image-processing ffmpeg video-processing
假设我有 10 张图片,我想将这些图片组合成一个视频,例如幻灯片。
例如,我想将每个图像显示 5 秒钟,然后再继续显示下一张图像 5 秒钟。
如果可能的话,最好包含音乐和一些描述性文字。
ffmpeg 库中是否有此示例代码?
【问题讨论】:
标签: php image-processing ffmpeg video-processing
我的第一个想法是使用类似这样的东西来使用 ffmpeg 命令。
从图像创建视频
ffmpeg 可用于将多个图像拼接成一个视频。 有很多选择,但是下面的例子应该足够了 开始吧。它需要所有具有文件名的图像 XXXXXX.morph.jpg,其中 X 是数字,并创建一个名为 “输出.mp4”。 qscale 选项指定图片质量(1 是 最高,32 最低),“-r”选项用于 指定每秒的帧数。
ffmpeg -r 25 -qscale 2 -i %05d.morph.jpg output.mp4
(获取此简介的网站已消失。链接 已被删除。)
其中 25 表示每秒 25 张图像。您可以将其设置为 1 以实现轻微(1 秒)延迟或使用小数,即:0.5 以延迟 2 秒。
然后您可以将视频和音频流与类似的东西结合起来。
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -b:a 128k final.mp4
当然要选择合适的编解码器。如果您想要一个 mp4,则将 libx264 用于视频,将 aac(内置于 ffmpeg,不再“实验性”)用于音频。
请记住,如果您选择使用这样的方法,则 ffmpeg 输出默认情况下会发送到 stderr 以供您尝试读取它。如果您愿意,可以将其重定向到标准输出。
【讨论】:
ffmpeg -r 250 是否意味着每张图像需要 10 秒?
我首先想到的是imagemagick。我已经将它与 PHP 一起用于大量图像处理,我知道它支持读取相当数量的视频格式,并且根据该链接,它也支持写入一些格式。
【讨论】:
是的,ffmpeg 是适合您的解决方案。我最近做了一些类似的东西——一个带有动画缩略图的视频网站。我使用 ffmpeg 将图像放在一个氨基化的 gif 中。然而,输出可以是你需要的任何东西......不幸的是,在我搜索这个主题时,我没有找到任何可以结合你所追求的所有点的示例代码,所以我想你将不得不手动尝试使用 ffmpeg.. . 在我的项目中,我在某些部分使用了 php 视频工具包http://sourceforge.net/projects/phpvideotoolkit/ 以使其更容易...
【讨论】:
你可以在 ffmpeg 中使用混合效果:
ffmpeg -framerate 20 \
-loop 1 -t 0.5 -i 1.jpg \
-loop 1 -t 0.5 -i 2.jpg \
-loop 1 -t 0.5 -i 3.jpg \
-loop 1 -t 0.5 -i 4.jpg \
-c:v libx264 \
-filter_complex " \
[1:v][0:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b1v]; \
[2:v][1:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b2v]; \
[3:v][2:v]blend=all_expr='A*(if(gte(T,0.5),1,T/0.5))+B*(1-(if(gte(T,0.5),1,T/0.5)))'[b3v]; \
[0:v][b1v][1:v][b2v][2:v][b3v][3:v]concat=n=7:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4
你应该查看下面的链接以获得更多 ffmpeg 的效果:D
【讨论】: