【问题标题】:ffmpeg images-to-video script anyone? [duplicate]ffmpeg 图像转视频脚本有人吗? [复制]
【发布时间】:2011-11-20 01:30:05
【问题描述】:

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

我所看到的工具一般似乎都在后台有 ffmpeg,所以大概这种事情可以用脚本来完成。但是 ffmpeg 有很多选择......我希望有人能有一些接近的东西。

我将有多达 100 张幻灯片,那些必须显示 3.428571428 秒或任何我想我可以简单地显示两次的幻灯片。

【问题讨论】:

    标签: image video ffmpeg slideshow media


    【解决方案1】:

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

    用于从视频中提取图像:

    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 的documentation 页面。

    【讨论】:

    【解决方案2】:

    我最终使用了这个:

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

    然后在 LiVES 中更改采样率。

    http://hyperdata.org/hackit/ (mirror) 处加载更多详细信息(以及最终结果视频)

    【讨论】:

    • 我在 Microsoft Windows 上试过 -> 找不到文件:'*.png'
    【解决方案3】:

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

    以下将从当前目录中的所有 png 图像创建视频幻灯片(使用视频编解码器 libx264webm)。该命令接受图像名称按顺序编号和排序img001.jpgimg002.jpgimg003.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

    这将从名为img001.pngimg002.pngimg003.png的一系列png图像创建视频幻灯片(使用视频编解码器libx264webm), …

    (每张图片的持续时间为 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.jpgimg002.jpgimg003.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。

    来源:The FFmpeg wiki


    用于从视频创建图像使用

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

    这将创建名为img001.pngimg002.pngimg003.png、...的图像

    【讨论】:

    • 替代 cat *.jpg 和管道到 ffmpeg 的方式在这里找到:ffmpeg.org/trac/ffmpeg/wiki/…
    • 我在 Windows 上,当我尝试使用“-r 1/2”(每秒 0.5 帧)时,它会响应“打开时出错 [...] 可能不正确的参数,例如 bit_rate 、比率、宽度或高度”。如果我使用“-r 1”,我想,它可以正常工作。我正在使用版本“N-80117-gdac030d”。有什么变化吗?
    • 我尝试的所有命令都失败了。无论如何,当前版本应该位于答案的顶部,并在下面进一步说明旧版本(如果有必要的话)。
    • glob 是在 POSIX 标准中定义的,默认情况下在 Windows 上不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2020-11-06
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    相关资源
    最近更新 更多