视频元数据

编码/时长/码率/分辨率

410 次访问
VIDEO METADATA

视频元数据

查看视频文件分辨率 / 时长 / 编码 / 帧率 / 比特率 · 浏览器本地解析

🎬
点击 / 拖拽视频文件
支持 MP4 / WebM / MOV / OGG 等浏览器原生格式

支持格式与限制

浏览器原生支持:MP4 (H.264/H.265) / WebM (VP8/VP9/AV1) / Ogg (Theora)。Safari 还支持 MOV。

提取信息:分辨率(width × height)/ 时长 / 视频/音频轨道数 / 容器类型。详细编码参数(如 H.264 profile / 比特率)需要 FFmpeg.wasm 解析。

本地处理:所有元数据用浏览器 HTMLVideoElement API 读取,文件永不上传。

关于本工具

了解工具定位 · 使用场景 · 对比优势

上传一个视频文件,立即提取编码格式、时长、码率、分辨率等元数据。适合视频编辑核对素材参数、开发者调试输出、内容创作者检查上传规格。文件仅在浏览器本地处理,不上传服务器。

使用场景

🎬

视频投稿前校验

视频创作者在 B 站 / 抖音等平台投稿,平台对编码、码率、分辨率有明确要求(如 H.264、≤ 20 Mbps、1080p)。本工具一键读取本地视频的编码格式、总码率、分辨率、时长,提前发现不符合平台规格的视频,避免上传后转码失败或画质被压缩。

📦

视频批量转码前分析

后期制作团队需将 200 个素材统一转码为 ProRes 422,但原始素材编码混杂(H.264 / H.265 / VP9),码率从 5 Mbps 到 50 Mbps 不等。本工具批量读取每个文件的编码、码率、分辨率,快速筛选出码率过低(< 10 Mbps)或分辨率异常的素材,避免转码后出现画质断层或黑边。

🔍

视频文件完整性检测

从网盘 / 下载站获取的 MP4 文件可能因传输中断导致时长显示异常(如实际 10 分钟但元数据只记录 3 秒)。本工具读取视频的精确时长和编码信息,与文件大小对比——若时长极短但体积巨大,或编码字段为空,可判定文件损坏,避免导入剪辑软件后崩溃。

📺

直播录制文件质量评估

直播运营者使用 OBS 录制 4K 直播流,但回看发现画面模糊。本工具读取录制文件的码率与分辨率——若分辨率标注 4K 但码率仅 8 Mbps,说明 OBS 设置中码率过低导致画质损失;若编码为 H.265 但播放器不支持,则需重新封装。帮助快速定位录制参数问题。

📱

手机视频压缩前评估

手机拍摄的 4K 60fps 视频体积巨大(1 分钟约 400 MB),想压缩到 50 MB 以内发送微信,但不知该降到多少码率。本工具读取原始视频的码率和分辨率,给出压缩建议:若原始码率 50 Mbps,压缩到 10 Mbps 后分辨率保持 1080p,体积可缩小 80%,同时画质肉眼几乎无差异。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具MediaInfo传统方法(ffprobe CLI)
数据隐私纯浏览器处理,不上传文件需下载安装,本地处理本地命令行处理,无上传
使用门槛打开网页即用,无需安装需下载安装,有学习成本需熟悉命令行操作
处理速度1 秒内出结果1-2 秒2-5 秒(含命令输入)
文件大小限制取决于浏览器内存,通常 ≤2GB无限制无限制
平台兼容所有现代浏览器(Win/Mac/Linux)Windows/macOS/Linux 桌面端需安装 FFmpeg 的环境
批量处理单次单文件支持批量拖拽支持脚本批量处理
输出格式结构化表格,直接可读多视图(文本/树/图表)原始文本输出,需自行解析
离线可用需网络加载 WASM完全离线完全离线

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 拖拽或点击上传视频文件,支持 MP4、MOV、AVI 等常见格式,单文件 ≤ 2GB
  2. 工具自动解析视频,提取编码格式、时长、码率与分辨率信息
  3. 在结果面板中查看各项元数据,支持一键复制单条或全部数据
  4. 点击「导出报告」下载 JSON 格式的完整元数据文件

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
https://example.com/videos/sample.mp4编码: H.264 | 时长: 00:05:30.12 | 码率: 2.5 Mbps | 分辨率: 1920x1080典型场景:最常见的网络视频格式与分辨率
https://example.com/videos/short_clip.mov编码: ProRes 422 | 时长: 00:00:03.50 | 码率: 45.8 Mbps | 分辨率: 3840x2160边界 case:4K 高码率短视频,常见于专业剪辑
https://example.com/videos/animation.webm编码: VP9 | 时长: 00:02:15.00 | 码率: 1.2 Mbps | 分辨率: 1280x720典型场景:WebM 格式与 VP9 编码,用于网页
https://example.com/videos/old_video.avi编码: MPEG-4 Visual | 时长: 01:23:45.30 | 码率: 1.8 Mbps | 分辨率: 720x576边界 case:老旧 AVI 容器与标清分辨率
https://example.com/videos/vertical_9_16.mp4编码: H.265 | 时长: 00:00:15.00 | 码率: 3.0 Mbps | 分辨率: 1080x1920典型场景:竖屏短视频,常见于社交媒体
https://example.com/videos/very_low_bitrate.3gp编码: H.263 | 时长: 00:10:00.00 | 码率: 64 Kbps | 分辨率: 176x144边界 case:极低码率与分辨率,常见于老式手机
https://example.com/videos/corrupted_header.mp4错误:无法解析文件头,请确认文件未损坏易错 case:文件头损坏时工具无法读取元数据
https://example.com/videos/audio_only.m4a错误:输入文件不含视频轨道易错 case:纯音频文件会被工具识别并提示

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 把视频文件路径当输入拖入

