视频怎么输出JSON格式:从元数据提取到结构化存储全解析
在现代数据处理与开发场景中,视频内容往往需要与结构化数据结合,以实现高效检索、分析或集成,JSON(JavaScript Object Notation)以其轻量、易读、易解析的特性,成为视频数据交互的理想格式,视频如何输出JSON格式?本文将从核心概念、具体方法、工具选择及代码实现四个维度,详细拆解视频到JSON的转换流程。
核心概念:视频输出JSON的本质是什么?
视频本身是二进制文件(如MP4、AVI、MOV等),无法直接转为JSON,所谓“视频输出JSON”,本质是提取视频的元数据(metadata)或关键信息,并将其组织成JSON格式的结构化数据,这些信息可能包括:
- 基础元数据:时长、分辨率(宽/高)、编码格式(H.264、HEVC等)、比特率、帧率、创建时间、文件大小等;
- 技术参数:音频轨道信息(编码格式、采样率、声道数)、字幕轨道语言、编码器版本等;分析数据**:通过AI提取的场景标签(如“户外”“人物”)、关键帧描述、语音转文本结果、物体检测框等;
- 自定义信息:用户添加的标题、描述、标签、上传时间等。
具体方法:如何将视频信息转为JSON?的不同,视频输出JSON的方法可分为三类:直接提取元数据、通过工具/库解析、结合AI生成内容数据。
直接提取元数据:利用系统或工具的基础信息
无需复杂编程,通过系统命令或工具快速获取基础元数据并转为JSON。
-
Windows系统:使用
PowerShell的Get-FileItem和Get-VideoInfo(需安装MediaInfo模块)# 安装MediaInfo模块(若未安装):Install-Module -Name MediaInfo $videoPath = "C:\Videos\sample.mp4" $mediaInfo = Get-MediaInfo -Path $videoPath | ConvertTo-Json -Depth 5 $mediaInfo | Out-File -FilePath "C:\Output\video_meta.json"
输出JSON示例:
{ "General": { "Format": "MPEG-4", "Duration": "00:01:30.000", "FileSize": "15678912", "VideoCount": 1, "AudioCount": 1 }, "Video": { "Format": "AVC", "Width": 1920, "Height": 1080, "FrameRate": 30.0, "BitRate": "5000" }, "Audio": { "Format": "AAC", "SampleRate": 48000, "Channels": 2 } } -
macOS/Linux系统:使用
ffprobe(FFmpeg工具集)# 安装FFmpeg:macOS用brew install ffmpeg,Linux用apt/yum install ffmpeg ffprobe -v quiet -print_format json -show_format -show_streams input.mp4 > video_meta.json
输出JSON为标准FFmpeg元数据结构,包含
format(整体格式信息)和streams(音视频流详细信息)。
编程实现:用代码提取并自定义JSON结构
通过Python、JavaScript等语言调用视频处理库,灵活提取所需信息并生成JSON,以Python为例,常用库有moviepy、opencv-python、json。
示例1:用moviepy提取基础元数据
from moviepy.editor import VideoFileClip
import json
def video_to_json(video_path):
clip = VideoFileClip(video_path)
video_info = {
"filename": video_path.split("/")[-1],
"duration": clip.duration,
"resolution": {"width": clip.size[0], "height": clip.size[1]},
"fps": clip.fps,
"audio": {
"has_audio": clip.audio is not None,
"duration": clip.audio.duration if clip.audio else None
}
}
clip.close()
return json.dumps(video_info, indent=2, ensure_ascii=False)
# 使用示例
json_output = video_to_json("sample.mp4")
with open("video_info.json", "w", encoding="utf-8") as f:
f.write(json_output)
输出JSON:
{
"filename": "sample.mp4",
"duration": 90.0,
"resolution": {
"width": 1920,
"height": 1080
},
"fps": 30.0,
"audio": {
"has_audio": true,
"duration": 90.0
}
}
示例2:用opencv-python提取帧数据(关键帧图片信息)
若需将视频关键帧转为图片并存储路径到JSON,可结合OpenCV:
import cv2
import json
import os
def extract_keyframes(video_path, output_dir="keyframes", interval=5):
os.makedirs(output_dir, exist_ok=True)
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)
keyframes = []
frame_count = 0
while True:
ret, frame = cap.read()
if not ret:
break
# 每interval秒提取一帧
if frame_count % (interval * fps) == 0:
frame_path = f"{output_dir}/frame_{frame_count}.jpg"
cv2.imwrite(frame_path, frame)
keyframes.append({
"frame_number": frame_count,
"timestamp": frame_count / fps,
"image_path": frame_path
})
frame_count += 1
cap.release()
return json.dumps({"keyframes": keyframes}, indent=2)
# 使用示例
json_output = extract_keyframes("sample.mp4", interval=10)
with open("keyframes.json", "w") as f:
f.write(json_output)
输出JSON:
{
"keyframes": [
{
"frame_number": 0,
"timestamp": 0.0,
"image_path": "keyframes/frame_0.jpg"
},
{
"frame_number": 300,
"timestamp": 10.0,
"image_path": "keyframes/frame_300.jpg"
}
]
}
结合AI:生成内容分析型JSON
若需视频的语义信息(如场景描述、语音文字、物体检测),需调用AI模型分析后转为JSON,以Python的whisper(语音转文字)和paddleocr(文字识别)为例:
示例:语音转文字后存入JSON
import whisper
import json
def audio_to_json(video_path):
model = whisper.load_model("base") # 加载基础模型
result = model.transcribe(video_path, language="zh") # 转写为中文
audio_text = {
"filename": video_path.split("/")[-1],
"text": result["text"],
"segments": [
{
"start": seg["start"],
"end": seg["end"],
"text": seg["text"]
} for seg in result["segments"]
]
}
return json.dumps(audio_text, indent=2, ensure_ascii=False)
# 使用示例
json_output = audio_to_json("sample.mp4")
with open("audio_text.json", "w", encoding="utf-8") as f:
f.write(json_output)
输出JSON:
{
"filename": "sample.mp4",
"text": "今天天气真好,我们一起去公园吧。",
"segments": [
{
"start": 0.0,
"end": 3.5,
"text": "今天天气真好,"
},
{
"start": 3.5,
"end": 7.2,
"text": "我们一起去公园吧。"
}
]
}
工具推荐:高效处理视频转JSON的利器
| 工具/库 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| FFmpeg (ffprobe) | 快速提取基础元数据 | 命令行简洁,支持几乎所有格式 | 需解析命令行输出,自定义灵活性低 |
| MediaInfo | 跨平台元数据提取(GUI/CLI/库) | 信息全面,支持多语言 | 编程接口不如FFmpeg灵活 |
| moviepy | Python视频处理(元数据+剪辑) | 易用,适合简单任务 | 性能较低,不适合大视频 |
| opencv-python | 提取帧数据、图像分析 |



还没有评论,来说两句吧...