如何解读下面的ffmpeg指令?

如何解读下面的ffmpeg指令?

我是视频处理的新手。

  1. 我想了解如何阅读以下内容ffmpeg下面的说明

    import subprocess
    L=subprocess.call('ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True)
    
  2. 通过该指令,我该如何调整它来获取给定视频的所有帧?

谢谢

答案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.png0003.pngoutput_%05d.pngoutput_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)

信息:

  1. import subprocess:子进程模块使您能够从 Python 程序启动新的应用程序。

  2. L=subprocess.call(...):将方法的输出赋值call()给变量L

  3. ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True:在此处运行命令ffmpeg

  4. -i %s:输入文件名得到来自videoName变量 -->input file url

  5. -r 1:帧速率。

  6. -s qvga:框架尺寸。

  7. -f image2:强制输入或输出文件格式

  8. -t 1:当用作输出选项(在输出 URL 之前)时,在输出持续时间达到持续时间后停止写入输出。

  9. % (videoName,frameName):Python 字符串格式,将%s用元组中的项目替换前一个字符串中的序列。

  10. 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

https://pythonspot.com/en/tag/subprocess/

相关内容