错误
C:\Users\张三\Downloads\demo.mp4
修复
直接拖拽视频文件到上传区域,或点击上传按钮选择文件

工具运行在浏览器中,无法访问本地文件系统路径;必须通过 File API 读取文件内容

2. 上传非视频文件(如 .txt .zip)

错误
上传一个 .txt 文本文件或 .zip 压缩包
修复
只上传 .mp4 .mov .avi .mkv .webm 等视频格式文件

FFmpeg 在解析非视频文件时会立即报错或返回空结果;工具前端对 MIME 类型做了过滤,但用户仍可能绕过

3. 误把码率单位当比特率

错误
看到输出 "码率: 2000" 以为单位是 kbps
修复
输出码率单位是 kbps(千比特每秒),2000 kbps ≈ 2 Mbps

FFmpeg 默认以 bit/s 计算,工具内部转换为 kbps 显示;部分播放器显示 Mbps 导致用户误解

4. 认为分辨率越高画质一定越好

错误
只看分辨率(如 1920×1080)判断视频清晰
修复
同时检查码率:1080p 视频码率低于 1000 kbps 时画质明显差于 720p 高码率

分辨率只决定像素数量,码率决定每个像素分配的数据量;低码率高分辨率反而更模糊

5. 把帧率当视频流畅度唯一指标

错误
认为 60fps 一定比 30fps 流畅
修复
检查帧率的同时查看编码格式(H.264 vs H.265)和码率是否匹配

60fps 需要双倍码率才能保持同等画质;低码率 60fps 可能比高码率 30fps 更卡顿

6. 上传损坏或不完整的视频文件

错误
从下载一半的网站复制 .mp4 文件直接上传
修复
先用播放器确认视频能完整播放,或检查文件大小是否与源文件一致

FFmpeg 对损坏文件会返回部分元数据(如时长可能为 0),但工具无法自动修复;结果不可靠

7. 误解时长显示格式

错误
看到 "时长: 01:23:45.678" 以为是 1 小时 23 分 45 秒 678 毫秒
修复
正确理解:01:23:45.678 = 1 小时 23 分 45 秒 678 毫秒,与常见播放器显示一致

FFmpeg 输出时长格式为 HH:MM:SS.mmm,部分用户误以为最后两位是帧数或百分秒

8. 上传超大文件(>2GB)导致浏览器崩溃

错误
上传一个 4K 电影文件(约 15GB)
修复
先确认文件大小:浏览器 WASM 内存限制通常 2-4GB,建议上传 ≤1GB 的片段

WASM 版 FFmpeg 在浏览器中运行,受限于浏览器内存(Chrome 约 2GB);超大文件会导致标签页崩溃

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

bitrate = file_size / duration

变量说明

  • bitrate — 视频码率,单位 bps
  • file_size — 视频文件总大小,单位 bit
  • duration — 视频总时长,单位秒

示例

一个 1080p 视频,文件大小 500 MB(500 × 8 × 1024 × 1024 = 4,194,304,000 bit),时长 120 秒。码率 = 4,194,304,000 / 120 ≈ 34,952,533 bps ≈ 34.95 Mbps。

适用范围

适用于恒定码率(CBR)或平均码率(ABR)视频。可变码率(VBR)视频的瞬时码率会大幅波动,此公式仅计算整体平均码率。数据来源:ITU-T H.264 / H.265 标准及 FFmpeg 文档。

