从视频制作缩略图


11

如何从视频中进行简单捕获。最好从命令行?

想法:拍摄9张快照,连续拍摄9次(在时间轴上),并将其另存为JPG

例:

Movie length = 10 min
T1= snapshot of 1 min
T2= snapshot of 2 min
......
T9= snapshot of 9 min
   |   |
 T1| T2| T3
---+---+---
 T4| T5| T6
---+---+---
 T7| T8| T9
   |   |

最好的程序是什么?有开源程序吗?

Answers:


5

ffmpeg是用于处理视频(包括提取帧)的出色开源工具。

要从特定的时间戳中提取单个帧,您可以使用以下命令

ffmpeg -i video.avi -r 1  -t 00:01:00 -f image2 image%05d.png

-r是帧速率。您也可以使用类似

ffmpeg -i video.avi -r 1/1440 -f image2 image%05d.png

每1分钟获得一帧(假设有24FPS视频)。%05d表示应使用5位数字格式化每个缩略图的序号。

如果要将图像合并为蒙太奇(网格),则可以在使用ffmpeg提取帧之后使用imagemagick。



1

vcsi是用Python编写的命令行工具,可用于通过以下命令创建3 x 3的快照网格:

vcsi -g 3x3 video.mkv -o output.jpg

0

我的用例只是视频中的一个缩略图,只是一个用作<video>标签发布者的文件。那么,什么是最快的方法呢?

使用ffmpeg,您可以执行以下操作:

ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

这样一来,您将123获得video.mp4另存为中的第二帧poster.jpg

如您所见,问题是我们需要知道哪一秒是正确的。

为了保持较低的依赖性,我们将使用ffmpeg本身:

# Get the time as h:m:s (non-padded)
l=$(ffmpeg -i video.mp4 2>&1 | grep Duration: | sed -r 's/\..*//;s/.*: //;s/0([0-9])/\1/g')
# Convert that into seconds
s=$((($(cut -f1 -d: <<< $l) * 60 + $(cut -f2 -d: <<< $l)) * 60 + $(cut -f3 -d: <<< $l)))
# Get frame at 25% as the thumbnail
ffmpeg -ss $((s / 4)) -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

25%的视频似乎是一种常见选择,但您也可以将其设置为33%或50%。

这是执行此操作的脚本

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.