【问题标题】:Argparse syntax for video processing用于视频处理的 Argparse 语法
【发布时间】:2021-06-01 11:19:02
【问题描述】:

我正在编写一个 python 脚本来使用 OpenCV 包处理视频。我对python很陌生,所以我面临以下问题。

在代码的最后我想添加下面的代码。 但是,我不知道如何添加我的代码的输入和输出文件。

import argparse

def main(input_, output_):
    pass # do something with the parameters


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='OpenCV video processing')
    parser.add_argument('-i', "--input", help='full path to input video that will be processed')
    parser.add_argument('-o', "--output", help='full path for saving processed video output')
    args = parser.parse_args()

    if args.input is None or args.output is None:
        sys.exit("Please provide path to input and output video files! See --help")

    main(args.input, args.output)

你能帮我理解我填错了什么吗?

【问题讨论】:

  • 您不要将文件名放在代码本身中(如在您的第二个块中),而是放在用于调用此脚本的命令行中。你是如何调用这个脚本的?从操作系统外壳(Windows 或 Linux)或像 sypder 这样的 ide?看来您需要更多有关如何运行 Python 程序的基础知识。
  • 所以你的意思是我必须在命令行中而不是在代码本身中填写输入和输出文件路径?我确实是 Python 新手。我正在使用间谍。任何可以帮助我了解更多信息的资源都非常受欢迎
  • 使用argparse 的全部意义在于让您为不同的运行指定不同的文件名,而无需每次都更改代码。如果您从 OS shell 调用脚本,很容易告诉您如何提供这些名称,但使用 spyder 您只需单击一个按钮即可运行,并且必须在其他窗口中指定名称。我不使用spyder,所以无法提供详细信息。
  • 我更改了标签以更好地反映您问题的核心。

标签: python command-line-arguments spyder argparse


【解决方案1】:

给你:

import argparse
import sys


def main(args):
    print(args.input, args.output)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='OpenCV video processing')
    parser.add_argument('-i', "--input", dest='input', help='full path to input video that will be processed')
    parser.add_argument('-o', "--output", dest='output', help='full path for saving processed video output')
    args = parser.parse_args()

    if args.input is None or args.output is None:
        sys.exit("Please provide path to input and output video files! See --help")

    main(args)

您需要定义一个目标,然后使用它。

PS:我建议您改用click 库...

PS[2]:不知道是不是故意的,但是您问题中的代码缩进错误,如果该代码无论出于何种原因都能正常工作,那将是一个奇迹

【讨论】:

  • 如果我的回答回答了您的问题,请将其标记为已接受的答案。
  • 感谢您快速正确的回复,您能否告诉我在哪里可以定义输入和输出?我在 def (main) 之后添加了代码的开头,但它似乎并没有拉动它们。 cap = cv2.VideoCapture('input.mp4') out = cv2.VideoWriter('output.avi',fourcc, fps, (frame_width, frame_height))
  • 我问的原因是,当我运行代码时,我收到一条错误消息:请提供输入和输出视频文件的路径!见 --help 你能解释一下第二条评论是什么意思吗?代码在哪里缩进错误?
  • 问题不在于他的argparse 设置,click 也不会提供帮助。这是一个更基本的问题,即提供命令行参数意味着什么,尤其是在spyder 环境中。
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2017-07-28
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多