原理图

用户上传视频选择本地文件FFmpeg.wasm解析容器 / 流信息提取编码 / 时长等结构化结果编码 / 码率 / 分辨率时长 / 帧率 / 像素比可复制 / 下载报告文件不离开浏览器纯 WASM 本地运算无需上传服务器
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import subprocess
import json

def get_video_metadata(filepath: str) -> dict:
    """使用 ffprobe 获取视频编码、时长、码率、分辨率"""
    cmd = [
        "ffprobe", "-v", "quiet", "-print_format", "json",
        "-show_format", "-show_streams", filepath
    ]
    result = subprocess.run(cmd, capture_output=True, text=True)
    data = json.loads(result.stdout)

    # 取第一个视频流
    video_stream = next(s for s in data["streams"] if s["codec_type"] == "video")

    metadata = {
        "codec": video_stream.get("codec_name"),
        "duration": float(data["format"]["duration"]),  # 秒
        "bitrate": int(data["format"]["bit_rate"]),      # bps
        "width": video_stream.get("width"),
        "height": video_stream.get("height"),
    }
    return metadata

# 示例:假设本地有 input.mp4
# print(get_video_metadata("input.mp4"))
# 输出示例:{'codec': 'h264', 'duration': 120.5, 'bitrate': 2500000, 'width': 1920, 'height': 1080}
package main

import (
	"encoding/json"
	"fmt"
	"os/exec"
	"strconv"
)

type VideoMeta struct {
	Codec    string  `json:"codec"`
	Duration float64 `json:"duration"`
	Bitrate  int     `json:"bitrate"`
	Width    int     `json:"width"`
	Height   int     `json:"height"`
}

func getVideoMetadata(filepath string) (*VideoMeta, error) {
	// 使用 ffprobe 输出 JSON
	cmd := exec.Command("ffprobe", "-v", "quiet", "-print_format", "json",
		"-show_format", "-show_streams", filepath)
	out, err := cmd.Output()
	if err != nil {
		return nil, err
	}

	var raw map[string]interface{}
	if err := json.Unmarshal(out, &raw); err != nil {
		return nil, err
	}

	streams := raw["streams"].([]interface{})
	var videoStream map[string]interface{}
	for _, s := range streams {
		st := s.(map[string]interface{})
		if st["codec_type"] == "video" {
			videoStream = st
			break
		}
	}

	format := raw["format"].(map[string]interface{})
	duration, _ := strconv.ParseFloat(format["duration"].(string), 64)
	bitrate, _ := strconv.Atoi(format["bit_rate"].(string))

	meta := &VideoMeta{
		Codec:    videoStream["codec_name"].(string),
		Duration: duration,
		Bitrate:  bitrate,
		Width:    int(videoStream["width"].(float64)),
		Height:   int(videoStream["height"].(float64)),
	}
	return meta, nil
}

func main() {
	// 示例:假设本地有 input.mp4
	// meta, err := getVideoMetadata("input.mp4")
	// if err != nil { panic(err) }
	// fmt.Printf("%+v\n", meta)
	// 输出:&{Codec:h264 Duration:120.5 Bitrate:2500000 Width:1920 Height:1080}
}
const { execSync } = require('child_process');

function getVideoMetadata(filepath) {
  // 调用 ffprobe 获取 JSON 格式的元数据
  const cmd = `ffprobe -v quiet -print_format json -show_format -show_streams "${filepath}"`;
  const stdout = execSync(cmd).toString();
  const data = JSON.parse(stdout);

  // 找到第一个视频流
  const videoStream = data.streams.find(s => s.codec_type === 'video');

  return {
    codec: videoStream.codec_name,
    duration: parseFloat(data.format.duration),   // 秒
    bitrate: parseInt(data.format.bit_rate, 10),  // bps
    width: videoStream.width,
    height: videoStream.height,
  };
}

// 示例:假设本地有 input.mp4
// const meta = getVideoMetadata('input.mp4');
// console.log(meta);
// 输出:{ codec: 'h264', duration: 120.5, bitrate: 2500000, width: 1920, height: 1080 }

常见问题

8 个高频疑问

