使用 python 和 ffprobe 查找具有特定编解码器的文件

使用 python 和 ffprobe 查找具有特定编解码器的文件

我正在尝试在具有许多子目录的目录中查找所有带有编解码器 h264 的视频文件。

我已经编写了一些适用于单个文件的部分,但我想要一个文件夹中所有子目录中所有文件的报告。

以下是我目前所拥有的:

import os
import sys
import json

inputPath = '/home/Videos/Vacation/2019 - 07/'

codec = 'h264'
type = 'video'

cmd = 'ffprobe -v quiet -show_streams -print_format json ' + inputPath
output = os.popen(cmd).read()
output = json.loads(output)

for stream in output['streams']:
    if stream['codec_name'] == codec and stream['codec_type'] == type:
        print(inputPath)
        sys.exit(0)

但有两个问题我希望有人能帮忙:

  1. 目录中有空格,因此我无法将它们原样传递给命令,需要转义这些字符。有没有一种简单的方法可以在 Python 中做到这一点?
  2. 我需要循环遍历 mkv 和 mp4 文件的所有子目录和子子目录。处理这个问题的最佳方法是什么?

提前致谢

答案1

os.walk就可以了。您所要做的就是指定一个起始目录和一些参数,然后在for循环中使用它。

for dpath, dname, filenames in os.walk('/home/Videos/Vacation/2019 - 07/'):
    ...

从文档(https://docs.python.org/3/library/os.html):

 os.walk(top, topdown=True, onerror=None, followlinks=False)

 Generate the file names in a directory tree by walking the tree
 either top-down or bottom-up. For each directory in the tree
 rooted at directory top (including top itself), it yields a
 3-tuple (dirpath, dirnames, filenames).

相关内容