微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

文件中列出的FFmpeg导出帧包括重复项

如何解决文件中列出的FFmpeg导出帧包括重复项

问题

我有一些要从某些视频文件提取的帧列表。 该列表可能如下所示:

1,6,10,15,20,25,50

实际上有数千个帧。

如何有效地将这些帧提取到图像或视频中?

我尝试过的事情

  1. 使用FFmpeg选择过滤器。我可以从select=eq(\n,1)+eq(\n,6)+...之类的文件中创建巨大的字符串,但是问题是我无法以这种方式导出重复项。我也不确定性能
  2. 将所有框架导出到文件夹,然后将相关框架复制到另一个文件夹。这是当前的解决方案,它非常缓慢,并且需要大量存储。
  3. 使用python和opencv。我可以使用cv.VideoCapture功能逐帧读取并保存所需的内容。问题在于,在提取之前,我需要将视频的帧速率更改为某个恒定的帧速率(非常重要)。这就是为什么首选ffmpeg的原因,因为我可以将fps过滤器添加到filterchain。我知道可以通过使用ffmpeg后端使用opencv读取帧,但是我无法预先找到如何更改帧率的方法。不建议先对视频进行重新编码,因为这样会浪费时间,并可能降低视频质量。
  4. 编写一个新的ffmpeg过滤器。虽然我与C或ffmpeg API的关系不密切,但我尝试编辑fps过滤器以删除不在列表中的帧。这种工作有效,但是我无法解决重复框架的问题。我想知道是否有可能这样做,是否应该继续尝试这种方法。拥有ffmpeg过滤器可能是最好的选择。

解决方法

bash脚本:

#!/bin/bash
LST=(1 6 6 10)
TOT=${#LST[*]}
for (( i=0; i<=$(( $TOT -1 )); i++ )); do
  ffmpeg -i "input 1.mkv" -filter:v "select='eq(n,${LST[$i]})'" -vsync vfr "/tmp/img_${i}_${LST[$i]}.jpg"
done

它不是很快,但是可以工作☺

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。