这个视频元数据工具支持哪些视频格式?
支持 FFmpeg 能解析的所有常见格式:MP4、AVI、MKV、MOV、FLV、WMV、WebM、TS、MTS 等。不支持的格式极少,比如某些老旧私有编码的 CCTV 录像或加密流媒体(如 M3U8 直播流)。如果上传后提示无法解析,建议先用格式工厂等工具转成 MP4 再试。注意:只读取元数据,不上传视频文件,解析在浏览器本地完成,所以格式兼容性取决于你浏览器对 FFmpeg WASM 的支持(Chrome/Edge 最新版最佳)。
为什么工具显示的码率和时长,跟我用播放器看的数值不一样?
差几 Kbps 或零点几秒是正常的。播放器通常显示的是「平均码率」(文件总比特数 ÷ 时长),本工具用 FFmpeg 读取的可能是「编码器写入的标称码率」或「流级别码率头信息」,两者有细微差异。时长差异多发生在 VBR(可变码率)视频或片尾黑帧部分——FFmpeg 读的是容器时间基,某些播放器会做帧级四舍五入。想确认的话,可以拿同一个文件对比 Mediainfo 桌面版,结果应该一致。
视频分辨率显示的是 1920×1080,但实际看起来不清晰,是不是工具读错了?
工具读取的分辨率是「存储分辨率」——视频文件里记录的宽高像素数,不等于「有效分辨率」。很多短视频平台或录屏软件会把低分辨率视频强制拉伸到 1920×1080 再导出,实际内容可能只有 720×480 的清晰度。要判断真实画质,还要看码率:一个 1920×1080 但码率只有 500 Kbps 的视频,大概率是被压缩过度了。本工具同时显示分辨率和码率,结合起来判断比单看分辨率更准确。
这个工具是免费的吗?有没有次数或文件大小限制?
完全免费,没有次数限制。文件大小限制取决于浏览器的内存——FFmpeg WASM 在浏览器端运行,视频文件会被加载到内存中解析,所以理论上单个文件不能超过浏览器可用内存(通常 2GB 以内,Chrome 默认约 4GB)。实测 200MB 以内的 MP4 文件基本都能流畅处理,超过 1GB 的超大文件(如 4K 长视频)可能因内存不足导致页面崩溃。超大文件建议用桌面端 Mediainfo 或 FFprobe 命令行工具。
上传的视频会不会被上传到服务器?隐私安全吗?
不会上传到任何服务器。整个解析过程使用 FFmpeg 的 WebAssembly 版本在浏览器本地执行——视频文件不会离开你的设备。可以断网后验证:断开 Wi-Fi,刷新页面再上传一个视频,工具仍然能正常显示所有元数据。关闭页面后,浏览器内存中的视频数据即被释放。如果对隐私极度敏感,建议使用开源桌面工具 Mediainfo(离线版)或 FFprobe 命令行。
为什么有些视频的编码格式显示为「unknown」或者乱码?
FFmpeg 通过读取视频容器中的编码标识符(FourCC 或 codec_tag)来判断编码格式。某些非标准编码的视频(如早期手机录制的 3GP、部分监控摄像头的私有编码,或手动修改了文件头的视频)会缺失或篡改这些标识符,导致显示 unknown。另外,极少数加密视频(如某些在线教育平台的 DRM 保护视频)也会拒绝提供编码信息。遇到这种情况,可以尝试用 VLC 播放器打开看看是否正常播放,如果 VLC 能播但本工具不识别,那就是 FFmpeg 的 codec 数据库没收录该编码。
这个工具和 Mediainfo 桌面版比,哪个更准确?
数据来源相同——都依赖 FFmpeg 的解析引擎。核心元数据(分辨率、码率、编码、时长)结果完全一致。区别在于:Mediainfo 桌面版能解析更多专业参数(如 HDR 元数据、色彩空间、音频延迟等),本工具只展示最基础的 4-6 个字段。本工具的优势是无需安装、浏览器即用,适合快速查看基本信息。如果需要分析视频的 HDR 格式或逐帧信息,建议用 Mediainfo 或 FFprobe 命令行。
工具提示「文件格式不支持」或「解析失败」,怎么办?
首先确认文件扩展名是否被改过(如把 .ts 改成 .mp4),FFmpeg 按文件头识别格式,改扩展名不影响。其次尝试用其他工具(如 VLC)打开确认视频本身是否损坏。如果视频正常但本工具解析失败,可能是 FFmpeg WASM 版本不支持该视频的某些特性(如 AV1 编码的新版 MP4、或某些 10bit H.265 视频)。可以尝试在 Chrome 浏览器最新版本中重试,或换用桌面端 Mediainfo。已知问题:部分 HEVC 编码的 MOV 文件(iPhone 拍摄的 4K 60fps)在旧版浏览器中可能解析超时。
选择 打开 +新窗口 esc关闭