我试图创建一个视频的2x2平铺缩略图,其中包含20%,40%,60%和80%的视频帧。我看到我需要使用带有select的视频过滤器,但无法确定哪些选项可以执行此操作。我想做这样的事情:
ffmpeg -i video.avi -frames 1 -vf "select=not(mod(pos\,0.2)),tile=2x2" tile.png
位置将是视频中从0.0到1.0的位置。我该怎么做,或者我有什么选择?
答案 0 :(得分:15)
方法1:帧间隔
这可能需要一些时间,具体取决于输入或返回N/A
某些类型的输入(在这种情况下请参阅基于持续时间的方法)。
获取video
帧的总数:
ffprobe <input> -select_streams v -show_entries stream=nb_frames -of default=nk=1:nw=1 -v quiet
该命令将输出一个整数值,例如:
18034
对于上面的示例,帧间隔为nb_frames / 5 = 18034 / 5 = 3607
最后ffmpeg
命令是:
ffmpeg -i <input> -filter:v "select=(gte(n\,3607))*not(mod(n\,3607)),tile=2x2" -frames:v 1 -vsync vfr -y tile.png
方法2:持续时间间隔
与上述相同,但使用持续时间(秒)。这也可能需要一段时间,报告的持续时间可能无效(例如:如果文件被截断)。
ffprobe <input> -select_streams v -show_entries stream=duration -of default=nk=1:nw=1 -v quiet
它返回一个真实的值,如:
601.133333
您的间隔为601 / 5 ~= 120
秒:
ffmpeg -i <input> -filter:v "select=(gte(t\,120))*(isnan(prev_selected_t)+gte(t-prev_selected_t\,120)),tile=2x2" -frames:v 1 -y tile.png
方法3:寻求&amp;提取强>
使用-ss -i
搜索特定时间,提取单个框架并使用imagemagick的montage
创建图块。
10分钟倒数计时器的示例输出: