我是视频处理的新手。
我想了解如何阅读以下内容ffmpeg下面的说明
import subprocess L=subprocess.call('ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True)
通过该指令,我该如何调整它来获取给定视频的所有帧?
谢谢
答案1
我想了解如何阅读以下 ffmpeg 指令
您的ffmpeg
命令被脚本半混淆了,因此实际的命令是未知的,但这里是每个选项的解释:
-i
表示输入。-r 1
将输出帧速率设置为 1。如果您想要输出单幅图像或输出所有图像,则无需执行此操作。在此示例中,它用于每秒输出一帧,这会跳过许多帧。-s qvga
将输出宽度 x 高度设置为“qvga”,这是 320x240 的别名。-t 1
将输出持续时间设置为 1 秒。如果您想要输出单个图像或想要输出所有图像,则不需要此设置。新手用户经常添加此设置以尝试输出单个图像,但-frames:v 1
应该使用它。-f image2
一个经常多余的选项,用于设置输出格式或复用器。如果您的输出名称不明确(可能是由于脚本),则使用它。否则,ffmpeg
将自动为图像输出选择适当的复用器。
我该如何调整它来获取给定视频的所有帧?
获取所有帧的最简单的非脚本命令是:
ffmpeg -i input %04d.png
这将输出、、0001.png
等。如果您想要的不仅仅是一个数字序列,您可以使用类似的结果。0002.png
0003.png
output_%05d.png
output_00001.png
有关详细信息,请参阅FFmpeg 文档:图像复用器。
答案2
import subprocess
L=subprocess.call('ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True)
信息:
import subprocess
:子进程模块使您能够从 Python 程序启动新的应用程序。L=subprocess.call(...)
:将方法的输出赋值call()
给变量L
。ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True
:在此处运行命令ffmpeg
-i %s
:输入文件名得到来自videoName
变量 -->input file url
-r 1
:帧速率。-s qvga
:框架尺寸。-f image2
:强制输入或输出文件格式-t 1
:当用作输出选项(在输出 URL 之前)时,在输出持续时间达到持续时间后停止写入输出。% (videoName,frameName)
:Python 字符串格式,将%s
用元组中的项目替换前一个字符串中的序列。shell=True
:利用特定的 shell 功能,如单词拆分或参数扩展
用法:
#!/usr/bin/env python
import subprocess
L=subprocess.call('ffmpeg -r 5 -i out.ogv fmprg_%04d.png', shell=True)
L()
- 使可执行文件:
chmod u+x filename.sh
, - 运行:
./filename.sh
信息:
fmprg_%04d.png
:使用和0000, 0001, 0002, 0004, ...
之间创建图像。fmprg_
.png
读:
man ffmpeg