视频帧示例

时间:2017-04-08 04:58:35

标签: macos opencv video python-3.5 subsampling

我正在OS X / Python3.5中寻找一种方法来获取.avi视频文件,每100帧进行一次子采样,并将这些帧合并到自己的视频中。

在我的特定情况下,视频在20fps时为30秒,因此新视频只有6帧(我想为多个视频执行此操作,然后将它们组合在一起)。

我安装了opencv,但无法找到有关如何执行此操作的文档。如果它更容易,我也可以使用不同的库。

2 个答案:

答案 0 :(得分:2)

使用needed functions的简单逻辑:

make 
  VideoCapture
  VideoWriter

do
   fr = cv.GrabFrame until file end
   if 0 = (counter % 100)
        WriteFrame(writer, fr)

Python examples

答案 1 :(得分:1)

使用ffmpeg并创建一些自定义bash功能:

subsample () { export target=$2 ; find . -type f -name "*$1*" \
              -execdir bash -c 'ffmpeg -i "${0}" -vf "select=not(mod(n\,100))" \
              -vsync vfr -q:v 2 "${target}/${0}_%03d.png"' {} \; \
              -execdir bash -c 'ffmpeg -r 60 -f image2 -i "${target}/${0}_%03d.png" \
              -vcodec libx264 -crf 25 -pix_fmt yuv420p "${target}/clip_${0}"' {} \; \
              ; rm -f ${target}/*$1_*.png ;
             }

subconcat () { export target=$2 ; ffmpeg -f concat -safe 0 -i \
              <(printf "file '$PWD/%s'\n" ./clip_*.${1}) -copytb 1 \
              -c copy ${2}/combined_output.${1} ; 
             }

将功能保存在~/.bash_profile

$ source ~/.bash_profile

<强> 概要

subsample|subconcat <ext> <target path>

(例如,pwd /path/movies):

subsample avi /path/to/output

subsample - 以递归方式查找任何avi并将每第100帧合并为一个新的视频@目标。

subconcat - 结合指定分机@ target的所有clip_*.ext个视频。

  

假设您要调整ffmpeg设置以适合您,   虽然上面的例子可以让你大致了解只使用ffmpeg和bash find的可能性。