用于拍摄电影快照的程序?

Baa*_*rud 4 video images animation

是否有任何程序可以让我指定视频文件的一部分(avi、mpeg、mp4 等)并每隔一秒/分钟拍摄一次“快照”,并将其存储为一系列图像文件(例如 jpeg)?例如,在 0h45m 和 1h00m 之间选择电影的一部分,并每 30 秒拍摄一次“快照”。

它可能是视频播放器(例如 VLC)的一部分或插件......关键是我需要一些自动拍摄快照的东西,而不是手动拍摄。

此外,有没有什么好的程序可以将这样一系列的图像文件转换为动画 GIF 或 PNG 文件?(如果快照程序可以选择将快照保存为动画 GIF/PNG,这当然是一个奖励。)

slm*_*slm 5

您可以使用它ffmpeg来执行此操作。ffmpeg 网站上几个例子

这里有几个:

  1. 这将每分钟创建一个缩略图,命名为img001.jpg, img002.jpg, img003.jpg, ... (%03d意味着每个缩略图的序号应使用 3 位数字进行格式化)

    $ ffmpeg -i myvideo.avi -f image2 -vf fps=fps=1/60 img%03d.jpg
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这将每 10 分钟创建一个缩略图,命名为thumb0001.bmp, thumb0002.bmp, thumb0003.bmp, ...

    $ ffmpeg -i test.flv -f image2 -vf fps=fps=1/600 thumb%04d.bmp
    
    Run Code Online (Sandbox Code Playgroud)

如果您想将它们制作成短片,您可以再次寻求ffmpeg. 在他们网站的这个页面上讨论过。

以下是更多示例:

  1. 在这里,每个图像的持续时间为 5 秒(每秒 1/5 帧的倒数)。通过告诉 FFmpeg 将输入文件的 FPS 选项(每秒帧数)设置为某个非常低的值,我们在输出处制作了 FFmpeg 重复帧,从而实现了在屏幕上显示每个图像一段时间:

    $ ffmpeg -f image2 -r 1/5 -i img%03d.png -c:v libx264 -r 30 out.mp4
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您没有按系列 ( img001.jpg, img002.jpg, img003.jpg)编号和排序的图像,而是随机一堆图像,则 ffmpeg 还支持 bash 样式的通配符(* 表示任意数量的任何字符):

    $ ffmpeg -f image2 -r 1 -pattern_type glob -i '*.jpg' -c:v libx264 out.mp4
    
    Run Code Online (Sandbox Code Playgroud)

或对于 png 图像:

    $ ffmpeg -f image2 -r 1 -pattern_type glob -i '*.png' -c:v libx264 out.mp4
Run Code Online (Sandbox Code Playgroud)

要将生成的视频制作成 gif 动画,您可以使用其题为“如何使用 ffmpeg 从 avi 生成 gif ”的 SO Q&A 中概述的步骤

$ ffmpeg -i video.avi -t 10 out%02d.gif
Run Code Online (Sandbox Code Playgroud)

然后:

$ gifsicle --delay=10 --loop *.gif > anim.gif
Run Code Online (Sandbox Code Playgroud)

这是该工具的链接gifsicle