Python使用FFmpeg进行视频抽帧
前言
最近会了很多新东西,到时候会慢慢全部写下来,先把这个写下来
开始
首先是文件选择,这次放弃了上次使用的win32ui
因为这次需要把抽出来的帧放到一个文件夹里,所以用python自带的tkinter
1 | import tkinter as tk |
FFmpeg
因为涉及视频处理,所以要使用ffmpeg
,目前主要有两种通过python使用的方法,第一种是使用anaconda和pip一起安装库和依赖,另一种是下载ffmpeg的发行版通过shell调用,因为第一种太烦这里使用第二种
1 | import subprocess |
首先引入subprocess
subprocess
其实可以比喻成一个包壳的命令行,原则上可以在命令行中实现的事情都可以使用subprocess在python中实现,固然可以实现ffmpeg
1 | subprocess.Popen(ffmpegpath +' -i'+ ' ' + filename+ ' ' +'-qscale:v 1 -qmin 1 -qmax 1 -vsync 0 ' + pathname +'/frame%08d.png', shell=True) |
这里的ffmpegpath
filename
pathname
会稍后再提
路径处理
这里来处理上文提到的路径
ffmpegpath
代表了ffmpeg的文件位置,因为和代码在一个文件夹下,所以可以直接定义
1 | import os |
filename
是用来储存视频文件的路径的变量,而pathname
是用来储存输出文件夹路径的变量,这个时候就需要用到上面引入的tkinter了
1 | pathname=filedialog.askdirectory() |
这样路径也就处理好了
现在再来看subprocess部分的代码就很好理解,用单引号框住的全是ffmpeg的变量,剩下的则是我们定义的变量
最终效果
这里以一段海贼王的视频为例
输出文件夹选择新一个叫做tmp_frames的文件夹
选择文件
在终端检查一下运行状况
输出文件夹
总结
至此工作就已经大致结束了,ffmpeg还可以实现很多其他的功能,像转码录屏等等,我这里抽帧是为了输送到realesrgan进行超分,ffmpeg的github参考在这篇文章的顶部,另外一个是这篇文章的代码
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自zBlog
评论