我正在寻找一种在 OS X/Python3.5 中获取.avi
视频文件的方法,每 100 帧进行二次采样,并将这些帧组合成自己的视频。
在我的特殊情况下,视频在 20fps 时为 30 秒,因此新视频只有 6 帧长(我想为多个视频执行此操作,然后稍后将它们组合在一起)。
我安装了opencv
,但找不到有关如何执行此操作的文档。如果更容易,我也可以使用不同的库。
我正在寻找一种在 OS X/Python3.5 中获取.avi
视频文件的方法,每 100 帧进行二次采样,并将这些帧组合成自己的视频。
在我的特殊情况下,视频在 20fps 时为 30 秒,因此新视频只有 6 帧长(我想为多个视频执行此操作,然后稍后将它们组合在一起)。
我安装了opencv
,但找不到有关如何执行此操作的文档。如果更容易,我也可以使用不同的库。
使用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
- 结合clip_*.ext
指定扩展@目标的所有视频。
假设您需要调整
ffmpeg
设置以适合您,尽管上面的示例应该让您大致了解仅使用 ffmpeg 和 bash find 的可能性。