{
  "date": "2026-11-05",
  "method": "Synthetic encoding comparison; not a bandwidth benchmark or a review of an external service.",
  "source": "FFmpeg testsrc2 built-in pattern; no third-party video or people.",
  "ffmpeg": "ffmpeg version 7.1-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers",
  "units": "kB = 1000 bytes; kbps = 1000 bits per second. File average includes MP4 container overhead; no audio.",
  "fixed": {
    "width": 640,
    "height": 360,
    "duration_seconds": 6,
    "fps": 30,
    "codec": "H.264",
    "preset": "medium",
    "audio": false
  },
  "samples": [
    {
      "id": "still",
      "file": "/assets/research/still.mp4",
      "width": 640,
      "height": 360,
      "duration_seconds": 6,
      "frames_per_second": 30,
      "decoded_frames": 180,
      "unique_decoded_frames": 6,
      "crf": 23,
      "motion": false,
      "bytes": 18700,
      "file_average_kbps": 24.933,
      "sha256": "085d3aea15fc225f3078587cbc36a76a97120b1fdf969e135cb72351ab758301",
      "command": [
        "ffmpeg",
        "-y",
        "-f",
        "lavfi",
        "-i",
        "testsrc2=size=640x360:rate=30:duration=6",
        "-vf",
        "trim=end_frame=1,loop=loop=-1:size=1:start=0,settb=1/30,setpts=N",
        "-t",
        "6",
        "-an",
        "-r",
        "30",
        "-fps_mode",
        "cfr",
        "-c:v",
        "libx264",
        "-preset",
        "medium",
        "-threads",
        "1",
        "-pix_fmt",
        "yuv420p",
        "-movflags",
        "+faststart",
        "-crf",
        "23",
        "still.mp4"
      ]
    },
    {
      "id": "motion",
      "file": "/assets/research/motion.mp4",
      "width": 640,
      "height": 360,
      "duration_seconds": 6,
      "frames_per_second": 30,
      "decoded_frames": 180,
      "unique_decoded_frames": 180,
      "crf": 23,
      "motion": true,
      "bytes": 584461,
      "file_average_kbps": 779.281,
      "sha256": "3ddca02cd732113a397ebe91664ca6ee3397ca0373f8b9c28f1964ade7fc61a7",
      "command": [
        "ffmpeg",
        "-y",
        "-f",
        "lavfi",
        "-i",
        "testsrc2=size=640x360:rate=30:duration=6",
        "-t",
        "6",
        "-an",
        "-r",
        "30",
        "-fps_mode",
        "cfr",
        "-c:v",
        "libx264",
        "-preset",
        "medium",
        "-threads",
        "1",
        "-pix_fmt",
        "yuv420p",
        "-movflags",
        "+faststart",
        "-crf",
        "23",
        "motion.mp4"
      ]
    },
    {
      "id": "motion-small",
      "file": "/assets/research/motion-small.mp4",
      "width": 640,
      "height": 360,
      "duration_seconds": 6,
      "frames_per_second": 30,
      "decoded_frames": 180,
      "unique_decoded_frames": 180,
      "crf": 35,
      "motion": true,
      "bytes": 172336,
      "file_average_kbps": 229.781,
      "sha256": "4a62f814ba7794a52fd834834aad1d31d1f328273db41105a3e45412e2af48e9",
      "command": [
        "ffmpeg",
        "-y",
        "-f",
        "lavfi",
        "-i",
        "testsrc2=size=640x360:rate=30:duration=6",
        "-t",
        "6",
        "-an",
        "-r",
        "30",
        "-fps_mode",
        "cfr",
        "-c:v",
        "libx264",
        "-preset",
        "medium",
        "-threads",
        "1",
        "-pix_fmt",
        "yuv420p",
        "-movflags",
        "+faststart",
        "-crf",
        "35",
        "motion-small.mp4"
      ]
    }
  ],
  "limitations": [
    "One synthetic scene, one encoder and one six-second duration.",
    "Not browser download timing.",
    "CRF is an encoder parameter, not a viewer quality score.",
    "No claim that the measured ratios apply to real adult media."
  ]
}