gpt4 book ai didi

python - FFMPEG python检查字典键是否存在

转载 作者:行者123 更新时间:2023-12-03 01:48:00 26 4
gpt4 key购买 nike

我想检查是否有字典键:"data["streams"][1]["codec_name"]"如果有一个打印几个键的值,如果没有打印“无音频”。实际上,如果没有音频,则整个 data["streams"][1] 都会丢失。现在,即使音频存在,脚本也总是返回 No Audio。我做错了什么?

#!/usr/bin/env python
import subprocess
import json

input_file = raw_input("Please enter the input file path: ")

returned_data = subprocess.check_output(['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_format', '-show_streams', input_file])
data = json.loads(returned_data.decode('utf-8'))
print "==========================Audio============================="
if 'data["streams"][1]["codec_name"]' in data:
print "Codec: %s" %(data["streams"][1]["codec_name"])
print "Sample Rate: %.3f KHz" %(int(data["streams"][1]["sample_rate"])/1000)
print "Bitrate: %d Kbps" %(int(data["streams"][1]["bit_rate"])/1000)
else:
print "NO AUDIO"

最佳答案

当你这样做时

if 'data["streams"][1]["codec_name"]' in data:

你在问 data有一个名为 data["streams"][1]["codec_name"] 的键它没有,所以它永远不会出现。此外,您正在尝试在另一个 dict 中的列表中引用 dict 键,这样做的 pythonic 方式是:
try:
codec = data["streams"][1]["codec_name"]
# print your information here
except (KeyError, IndexError):
print('no audio')

这样做是尝试访问该变量。你抓到 KeyError如果任一键 codec_namestreams不存在,你捕获 IndexError如果 [1]不存在。

然而,作为一个 ffmpeg Nerd ,我会建议一种不同的方式来做到这一点。听起来您的目标是在文件有音频时打印音频信息,然后打印 no audio如果它没有任何音频。我刚刚给出的示例的问题是,如果音频是媒体文件的第二个流,它只会对你有用。音频通常在视频之后,但有时它是无序的,有时有多个音频流,所以我建议您循环遍历每个流,检查它是否是音频流,然后如果是音频,打印信息。这将显示超过 1 个音频流,无论其顺序如何:
audio_streams = 0

if 'streams' in data:
for stream in streams:
if stream['codec_type'] == 'audio':
# print your info here (I'm abbreviating)
print(stream['codec_name'])

if audio_streams == 0:
print('no audio...')

如果您真的只想要来自 1 个音频流的数据,我仍然会执行循环但放置 break打印信息后的声明。

关于python - FFMPEG python检查字典键是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42067350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com