gpt4 book ai didi

python - 如何从 python 中的音频/视频文件中提取元数据和比特率信息

转载 作者:太空宇宙 更新时间:2023-11-04 01:10:50 30 4
gpt4 key购买 nike

我想做的是从音频或视频文件中获取元数据并将其保存到数据库记录中,到目前为止,唯一的方法似乎是使用子进程将 AVCONV 保存到文件中。打开调用然后读取文件,是否有任何图书馆可以这样做以节省一些步骤?我找不到使用 Pydub 或 PySox 的方法。这是我使用的简单的 hamfisted 初学者代码,它确实有效并将比特率、持续时间等信息放入变量 audio_info 中,将元数据放入元数据中。 OGG 输出的工作方式与我测试的其他格式不同(这是大量的视频和音频!)。

    try:
p = subprocess.Popen(["avconv" , "-i" , music_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
retcode = p.wait()
except IOError,e:
pass
extension = uploaded_music_file[-3:]
if "ogg" not in [err , extension]:
if "Metadata:" in err:
list = err.split("Metadata:")
holder = list[1].split("Duration:")
metadata = holder[0]
audio_info = holder[1].replace("At least one output file must be specified","")
print metadata
print audio_info
else:
list = err.split("Duration:")
audio_info = list[1].replace("At least one output file must be specified","")
print "No Metadata"
print audio_info
else:
list = err.split("Duration:")
if "Metadata:" in list[1]:
data = list[1].split("Metadata:")
metadata = data[1].replace("At least one output file must be specified","")
audio_info = data[0]
print metadata
print audio_info
else:
audio_info = list[1].replace("At least one output file must be specified","")
print "No Metadata"
print audio_info
if (audio_info):
print "AUDIO INFO:"
cursor.execute("UPDATE songDB SET audio_info = %s WHERE id = %s" ,[ audio_info , song_id ] )
if (metadata):
print "METADATA:"
cursor.execute("songDB pack_song SET metadata = %s WHERE id = %s" ,[ metadata , song_id ] )

最佳答案

Pydub 确实包含一个用于检索元数据的函数,pydub.utils.mediainfo("/path/to/file"),尽管 pydub 仅设计用于处理音频文件。然而,mediainfo 的当前实现似乎并没有做任何特定于音频的事情,因此它可能适合您。

它返回由 ffmpeg/libav(特别是 ffprobe/avprobe 实用程序)提供的元数据字典

>>> from pydub.utils import mediainfo
>>> mediainfo("/path/to/file.mp3")

对于 pydub 的单元测试使用的 test1.mp3 文件,返回:

{
u'DISPOSITION': {
u'attached_pic': u'0',
u'clean_effects': u'0',
u'comment': u'0',
u'default': u'0',
u'dub': u'0',
u'forced': u'0',
u'hearing_impaired': u'0',
u'karaoke': u'0',
u'lyrics': u'0',
u'original': u'0',
u'visual_impaired': u'0'
},
u'TAG': {u'encoder': u'Lavf55.12.100'},
u'avg_frame_rate': u'0/0',
u'bit_rate': u'96179',
u'bits_per_sample': u'0',
u'channel_layout': u'stereo',
u'channels': u'2',
u'codec_long_name': u'MP3 (MPEG audio layer 3)',
u'codec_name': u'mp3',
u'codec_tag': u'0x0000',
u'codec_tag_string': u'[0][0][0][0]',
u'codec_time_base': u'1/32000',
u'codec_type': u'audio',
u'duration': u'10.044000',
u'duration_ts': u'141740928',
u'filename': u'/Users/jiaaro/Documents/code/pydub/test/data/test1.mp3',
u'format_long_name': u'MP2/3 (MPEG audio layer 2/3)',
u'format_name': u'mp3',
u'id': u'N/A',
u'index': u'0',
u'max_bit_rate': u'N/A',
u'nb_frames': u'N/A',
u'nb_programs': u'0',
u'nb_read_frames': u'N/A',
u'nb_read_packets': u'N/A',
u'nb_streams': u'1',
u'probe_score': u'51',
u'profile': u'unknown',
u'r_frame_rate': u'0/0',
u'sample_fmt': u's16p',
u'sample_rate': u'32000',
u'size': u'120753',
u'start_pts': u'487305',
u'start_time': u'0.034531',
u'time_base': u'1/14112000'
}

关于python - 如何从 python 中的音频/视频文件中提取元数据和比特率信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745134/

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