Example output
{
  "format": {
    "size": "3772833",
    "tags": {
      "encoder": "Lavf59.27.100",
      "major_brand": "isom",
      "minor_version": "512",
      "compatible_brands": "isomiso2avc1mp41"
    },
    "bit_rate": "3742889",
    "duration": "8.064000",
    "filename": "/tmp/videoapi-job-434819597/in0.mp4",
    "nb_streams": 2,
    "start_time": "0.000000",
    "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
    "nb_programs": 0,
    "probe_score": 100,
    "format_long_name": "QuickTime / MOV"
  },
  "streams": [
    {
      "id": "0x1",
      "refs": 1,
      "tags": {
        "language": "und",
        "vendor_id": "[0][0][0][0]",
        "handler_name": "VideoHandler"
      },
      "index": 0,
      "level": 31,
      "width": 1280,
      "height": 720,
      "is_avc": "true",
      "pix_fmt": "yuv420p",
      "profile": "High",
      "bit_rate": "3613600",
      "duration": "8.041667",
      "codec_tag": "0x31637661",
      "nb_frames": "193",
      "start_pts": 0,
      "time_base": "1/12288",
      "codec_name": "h264",
      "codec_type": "video",
      "film_grain": 0,
      "start_time": "0.000000",
      "coded_width": 1280,
      "disposition": {
        "dub": 0,
        "forced": 0,
        "lyrics": 0,
        "comment": 0,
        "default": 1,
        "karaoke": 0,
        "captions": 0,
        "metadata": 0,
        "original": 0,
        "dependent": 0,
        "still_image": 0,
        "attached_pic": 0,
        "descriptions": 0,
        "clean_effects": 0,
        "visual_impaired": 0,
        "hearing_impaired": 0,
        "timed_thumbnails": 0
      },
      "duration_ts": 98816,
      "field_order": "progressive",
      "coded_height": 720,
      "has_b_frames": 2,
      "r_frame_rate": "24/1",
      "avg_frame_rate": "24/1",
      "extradata_size": 45,
      "chroma_location": "left",
      "closed_captions": 0,
      "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
      "nal_length_size": "4",
      "codec_tag_string": "avc1",
      "bits_per_raw_sample": "8"
    },
    {
      "id": "0x2",
      "tags": {
        "language": "und",
        "vendor_id": "[0][0][0][0]",
        "handler_name": "SoundHandler"
      },
      "index": 1,
      "profile": "LC",
      "bit_rate": "131163",
      "channels": 2,
      "duration": "8.064000",
      "codec_tag": "0x6134706d",
      "nb_frames": "253",
      "start_pts": 0,
      "time_base": "1/32000",
      "codec_name": "aac",
      "codec_type": "audio",
      "sample_fmt": "fltp",
      "start_time": "0.000000",
      "disposition": {
        "dub": 0,
        "forced": 0,
        "lyrics": 0,
        "comment": 0,
        "default": 1,
        "karaoke": 0,
        "captions": 0,
        "metadata": 0,
        "original": 0,
        "dependent": 0,
        "still_image": 0,
        "attached_pic": 0,
        "descriptions": 0,
        "clean_effects": 0,
        "visual_impaired": 0,
        "hearing_impaired": 0,
        "timed_thumbnails": 0
      },
      "duration_ts": 258048,
      "sample_rate": "32000",
      "r_frame_rate": "0/0",
      "avg_frame_rate": "0/0",
      "channel_layout": "stereo",
      "extradata_size": 5,
      "bits_per_sample": 0,
      "codec_long_name": "AAC (Advanced Audio Coding)",
      "codec_tag_string": "mp4a"
    }
  ]
}

Media Inspector

Object·Video-API·by eachlabs

Media Inspector reads any video and returns full technical metadata such as duration, resolution, codecs, and streams as clean JSON on each::labs.

Runtime (p50)
1m
Estimated price
$1.80 / unit
Call the API
prediction.sh
sh
curl -X POST \
  -H "Authorization: Bearer $EACHLABS_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "media-inspector",
    "version": "0.0.1",
    "input": {
        "media": "https://cdn-us.eachlabs.ai/defaults/cd288736ed0e4005ae31cace88b52ebc.mp4"
    },
    "webhook_url": ""
}' \
  https://api.eachlabs.ai/v1/prediction/

Related models

2 models
* FAQ

About Media Inspector

01 / 03

What does Media Inspector do?

Media Inspector analyzes any video and returns its technical details as structured JSON, including duration, resolution, frame rate, codecs, and stream layout. It runs as a fast, no-render probe on the each::labs Video API, so you can validate files and read metadata before starting heavier processing.