视频样本帧
Sample frames of video
我正在 OS X/Python3.5 中寻找一种方法来获取 .avi
视频文件,每第 100 帧进行二次采样,然后将这些帧组合成自己的视频。
在我的特定情况下,视频以 20fps 的速度播放 30 秒,因此新视频只有 6 帧长(我想对多个视频执行此操作,然后稍后将它们组合在一起)。
我安装了 opencv
,但找不到有关如何执行此操作的文档。如果更容易的话,我也可以使用不同的库。
needed functions 的简单逻辑:
make
VideoCapture
VideoWriter
do
fr = cv.GrabFrame until file end
if 0 = (counter % 100)
WriteFrame(writer, fr)
使用 ffmpeg
并创建几个自定义 bash
函数:
subsample () { export target= ; find . -type f -name "**" \
-execdir bash -c 'ffmpeg -i "[=10=]" -vf "select=not(mod(n\,100))" \
-vsync vfr -q:v 2 "${target}/[=10=]_%03d.png"' {} \; \
-execdir bash -c 'ffmpeg -r 60 -f image2 -i "${target}/[=10=]_%03d.png" \
-vcodec libx264 -crf 25 -pix_fmt yuv420p "${target}/clip_[=10=]"' {} \; \
; rm -f ${target}/*_*.png ;
}
subconcat () { export target= ; ffmpeg -f concat -safe 0 -i \
<(printf "file '$PWD/%s'\n" ./clip_*.) -copytb 1 \
-c copy /combined_output. ;
}
保存 ~/.bash_profile
中的函数。
$ source ~/.bash_profile
剧情简介
subsample|subconcat <ext> <target path>
(例如密码 /path/movies
):
subsample avi /path/to/output
subsample
- 递归查找任何 avi
并将每第 100 帧组合成一个新的视频@目标。
subconcat
- 合并指定扩展@目标的所有 clip_*.ext
视频。
It's presumed you'll want to adjust the ffmpeg
settings to suit you,
although the examples above should give you a general idea of what is possible using only ffmpeg and bash find.
我正在 OS X/Python3.5 中寻找一种方法来获取 .avi
视频文件,每第 100 帧进行二次采样,然后将这些帧组合成自己的视频。
在我的特定情况下,视频以 20fps 的速度播放 30 秒,因此新视频只有 6 帧长(我想对多个视频执行此操作,然后稍后将它们组合在一起)。
我安装了 opencv
,但找不到有关如何执行此操作的文档。如果更容易的话,我也可以使用不同的库。
needed functions 的简单逻辑:
make
VideoCapture
VideoWriter
do
fr = cv.GrabFrame until file end
if 0 = (counter % 100)
WriteFrame(writer, fr)
使用 ffmpeg
并创建几个自定义 bash
函数:
subsample () { export target= ; find . -type f -name "**" \
-execdir bash -c 'ffmpeg -i "[=10=]" -vf "select=not(mod(n\,100))" \
-vsync vfr -q:v 2 "${target}/[=10=]_%03d.png"' {} \; \
-execdir bash -c 'ffmpeg -r 60 -f image2 -i "${target}/[=10=]_%03d.png" \
-vcodec libx264 -crf 25 -pix_fmt yuv420p "${target}/clip_[=10=]"' {} \; \
; rm -f ${target}/*_*.png ;
}
subconcat () { export target= ; ffmpeg -f concat -safe 0 -i \
<(printf "file '$PWD/%s'\n" ./clip_*.) -copytb 1 \
-c copy /combined_output. ;
}
保存 ~/.bash_profile
中的函数。
$ source ~/.bash_profile
剧情简介
subsample|subconcat <ext> <target path>
(例如密码 /path/movies
):
subsample avi /path/to/output
subsample
- 递归查找任何 avi
并将每第 100 帧组合成一个新的视频@目标。
subconcat
- 合并指定扩展@目标的所有 clip_*.ext
视频。
It's presumed you'll want to adjust the
ffmpeg
settings to suit you, although the examples above should give you a general idea of what is possible using only ffmpeg and bash find.