You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量修改JSON文件中format_name字段的值?

批量修改JSON中format_name字段为MP3/MP4等名称

我是JSON和Python的新手,问题可能比较基础,见谅。我用以下Python代码通过yt-dlp提取视频数据:

import os
import json

def extract_video_data_from_url(url):
    command = f'yt-dlp \"{url}\" -j --no-playlist'
    output = os.popen(command).read()
    print(output)
    video_data = json.loads(output)
    title = video_data["title"]
    formats = video_data["formats"]
    thumbnail = video_data["thumbnail"]
    formats = [extract_format_data(format_data) for format_data in formats]
    return {
        "title": title,
        "formats": formats,
        "thumbnail": thumbnail
    }

提取后生成的JSON中formats数组示例如下:

"formats": [
    {
      "extension": "webm",
      "format_name": "249-0 - audio only (tiny)",
      "url": "https://rr3---sn-npoe7nlz.googlevideo.com/videoplayback?expire=1664538191&ei=74E2Y5-mH5Sl4-EP35CdyAM&ip=180.243.7.35&id=o-AAmP2xRT8Ve3XqKtlFWcogCjzcmOHYaCLBTvtRA-f6yV&itag=249&source=youtube&requiressl=yes&mh=gc&mm=31%2C29&mn=sn-npoe7nlz%2Csn-npoeenly&ms=au%2Crdu&mv=m&mvi=3&pl=24&initcwndbps=447500&vprv=1&xtags=drc%3D1&mime=audio%2Fwebm&ns=wIsmeet1EyLH2WlcZc1VlvEI&gir=yes&clen=5717592&dur=823.441&lmt=1658621716740625&mt=1664516251&fvip=3&keepalive=yes&fexp=24001373%2C24007246&c=WEB&txp=1311224&n=rewrNpMiP3pdRF8H&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIgJJPzkh0yEr857SAAf-uj8yaXUWMPgWY4D26wq-c8_aMCIQDCojLFA8Si9VTutJBJMI8KV34cFarhmkYueIYsXULV3A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAO7zrkQ_e2V_tBVx8qTw6o0zPhnR86gEgH1aMwu3UTTTAiAO4wwWZ6BFnr6k_xUqKtUd10SbChPqE8aqGJHbHb-azw%3D%3D"
    },
    {
      "extension": "m4a",
      "format_name": "140-0 - audio only (tiny)",
      "url": "https://rr3---sn-npoe7nlz.googlevideo.com/videoplayback?expire=1664538191&ei=74E2Y5-mH5Sl4-EP35CdyAM&ip=180.243.7.35&id=o-AAmP2xRT8Ve3XqKtlFWcogCjzcmOHYaCLBTvtRA-f6yV&itag=140&source=youtube&requiressl=yes&mh=gc&mm=31%2C29&mn=sn-npoe7nlz%2Csn-npoeenly&ms=au%2Crdu&mv=m&mvi=3&pl=24&initcwndbps=447500&vprv=1&mime=audio%2Fmp4&ns=wIsmeet1EyLH2WlcZc1VlvEI&gir=yes&clen=13079535&dur=823.472&lmt=1382391261349662&mt=1664516251&fvip=3&keepalive=yes&fexp=24001373%2C24007246&c=WEB&n=rewrNpMiP3pdRF8H&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRQIgBxYlJFbwPupCcNu-3wcjmLawPUA2Am_klM5PzPvwD38CIQCKcoEW9WT4LuiUTy1rqp_KN7t_xwsrHA7fuX7WjItvdA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAO7zrkQ_e2V_tBVx8qTw6o0zPhnR86gEgH1aMwu3UTTTAiAO4wwWZ6BFnr6k_xUqKtUd10SbChPqE8aqGJHbHb-azw%3D%3D"
    }
]

请问如何批量将JSON中format_name字段的值修改为“MP3”或“MP4”这类名称?


解决方案

方法一:在提取数据时直接修改

补全extract_format_data函数,根据格式的MIME类型或扩展名替换format_name:

def extract_format_data(format_data):
    mime_type = format_data.get("mime", "")
    extension = format_data.get("extension", "")
    
    # 自定义规则:音频设为MP3,视频设为MP4
    if "audio" in mime_type:
        format_data["format_name"] = "MP3"
    elif "video" in mime_type:
        format_data["format_name"] = "MP4"
    # 可扩展规则:比如按扩展名指定名称
    # elif extension == "webm":
    #     format_data["format_name"] = "WEBM"
    
    return format_data

这样在处理formats数组时,每个条目的format_name会被自动替换为目标名称。

方法二:修改已保存的JSON文件

如果已经有生成好的JSON文件,可直接读取后批量修改:

import json

# 读取JSON文件
with open("video_data.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 遍历修改每个format的name
for fmt in data["formats"]:
    mime_type = fmt.get("mime", "")
    if "audio" in mime_type:
        fmt["format_name"] = "MP3"
    elif "video" in mime_type:
        fmt["format_name"] = "MP4"

# 保存修改后的文件
with open("modified_video_data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

自定义规则扩展

你可以根据需求调整判断逻辑:

  • 按YouTube的itag值匹配:比如itag 140对应m4a音频,itag 18对应MP4视频,直接判断fmt.get("itag")设置名称
  • 保留音质描述:fmt["format_name"] = f"MP3 ({fmt['format_name'].split('(')[1].split(')')[0]})"
  • 按扩展名精准匹配:比如extension == "m4a"时设为"MP3"

内容的提问来源于stack exchange,提问作者warstha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:05:20