如何使用Python在二进制状态下编辑视频元数据

2024-05-21 00:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在保存视频的endit元数据之前,我想使用请求库从internet下载一个视频文件

import requests

url = 'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_5mb.mp4'

r = requests.get(url, stream=True)

with open('video.mp4', 'wb') as file:
     file.write(r.content)

我只想在保存文件之前将元数据更改为视频


Tags: 数据samplehttpsimportcomurl视频www
2条回答

我认为那是不可能的。我的方法是先下载视频,然后考虑使用一个库,比如^ {CD1> }或^ {< CD2> }。

我会推荐mutagen,因为我发现它有很好的文档

有关mutagen的信息,请参见此处的安装steps

使用mutagen的示例代码

>>> import mutagen
>>> mutagen.File("11. The Way It Is.ogg")
{'album': [u'Always Outnumbered, Never Outgunned'],
 'title': [u'The Way It Is'], 'artist': [u'The Prodigy'],
 'tracktotal': [u'12'], 'albumartist': [u'The Prodigy'],'date': [u'2004'],
 'tracknumber': [u'11'],
>>> _.info.pprint()
u'Ogg Vorbis, 346.43 seconds, 499821 bps'
>>>

然后要更改标题,只需访问dictionary键并更改其值

from mutagen.flac import FLAC

audio = FLAC("example.flac")
audio["title"] = u"An example"
audio.pprint()
audio.save()

根据AzyCrw4282的答案,诱变剂可以用于在保存文件之前执行您正在查找的操作

用于mutagen.File()的API文档声明它正在寻找一个filething,它是“一个文件名或类似文件的对象”。这意味着您可以将其缓冲到内存中的位置,使用诱变剂修改元数据,然后将其保存到磁盘。请注意,整个二进制响应将在内存中,这可能会导致问题,具体取决于可用的系统资源

from io import BytesIO

import requests
import mutagen

with requests.get(url, stream=True) as r:
    r.raise_for_status()
    buf = BytesIO()
    for chunk in r.iter_content(chunk_size=8192): 
        if chunk: 
            buf.write(chunk)
    buf.seek(0)
    video = mutagen.File(buf)
    # ... do your modifications
    with open('/your/file/path.mp4', 'wb') as f:
        f.write(buf.getbuffer())

相关问题 更多 >