我正在尝试为一个数据科学项目收集数据,并使用 ffmpeg 从在线视频中下载帧。我想下载视频中帧的子集,而不需要精确地确定是哪些,唯一的要求是它们彼此之间有合理的间隔。
我努力了
ffmpeg -i "http://www.somevideo.com" -r 1 -f image2 "image%06d.jpg"
和
ffmpeg -i "http://www.somevideo.com" -vf fps=1 "image%06d.jpg"
最终找到了以下方法
ffmpeg -ss offset1 -i "http://www.somevideo.com" -ss offset2 -i "http://www.somevideo.com" -map 0:v -frames:v 10 -start_number 0 "image%06d.jpg" -map 1:v -frames:v 10 -start_number 10 "image%06d.jpg"
并且所有命令都有效,但速度很慢。我发现了一个 hack,我多次运行以下命令,以不同的偏移量运行,它似乎是最快的(其中每个 ffmpeg 命令都以并行多线程运行)
ffmpeg -ss offset -i "http://www.somevideo.com" -vframes frames_per_fragment -an -start_number start_index "image%06d.jpg"
这比以前的方法快 25%
有没有更快的方法?问题是通过网络下载是一个瓶颈,所以我只想下载我需要的帧。我希望批量下载视频/帧,因此任何速度改进都会有所帮助。