{
  "schemaVersion": 1,
  "generatedAt": "2026-09-11T05:46:54.256Z",
  "source": "https://ffmpeg-cookbook.com",
  "license": {
    "spdx": "CC-BY-4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "FFmpeg Cookbook — https://ffmpeg-cookbook.com",
    "note": "Attribution is the only condition. Commercial use, redistribution and use as AI training or retrieval data are all permitted. The tooling that serves this corpus (the ffmpeg-cookbook-mcp package) is licensed separately."
  },
  "ffmpeg": {
    "version": "8.1-full_build-www.gyan.dev",
    "platform": "win32 x64",
    "verifiedAt": "2026-09-11T05:42:44.680Z"
  },
  "about": "Commands are extracted from published articles. A verified status requires a matching command-set digest and a successful run against the FFmpeg build named in ffmpeg using generated media fixtures. This checks the harness-transformed command, not visual quality or every original input. Other statuses are not verification claims; see verification.reason for skips or changed source.",
  "totals": {
    "commands": 880,
    "verified": 755,
    "notExecuted": 125,
    "articles": 246,
    "benchmarkRows": 60
  },
  "skipReasons": {
    "libaom-av1 too slow for the 60s CI budget": 7,
    "Placeholder filename": 1,
    "MKV/MP4 copy → WebM (container mismatch demo)": 1,
    "Windows-style path": 2,
    "Uses shell variable or substitution": 25,
    "Uses shell pipe": 19,
    "WebM (VP8 fixture) video-copy → MP4": 2,
    "Input filename contains space (didactic)": 17,
    "minterpolate too slow for the 60s CI budget": 1,
    "libvpx-vp9 + chromakey alpha path": 1,
    "Hardware/platform-specific encoder": 4,
    "Uses shell backslash-escaping of filter chars": 1,
    "Japanese placeholder filename": 1,
    "Uses wildcard or sequence pattern": 11,
    "Contains network-protocol URL": 21,
    "Uses shell output redirection": 2,
    "More than 3 -i inputs": 1,
    "Requires specific media device structure": 1,
    "crop larger than test input": 7
  },
  "benchmarks": [
    {
      "preset": "codec-comparison",
      "measuredAt": "2026-08-28T04:44:16.793Z",
      "host": {
        "cpu": "Intel(R) Core(TM) i9-14900KF",
        "gpu": "NVIDIA GeForce RTX 4090",
        "cores": 32,
        "platform": "win32 x64",
        "ffmpegVersion": "8.1-full_build-www.gyan.dev"
      },
      "source": {
        "name": "bbb_1080p_10s.mp4",
        "width": 1920,
        "height": 1080,
        "fps": 30,
        "durationSec": 10,
        "bytes": 30704510
      },
      "equalQuality": [
        {
          "vmaf": 83.53,
          "h265": {
            "id": "x265-crf32",
            "bytes": 1677268,
            "megabytes": 1.6
          },
          "h264Equivalent": {
            "megabytes": 2.46,
            "interpolatedBetween": [
              "x264-crf32",
              "x264-crf30"
            ]
          },
          "h265SmallerByPct": 34.9
        },
        {
          "vmaf": 87.27,
          "h265": {
            "id": "x265-crf30",
            "bytes": 2307443,
            "megabytes": 2.2
          },
          "h264Equivalent": {
            "megabytes": 3.25,
            "interpolatedBetween": [
              "x264-crf30",
              "x264-crf28"
            ]
          },
          "h265SmallerByPct": 32.4
        },
        {
          "vmaf": 90.03,
          "h265": {
            "id": "x265-crf28",
            "bytes": 3189618,
            "megabytes": 3.04
          },
          "h264Equivalent": {
            "megabytes": 4.32,
            "interpolatedBetween": [
              "x264-crf28",
              "x264-crf26"
            ]
          },
          "h265SmallerByPct": 29.5
        },
        {
          "vmaf": 92.94,
          "h265": {
            "id": "x265-crf25",
            "bytes": 5183166,
            "megabytes": 4.94
          },
          "h264Equivalent": {
            "megabytes": 6.79,
            "interpolatedBetween": [
              "x264-crf26",
              "x264-crf23"
            ]
          },
          "h265SmallerByPct": 27.2
        },
        {
          "vmaf": 94.86,
          "h265": {
            "id": "x265-crf22",
            "bytes": 8349037,
            "megabytes": 7.96
          },
          "h264Equivalent": {
            "megabytes": 10.8,
            "interpolatedBetween": [
              "x264-crf23",
              "x264-crf20"
            ]
          },
          "h265SmallerByPct": 26.3
        }
      ],
      "results": [
        {
          "id": "x264-crf20",
          "label": "H.264 CRF 20 / medium",
          "codec": "H.264",
          "crf": 20,
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 20 -preset medium -an output.mp4",
          "seconds": 2.23,
          "speedVsRealtime": 4.48,
          "bytes": 11935768,
          "megabytes": 11.38,
          "sizeVsSourcePct": 38.9,
          "reductionPct": 61.1,
          "vmaf": 95.11
        },
        {
          "id": "x264-crf23",
          "label": "H.264 CRF 23 / medium",
          "codec": "H.264",
          "crf": 23,
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 2.05,
          "speedVsRealtime": 4.87,
          "bytes": 7465152,
          "megabytes": 7.12,
          "sizeVsSourcePct": 24.3,
          "reductionPct": 75.7,
          "vmaf": 93.29
        },
        {
          "id": "x264-crf26",
          "label": "H.264 CRF 26 / medium",
          "codec": "H.264",
          "crf": 26,
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 26 -preset medium -an output.mp4",
          "seconds": 1.89,
          "speedVsRealtime": 5.3,
          "bytes": 4740443,
          "megabytes": 4.52,
          "sizeVsSourcePct": 15.4,
          "reductionPct": 84.6,
          "vmaf": 90.51
        },
        {
          "id": "x264-crf28",
          "label": "H.264 CRF 28 / medium",
          "codec": "H.264",
          "crf": 28,
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium -an output.mp4",
          "seconds": 1.82,
          "speedVsRealtime": 5.5,
          "bytes": 3548962,
          "megabytes": 3.38,
          "sizeVsSourcePct": 11.6,
          "reductionPct": 88.4,
          "vmaf": 87.83
        },
        {
          "id": "x264-crf30",
          "label": "H.264 CRF 30 / medium",
          "codec": "H.264",
          "crf": 30,
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 30 -preset medium -an output.mp4",
          "seconds": 1.77,
          "speedVsRealtime": 5.65,
          "bytes": 2678238,
          "megabytes": 2.55,
          "sizeVsSourcePct": 8.7,
          "reductionPct": 91.3,
          "vmaf": 84.28
        },
        {
          "id": "x264-crf32",
          "label": "H.264 CRF 32 / medium",
          "codec": "H.264",
          "crf": 32,
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 32 -preset medium -an output.mp4",
          "seconds": 1.76,
          "speedVsRealtime": 5.69,
          "bytes": 2055117,
          "megabytes": 1.96,
          "sizeVsSourcePct": 6.7,
          "reductionPct": 93.3,
          "vmaf": 79.7
        },
        {
          "id": "x265-crf22",
          "label": "H.265 CRF 22 / medium",
          "codec": "H.265",
          "crf": 22,
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 22 -preset medium -an output.mp4",
          "seconds": 4.68,
          "speedVsRealtime": 2.14,
          "bytes": 8349037,
          "megabytes": 7.96,
          "sizeVsSourcePct": 27.2,
          "reductionPct": 72.8,
          "vmaf": 94.86
        },
        {
          "id": "x265-crf25",
          "label": "H.265 CRF 25 / medium",
          "codec": "H.265",
          "crf": 25,
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 25 -preset medium -an output.mp4",
          "seconds": 4.07,
          "speedVsRealtime": 2.46,
          "bytes": 5183166,
          "megabytes": 4.94,
          "sizeVsSourcePct": 16.9,
          "reductionPct": 83.1,
          "vmaf": 92.94
        },
        {
          "id": "x265-crf28",
          "label": "H.265 CRF 28 / medium",
          "codec": "H.265",
          "crf": 28,
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -an output.mp4",
          "seconds": 3.52,
          "speedVsRealtime": 2.84,
          "bytes": 3189618,
          "megabytes": 3.04,
          "sizeVsSourcePct": 10.4,
          "reductionPct": 89.6,
          "vmaf": 90.03
        },
        {
          "id": "x265-crf30",
          "label": "H.265 CRF 30 / medium",
          "codec": "H.265",
          "crf": 30,
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 30 -preset medium -an output.mp4",
          "seconds": 3.41,
          "speedVsRealtime": 2.93,
          "bytes": 2307443,
          "megabytes": 2.2,
          "sizeVsSourcePct": 7.5,
          "reductionPct": 92.5,
          "vmaf": 87.27
        },
        {
          "id": "x265-crf32",
          "label": "H.265 CRF 32 / medium",
          "codec": "H.265",
          "crf": 32,
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 32 -preset medium -an output.mp4",
          "seconds": 3.28,
          "speedVsRealtime": 3.05,
          "bytes": 1677268,
          "megabytes": 1.6,
          "sizeVsSourcePct": 5.5,
          "reductionPct": 94.5,
          "vmaf": 83.53
        },
        {
          "id": "x265-crf34",
          "label": "H.265 CRF 34 / medium",
          "codec": "H.265",
          "crf": 34,
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 34 -preset medium -an output.mp4",
          "seconds": 3.33,
          "speedVsRealtime": 3,
          "bytes": 1191753,
          "megabytes": 1.14,
          "sizeVsSourcePct": 3.9,
          "reductionPct": 96.1,
          "vmaf": 78.49
        }
      ]
    },
    {
      "preset": "compress-video",
      "measuredAt": "2026-08-28T04:39:08.045Z",
      "host": {
        "cpu": "Intel(R) Core(TM) i9-14900KF",
        "gpu": "NVIDIA GeForce RTX 4090",
        "cores": 32,
        "platform": "win32 x64",
        "ffmpegVersion": "8.1-full_build-www.gyan.dev"
      },
      "source": {
        "name": "bbb_1080p_10s.mp4",
        "width": 1920,
        "height": 1080,
        "fps": 30,
        "durationSec": 10,
        "bytes": 30704510
      },
      "equalQuality": null,
      "results": [
        {
          "id": "x264-crf23-medium",
          "label": "H.264 CRF 23 / preset medium",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4",
          "seconds": 2.04,
          "speedVsRealtime": 4.89,
          "bytes": 7465152,
          "megabytes": 7.12,
          "sizeVsSourcePct": 24.3,
          "reductionPct": 75.7,
          "vmaf": 93.29,
          "codec": "H.264"
        },
        {
          "id": "x264-crf28-medium",
          "label": "H.264 CRF 28 / preset medium",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4",
          "seconds": 1.79,
          "speedVsRealtime": 5.59,
          "bytes": 3548962,
          "megabytes": 3.38,
          "sizeVsSourcePct": 11.6,
          "reductionPct": 88.4,
          "vmaf": 87.83,
          "codec": "H.264"
        },
        {
          "id": "x264-crf32-fast-720p",
          "label": "H.264 CRF 32 / preset fast / 720p",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 32 -preset fast -vf scale=1280:-2 -c:a aac -b:a 96k output.mp4",
          "seconds": 1.06,
          "speedVsRealtime": 9.45,
          "bytes": 818925,
          "megabytes": 0.78,
          "sizeVsSourcePct": 2.7,
          "reductionPct": 97.3,
          "vmaf": null,
          "codec": "H.264"
        },
        {
          "id": "x265-crf28-medium",
          "label": "H.265 CRF 28 / preset medium",
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4",
          "seconds": 3.7,
          "speedVsRealtime": 2.7,
          "bytes": 3189618,
          "megabytes": 3.04,
          "sizeVsSourcePct": 10.4,
          "reductionPct": 89.6,
          "vmaf": 90.03,
          "codec": "H.265"
        },
        {
          "id": "x265-crf22-slow",
          "label": "H.265 CRF 22 / preset slow",
          "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 22 -preset slow -c:a aac -b:a 192k output.mp4",
          "seconds": 10.43,
          "speedVsRealtime": 0.96,
          "bytes": 9182669,
          "megabytes": 8.76,
          "sizeVsSourcePct": 29.9,
          "reductionPct": 70.1,
          "vmaf": 96.04,
          "codec": "H.265"
        },
        {
          "id": "x264-2mbps",
          "label": "H.264 fixed 2 Mbps",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -c:a aac -b:a 128k output.mp4",
          "seconds": 1.63,
          "speedVsRealtime": 6.12,
          "bytes": 2441866,
          "megabytes": 2.33,
          "sizeVsSourcePct": 8,
          "reductionPct": 92,
          "vmaf": 82.01,
          "codec": "H.264"
        }
      ]
    },
    {
      "preset": "preset-ladder",
      "measuredAt": "2026-08-28T04:47:06.803Z",
      "host": {
        "cpu": "Intel(R) Core(TM) i9-14900KF",
        "gpu": "NVIDIA GeForce RTX 4090",
        "cores": 32,
        "platform": "win32 x64",
        "ffmpegVersion": "8.1-full_build-www.gyan.dev"
      },
      "source": {
        "name": "bbb_1080p_10s.mp4",
        "width": 1920,
        "height": 1080,
        "fps": 30,
        "durationSec": 10,
        "bytes": 30704510
      },
      "equalQuality": null,
      "results": [
        {
          "id": "x264-crf23-ultrafast",
          "label": "H.264 CRF 23 / preset ultrafast",
          "presetName": "ultrafast",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset ultrafast -an output.mp4",
          "seconds": 0.88,
          "speedVsRealtime": 11.37,
          "bytes": 39214633,
          "megabytes": 37.4,
          "sizeVsSourcePct": 127.7,
          "reductionPct": -27.7,
          "vmaf": 91.7,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-veryfast",
          "label": "H.264 CRF 23 / preset veryfast",
          "presetName": "veryfast",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryfast -an output.mp4",
          "seconds": 1.1,
          "speedVsRealtime": 9.11,
          "bytes": 5108370,
          "megabytes": 4.87,
          "sizeVsSourcePct": 16.6,
          "reductionPct": 83.4,
          "vmaf": 88.09,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-fast",
          "label": "H.264 CRF 23 / preset fast",
          "presetName": "fast",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset fast -an output.mp4",
          "seconds": 1.77,
          "speedVsRealtime": 5.64,
          "bytes": 7246823,
          "megabytes": 6.91,
          "sizeVsSourcePct": 23.6,
          "reductionPct": 76.4,
          "vmaf": 92.44,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-medium",
          "label": "H.264 CRF 23 / preset medium",
          "presetName": "medium",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 2.03,
          "speedVsRealtime": 4.93,
          "bytes": 7465152,
          "megabytes": 7.12,
          "sizeVsSourcePct": 24.3,
          "reductionPct": 75.7,
          "vmaf": 93.29,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-slow",
          "label": "H.264 CRF 23 / preset slow",
          "presetName": "slow",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -an output.mp4",
          "seconds": 3.26,
          "speedVsRealtime": 3.07,
          "bytes": 7488198,
          "megabytes": 7.14,
          "sizeVsSourcePct": 24.4,
          "reductionPct": 75.6,
          "vmaf": 93.49,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-slower",
          "label": "H.264 CRF 23 / preset slower",
          "presetName": "slower",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slower -an output.mp4",
          "seconds": 5.34,
          "speedVsRealtime": 1.87,
          "bytes": 7607856,
          "megabytes": 7.26,
          "sizeVsSourcePct": 24.8,
          "reductionPct": 75.2,
          "vmaf": 93.84,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-veryslow",
          "label": "H.264 CRF 23 / preset veryslow",
          "presetName": "veryslow",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset veryslow -an output.mp4",
          "seconds": 8.65,
          "speedVsRealtime": 1.16,
          "bytes": 6946227,
          "megabytes": 6.62,
          "sizeVsSourcePct": 22.6,
          "reductionPct": 77.4,
          "vmaf": 94.26,
          "codec": "H.264"
        }
      ]
    },
    {
      "preset": "quality-metrics",
      "measuredAt": "2026-08-28T10:38:29.373Z",
      "host": {
        "cpu": "Intel(R) Core(TM) i9-14900KF",
        "gpu": "NVIDIA GeForce RTX 4090",
        "cores": 32,
        "platform": "win32 x64",
        "ffmpegVersion": "8.1-full_build-www.gyan.dev"
      },
      "source": {
        "name": "bbb_1080p_10s.mp4",
        "width": 1920,
        "height": 1080,
        "fps": 30,
        "durationSec": 10,
        "bytes": 30704510
      },
      "equalQuality": null,
      "results": [
        {
          "id": "x264-crf18",
          "label": "H.264 CRF 18",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset medium -an output.mp4",
          "seconds": 2.46,
          "speedVsRealtime": 4.06,
          "bytes": 16266727,
          "megabytes": 15.51,
          "sizeVsSourcePct": 53,
          "reductionPct": 47,
          "vmaf": 96.01,
          "psnr": 43.483374,
          "ssim": 0.986785,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23",
          "label": "H.264 CRF 23",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 2.15,
          "speedVsRealtime": 4.65,
          "bytes": 7465152,
          "megabytes": 7.12,
          "sizeVsSourcePct": 24.3,
          "reductionPct": 75.7,
          "vmaf": 93.29,
          "psnr": 40.500074,
          "ssim": 0.974869,
          "codec": "H.264"
        },
        {
          "id": "x264-crf28",
          "label": "H.264 CRF 28",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset medium -an output.mp4",
          "seconds": 1.87,
          "speedVsRealtime": 5.34,
          "bytes": 3548962,
          "megabytes": 3.38,
          "sizeVsSourcePct": 11.6,
          "reductionPct": 88.4,
          "vmaf": 87.83,
          "psnr": 37.397573,
          "ssim": 0.95056,
          "codec": "H.264"
        },
        {
          "id": "x264-crf32",
          "label": "H.264 CRF 32",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 32 -preset medium -an output.mp4",
          "seconds": 1.74,
          "speedVsRealtime": 5.76,
          "bytes": 2055117,
          "megabytes": 1.96,
          "sizeVsSourcePct": 6.7,
          "reductionPct": 93.3,
          "vmaf": 79.7,
          "psnr": 34.910139,
          "ssim": 0.916251,
          "codec": "H.264"
        },
        {
          "id": "x264-crf36",
          "label": "H.264 CRF 36",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 36 -preset medium -an output.mp4",
          "seconds": 1.65,
          "speedVsRealtime": 6.06,
          "bytes": 1251985,
          "megabytes": 1.19,
          "sizeVsSourcePct": 4.1,
          "reductionPct": 95.9,
          "vmaf": 66.97,
          "psnr": 32.604444,
          "ssim": 0.86561,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-720p",
          "label": "H.264 CRF 23 downscaled to 720p",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -vf scale=1280:-2 -an output.mp4",
          "seconds": 1.46,
          "speedVsRealtime": 6.87,
          "bytes": 3562816,
          "megabytes": 3.4,
          "sizeVsSourcePct": 11.6,
          "reductionPct": 88.4,
          "vmaf": 82.23,
          "psnr": 34.668005,
          "ssim": 0.928603,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-blur",
          "label": "H.264 CRF 23 with a slight blur",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -vf gblur=sigma=0.8 -an output.mp4",
          "seconds": 2.06,
          "speedVsRealtime": 4.85,
          "bytes": 4613103,
          "megabytes": 4.4,
          "sizeVsSourcePct": 15,
          "reductionPct": 85,
          "vmaf": 73.57,
          "psnr": 35.319598,
          "ssim": 0.937004,
          "codec": "H.264"
        },
        {
          "id": "x264-crf23-noise",
          "label": "H.264 CRF 23 with added grain",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -vf noise=alls=12:allf=t -an output.mp4",
          "seconds": 4.18,
          "speedVsRealtime": 2.39,
          "bytes": 58608159,
          "megabytes": 55.89,
          "sizeVsSourcePct": 190.9,
          "reductionPct": -90.9,
          "vmaf": 88.41,
          "psnr": 34.092377,
          "ssim": 0.853694,
          "codec": "H.264"
        }
      ]
    },
    {
      "preset": "two-minute-operations",
      "measuredAt": "2026-09-05T02:22:02.160Z",
      "host": {
        "cpu": "Intel(R) Core(TM) i9-14900KF",
        "cores": 32,
        "platform": "win32 x64",
        "ffmpegVersion": "8.1-full_build-www.gyan.dev Copyright (c) 2000-2026 the FFmpeg developers\r"
      },
      "source": {
        "name": "bbb_1080p_120s.mp4",
        "derivedFrom": "bbb_1080p_10s.mp4 looped 12x",
        "width": 1920,
        "height": 1080,
        "fps": 30,
        "durationSec": 120,
        "megabytes": 351.37,
        "credit": "Big Buck Bunny (c) Blender Foundation, CC BY 3.0"
      },
      "equalQuality": null,
      "results": [
        {
          "id": "baseline",
          "label": "再エンコードのみ（フィルタなし）",
          "labelEn": "Re-encode only, no filter",
          "command": "ffmpeg -y -v error -i input.mp4 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 27.97,
          "speedVsRealtime": 4.29,
          "megabytes": 86.26,
          "vsBaselinePct": 0,
          "codec": "H.264"
        },
        {
          "id": "boxblur-filter",
          "label": "boxblur=10:3",
          "labelEn": "boxblur=10:3",
          "command": "ffmpeg -y -v error -i input.mp4 -vf boxblur=10:3 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 59.37,
          "speedVsRealtime": 2.02,
          "megabytes": 14.7,
          "vsBaselinePct": -83,
          "codec": "H.264"
        },
        {
          "id": "eq-filter",
          "label": "eq=brightness=0.1",
          "labelEn": "eq=brightness=0.1",
          "command": "ffmpeg -y -v error -i input.mp4 -vf eq=brightness=0.1 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 27.07,
          "speedVsRealtime": 4.43,
          "megabytes": 86.26,
          "vsBaselinePct": 0,
          "codec": "H.264"
        },
        {
          "id": "hue-filter",
          "label": "hue=h=30:s=1.2",
          "labelEn": "hue=h=30:s=1.2",
          "command": "ffmpeg -y -v error -i input.mp4 -vf hue=h=30:s=1.2 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 27.06,
          "speedVsRealtime": 4.44,
          "megabytes": 88.97,
          "vsBaselinePct": 3.1,
          "codec": "H.264"
        },
        {
          "id": "unsharp-filter",
          "label": "unsharp=5:5:1.0",
          "labelEn": "unsharp=5:5:1.0",
          "command": "ffmpeg -y -v error -i input.mp4 -vf unsharp=5:5:1.0:5:5:0.0 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 32.55,
          "speedVsRealtime": 3.69,
          "megabytes": 140.75,
          "vsBaselinePct": 63.2,
          "codec": "H.264"
        },
        {
          "id": "curves-filter",
          "label": "curves=preset=increase_contrast",
          "labelEn": "curves=preset=increase_contrast",
          "command": "ffmpeg -y -v error -i input.mp4 -vf curves=preset=increase_contrast -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 42.01,
          "speedVsRealtime": 2.86,
          "megabytes": 97.79,
          "vsBaselinePct": 13.4,
          "codec": "H.264"
        },
        {
          "id": "drawbox-filter",
          "label": "drawbox 3個",
          "labelEn": "three drawbox overlays",
          "command": "ffmpeg -y -v error -i input.mp4 -vf drawbox=x=100:y=100:w=300:h=200:color=red:t=4,drawbox=x=500:y=300:w=300:h=200:color=yellow:t=4,drawbox=x=900:y=500:w=300:h=200:color=cyan:t=4 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 31.68,
          "speedVsRealtime": 3.79,
          "megabytes": 87.94,
          "vsBaselinePct": 1.9,
          "codec": "H.264"
        },
        {
          "id": "scale-video",
          "label": "1080p → 720p",
          "labelEn": "1080p to 720p",
          "command": "ffmpeg -y -v error -i input.mp4 -vf scale=1280:720 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 18.43,
          "speedVsRealtime": 6.51,
          "megabytes": 41.14,
          "vsBaselinePct": -52.3,
          "codec": "H.264"
        },
        {
          "id": "color-correction",
          "label": "colorbalance + eq",
          "labelEn": "colorbalance + eq",
          "command": "ffmpeg -y -v error -i input.mp4 -vf colorbalance=rs=0.15:bs=-0.15,eq=saturation=1.1 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 53.29,
          "speedVsRealtime": 2.25,
          "megabytes": 87.71,
          "vsBaselinePct": 1.7,
          "codec": "H.264"
        },
        {
          "id": "lut3d-filter",
          "label": "lut3d（33×33×33）+ eq",
          "labelEn": "lut3d (33x33x33) + eq",
          "command": "ffmpeg -y -v error -i input.mp4 -vf lut3d=file=look.cube,eq=saturation=0.95:contrast=0.98 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 53.26,
          "speedVsRealtime": 2.25,
          "megabytes": 84.21,
          "vsBaselinePct": -2.4,
          "codec": "H.264"
        },
        {
          "id": "deinterlace",
          "label": "yadif（1080i → 30p）",
          "labelEn": "yadif (1080i to 30p)",
          "command": "ffmpeg -y -v error -i input.mp4 -vf yadif=mode=0:parity=-1 -c:v libx264 -crf 23 -preset medium -an output.mp4",
          "seconds": 14,
          "speedVsRealtime": 8.57,
          "megabytes": 67.94,
          "vsBaselinePct": -21.2,
          "codec": "H.264"
        },
        {
          "id": "chromakey-filter",
          "label": "chromakey + overlay",
          "labelEn": "chromakey + overlay",
          "command": "ffmpeg -y -v error -i background.jpg -i greenscreen.mp4 -filter_complex [1:v]chromakey=0x00FF00:0.12:0.08[fg];[0:v][fg]overlay -c:v libx264 -crf 23 -preset medium -shortest output.mp4",
          "seconds": 35.7,
          "speedVsRealtime": 3.36,
          "megabytes": 10.72,
          "vsBaselinePct": -87.6,
          "codec": "H.264"
        },
        {
          "id": "video-format-comparison",
          "label": "VP9 + Opus へ変換",
          "labelEn": "transcode to VP9 + Opus",
          "command": "ffmpeg -y -v error -i input.mp4 -c:v libvpx-vp9 -b:v 0 -crf 33 -c:a libopus -b:a 96k output.webm",
          "seconds": 729.16,
          "speedVsRealtime": 0.16,
          "megabytes": 65.97,
          "vsBaselinePct": -23.5,
          "codec": "VP9"
        },
        {
          "id": "filtergraph-basics",
          "label": "split → 720p と 360p を同時出力",
          "labelEn": "split into 720p and 360p at once",
          "command": "ffmpeg -y -v error -i input.mp4 -filter_complex \"[0:v]split=2[v1][v2];[v1]scale=1280:720[main];[v2]scale=640:360[preview]\" -map \"[main]\" -c:v libx264 -crf 23 -an main.mp4 -map \"[preview]\" -c:v libx264 -crf 28 -an preview.mp4",
          "seconds": 17.52,
          "speedVsRealtime": 6.85,
          "megabytes": 41.14,
          "megabytesSecondOutput": 5.61,
          "vsBaselinePct": -52.3,
          "codec": "H.264"
        },
        {
          "id": "dash-segmenting",
          "label": "DASH セグメント化（4秒）",
          "labelEn": "DASH segmenting (4s)",
          "command": "ffmpeg -y -v error -i input.mp4 -c:v libx264 -b:v 2500k -c:a aac -b:a 128k -f dash -seg_duration 4 output.mpd",
          "seconds": 22.66,
          "speedVsRealtime": 5.3,
          "codec": "H.264"
        },
        {
          "id": "audio-fade",
          "label": "afade（映像は copy）",
          "labelEn": "afade, video copied",
          "command": "ffmpeg -y -v error -i input.mp4 -af afade=t=in:st=0:d=2,afade=t=out:st=115:d=5 -c:v copy -c:a aac -b:a 128k output.mp4",
          "seconds": 1.03,
          "speedVsRealtime": 116.62,
          "megabytes": 353.15,
          "vsBaselinePct": 309.4,
          "codec": null
        },
        {
          "id": "moov-atom",
          "label": "-movflags +faststart（再エンコードなし）",
          "labelEn": "-movflags +faststart, no re-encode",
          "command": "ffmpeg -y -v error -i input.mp4 -c copy -movflags +faststart output.mp4",
          "seconds": 0.49,
          "speedVsRealtime": 242.58,
          "megabytes": 353.29,
          "vsBaselinePct": 309.6,
          "codec": null
        },
        {
          "id": "stream-mapping",
          "label": "-map 0 -c copy（全ストリーム）",
          "labelEn": "-map 0 -c copy, all streams",
          "command": "ffmpeg -y -v error -i input.mkv -map 0 -c copy output.mkv",
          "seconds": 0.41,
          "speedVsRealtime": 292.76,
          "megabytes": 355.1,
          "vsBaselinePct": 311.7,
          "codec": null
        },
        {
          "id": "silence-detect",
          "label": "silencedetect（解析のみ）",
          "labelEn": "silencedetect, analysis only",
          "command": "ffmpeg -y -v error -i input.mp4 -af silencedetect=noise=-40dB:duration=0.5 -f null -",
          "seconds": 7.07,
          "speedVsRealtime": 16.97,
          "codec": null
        },
        {
          "id": "scene-detect",
          "label": "scdet（解析のみ）",
          "labelEn": "scdet, analysis only",
          "command": "ffmpeg -y -v error -i input.mp4 -vf scdet=t=12,metadata=mode=print:key=lavfi.scd.time -f null -",
          "seconds": 7.09,
          "speedVsRealtime": 16.92,
          "codec": null
        },
        {
          "id": "signalstats",
          "label": "signalstats（解析のみ）",
          "labelEn": "signalstats, analysis only",
          "command": "ffprobe -v error -f lavfi -i movie=input.mp4,signalstats -show_frames -select_streams v -print_format csv -show_entries frame_tags=lavfi.signalstats.YAVG",
          "seconds": 29.56,
          "speedVsRealtime": 4.06,
          "codec": null
        }
      ]
    },
    {
      "preset": "youtube-encode",
      "measuredAt": "2026-08-28T10:47:10.611Z",
      "host": {
        "cpu": "Intel(R) Core(TM) i9-14900KF",
        "gpu": "NVIDIA GeForce RTX 4090",
        "cores": 32,
        "platform": "win32 x64",
        "ffmpegVersion": "8.1-full_build-www.gyan.dev"
      },
      "source": {
        "name": "bbb_1080p_10s.mp4",
        "width": 1920,
        "height": 1080,
        "fps": 30,
        "durationSec": 10,
        "bytes": 30704510
      },
      "equalQuality": null,
      "results": [
        {
          "id": "yt-recommended-8mbps",
          "label": "YouTube 推奨 1080p30: 8 Mbps",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 8000k -preset slow -pix_fmt yuv420p -an output.mp4",
          "seconds": 3.87,
          "speedVsRealtime": 2.58,
          "bytes": 9771766,
          "megabytes": 9.32,
          "sizeVsSourcePct": 31.8,
          "reductionPct": 68.2,
          "vmaf": 94.24,
          "codec": "H.264"
        },
        {
          "id": "yt-crf18-slow",
          "label": "CRF 18 / preset slow",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow -pix_fmt yuv420p -an output.mp4",
          "seconds": 4.67,
          "speedVsRealtime": 2.14,
          "bytes": 16229356,
          "megabytes": 15.48,
          "sizeVsSourcePct": 52.9,
          "reductionPct": 47.1,
          "vmaf": 96.12,
          "codec": "H.264"
        },
        {
          "id": "yt-crf20-slow",
          "label": "CRF 20 / preset slow",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p -an output.mp4",
          "seconds": 4.2,
          "speedVsRealtime": 2.38,
          "bytes": 11893569,
          "megabytes": 11.34,
          "sizeVsSourcePct": 38.7,
          "reductionPct": 61.3,
          "vmaf": 95.24,
          "codec": "H.264"
        },
        {
          "id": "yt-crf23-slow",
          "label": "CRF 23 / preset slow",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -pix_fmt yuv420p -an output.mp4",
          "seconds": 3.46,
          "speedVsRealtime": 2.89,
          "bytes": 7488198,
          "megabytes": 7.14,
          "sizeVsSourcePct": 24.4,
          "reductionPct": 75.6,
          "vmaf": 93.49,
          "codec": "H.264"
        },
        {
          "id": "yt-16mbps",
          "label": "16 Mbps（推奨の2倍）",
          "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 16000k -preset slow -pix_fmt yuv420p -an output.mp4",
          "seconds": 5.27,
          "speedVsRealtime": 1.9,
          "bytes": 19818633,
          "megabytes": 18.9,
          "sizeVsSourcePct": 64.5,
          "reductionPct": 35.5,
          "vmaf": 96.44,
          "codec": "H.264"
        },
        {
          "id": "yt-vp9-crf31",
          "label": "VP9 CRF 31",
          "command": "ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 31 -b:v 0 -pix_fmt yuv420p -an output.mp4",
          "seconds": 66.08,
          "speedVsRealtime": 0.15,
          "bytes": 6838609,
          "megabytes": 6.52,
          "sizeVsSourcePct": 22.3,
          "reductionPct": 77.7,
          "vmaf": 93.94,
          "codec": "VP9"
        }
      ]
    }
  ],
  "commands": [
    {
      "command": "ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 output.webm",
      "binary": "ffmpeg",
      "task": "Encoding is extremely slow",
      "status": "not-executed",
      "reason": "libaom-av1 too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=1 -an -c:v libx264 -crf 23 output_timelapse.mp4",
      "binary": "ffmpeg",
      "task": "4. Timelapse: Extract at 1fps",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='This is a sample scrolling ticker':x=w-200*t:y=h-60:fontsize=32:fontcolor=white\" output.mp4",
      "binary": "ffmpeg",
      "task": "Scrolling Ticker (Text Moving Right to Left)",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input_file [options] output_file",
      "binary": "ffmpeg",
      "task": "Basic Command Syntax",
      "status": "not-executed",
      "reason": "Placeholder filename — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -c copy output.webm",
      "binary": "ffmpeg",
      "task": "Mode 3: video codec is MP4-unfriendly (VP9 / AV1)",
      "status": "not-executed",
      "reason": "MKV/MP4 copy → WebM (container mismatch demo) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 26 -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "H.265 for screencasts",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/screen-recording/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i \"C:\\videos\\input.mp4\" -t 60 -c copy \"C:\\output\\clip.mp4\"",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "not-executed",
      "reason": "Windows-style path — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 10 -i \"$f\" -t 60 -c copy \"preview_${f}\" -y",
      "binary": "ffmpeg",
      "task": "5. Batch Trimming (Shell Script)",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -af volumedetect -f null /dev/null",
      "binary": "ffmpeg",
      "task": "Checking a video's audio",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/volume-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fade:duration=2:offset=8[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "Working out offset",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/en/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[0:a][1:a]amix=inputs=2:duration=shortest:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "動画に BGM を重ねる基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i intro.mp3 -i main.mp3 -i outro.mp3 -filter_complex \"[0:a][1:a][2:a]concat=n=3:v=0:a=1[bgm]\" -map \"[bgm]\" -c:a libmp3lame combined_bgm.mp3",
      "binary": "ffmpeg",
      "task": "複数の BGM をつなぐ（イントロ・メイン・アウトロ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"[0:a]asplit=3[a1][a2][a3];[a1]atrim=0:5,asetpts=PTS-STARTPTS[s1];[a2]atrim=0:10,asetpts=PTS-STARTPTS[s2];[a3]atrim=0:5,asetpts=PTS-STARTPTS[s3];[s1][s2][s3]concat=n=3:v=0:a=1[out]\" -map \"[out]\" -c:a libmp3lame output.mp3",
      "binary": "ffmpeg",
      "task": "単一入力で concat の動作を体験",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[0:a]aformat=fltp:44100:stereo,asplit=2[voice1][voice2];[1:a]aformat=fltp:44100:stereo,volume=0.5[bgm];[bgm][voice1]sidechaincompress=threshold=0.02:ratio=6:attack=200:release=1000[ducked];[ducked][voice2]amix=inputs=2:duration=first:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "元動画の音声を自動でダッキング",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i \"$f\" -i bgm.mp3 -filter_complex \"[1:a]volume=0.3,afade=t=in:st=0:d=2[bgm];[0:a][bgm]amix=inputs=2:duration=first:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k \"out/${f%.mp4}_bgm.mp4\"",
      "binary": "ffmpeg",
      "task": "バッチ処理：複数動画に同じ BGM",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[0:a]volume=0.8[v];[1:a]volume=0.3[bgm];[v][bgm]amix=inputs=2:duration=first:dropout_transition=0:normalize=0,alimiter=limit=0.95[lim]\" -map 0:v:0 -map \"[lim]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "BGM がクリップ（音割れ）する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[0:a]aformat=fltp:44100:stereo[v];[1:a]aformat=fltp:44100:stereo,volume=0.3[bgm];[v][bgm]amix=inputs=2:duration=first:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "動画と BGM が同期しない（だんだんズレる）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -b:a 192k -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "元の音声を BGM で置き換える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[1:a]volume=0.3[bgm];[0:a][bgm]amix=inputs=2:duration=shortest:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "音量バランスの調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"[0:a]asplit=2[a1][a2];[a1]volume=0.3[bgm];[a2]volume=1.0[voice];[bgm][voice]amix=inputs=2:duration=longest:dropout_transition=0[out]\" -map \"[out]\" -c:a libmp3lame output.mp3",
      "binary": "ffmpeg",
      "task": "単一入力で BGM ミックスを検証する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[1:a]aloop=loop=-1:size=2e+09[loop];[0:a][loop]amix=inputs=2:duration=first:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "BGM をループで動画長まで延ばす",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[1:a]apad[pad];[0:a][pad]amix=inputs=2:duration=first:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "BGM 末尾を無音で埋める",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"apad=pad_dur=5,atrim=0:25\" output.mp3",
      "binary": "ffmpeg",
      "task": "単一入力で apad の動作を確認",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i bgm.mp3 -filter_complex \"[1:a]volume=0.3,afade=t=in:st=0:d=2,afade=t=out:st=57:d=3[bgm];[0:a][bgm]amix=inputs=2:duration=first:dropout_transition=0[aout]\" -map 0:v:0 -map \"[aout]\" -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "BGM のフェードイン / フェードアウト",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"volume=0.3,afade=t=in:st=0:d=2,afade=t=out:st=15:d=5\" output.mp3",
      "binary": "ffmpeg",
      "task": "単一入力で BGM フェードチェーンを検証",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/add-bgm/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"agate=threshold=0.02:attack=5:release=100:range=0.0\" output.mp3",
      "binary": "ffmpeg",
      "task": "ノイズゲートを適用する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/agate-filter/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i voice_recording.mp3 -af \"agate=threshold=0.015:attack=5:release=200:range=0.0\" output_clean.mp3",
      "binary": "ffmpeg",
      "task": "ポッドキャスト・ボイスオーバー向け設定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/agate-filter/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"astats=metadata=1:reset=1,ametadata=print:key=lavfi.astats.Overall.RMS_level\" -f null - 2>&1 | grep RMS",
      "binary": "ffmpeg",
      "task": "ノイズレベルを測定してからthresholdを設定する",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/agate-filter/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"agate=threshold=0.02:attack=5:release=150:range=0.0:level_in=1.5\" output.mp3",
      "binary": "ffmpeg",
      "task": "入力ゲインと組み合わせる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/agate-filter/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"agate=threshold=0.02:attack=5:release=150:range=0.0, loudnorm=I=-16:TP=-1.5:LRA=11\" output.mp3",
      "binary": "ffmpeg",
      "task": "ノイズゲート → ノーマライズのパイプライン",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/agate-filter/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"agate=threshold=0.02:attack=5:release=150:range=0.0\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "動画ファイルの音声トラックに適用する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/agate-filter/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"astats\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "音声統計を表示する（動画ファイル）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"astats\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "音声ファイルの統計",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"astats=measure_perchannel=RMS_level+Peak_level\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "RMS とピークレベルのみ表示",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"astats=measure_perchannel=0\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "全体統計のみ（チャンネル別は省略）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"astats=metadata=1,ametadata=print:file=-\" -f null /dev/null 2>&1 | head -50",
      "binary": "ffmpeg",
      "task": "メタデータとして取得する",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"astats=reset=44100\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "短い区間ごとの統計（reset パラメータ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"volumedetect\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "volumedetect との比較",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"astats=measure_perchannel=Peak_count+Flat_factor\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "クリッピングの検出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"highpass=f=10\" output.mp4",
      "binary": "ffmpeg",
      "task": "DC オフセットの確認と修正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/astats/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -ac 1 output.mp3",
      "binary": "ffmpeg",
      "task": "ステレオ → モノラル: -ac 1",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"extrastereo=m=2.5\" output.mp3",
      "binary": "ffmpeg",
      "task": "モノラル → ステレオ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"channelsplit=channel_layout=stereo[left][right]\" -map \"[left]\" left.wav -map \"[right]\" right.wav",
      "binary": "ffmpeg",
      "task": "L / R を別ファイルに分ける・戻す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i left.wav -i right.wav -filter_complex \"[0:a][1:a]join=inputs=2:channel_layout=stereo[a]\" -map \"[a]\" output.wav",
      "binary": "ffmpeg",
      "task": "L / R を別ファイルに分ける・戻す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"pan=stereo|c0=0.8*c0+0.2*c1|c1=0.2*c0+0.8*c1\" output.mp3",
      "binary": "ffmpeg",
      "task": "ステレオを微調整する（L/R を少し混ぜる）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v copy -af \"pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE\" -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "5.1ch をステレオにダウンミックスする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -ac 1 -b:a 64k output.mp3",
      "binary": "ffmpeg",
      "task": "モノラルにしてもファイルが小さくならない理由",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -ac 1 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "ステレオ → モノラル: -ac 1",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"pan=mono|c0=0.5*c0+0.5*c1\" output.mp3",
      "binary": "ffmpeg",
      "task": "c0+c1 はクリップする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"pan=mono|c0<c0+c1\" output.mp3",
      "binary": "ffmpeg",
      "task": "c0+c1 はクリップする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"pan=mono|c0=c0\" output.mp3",
      "binary": "ffmpeg",
      "task": "片方のチャンネルだけ残す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"pan=stereo|c0=c0|c1=c0\" output.mp3",
      "binary": "ffmpeg",
      "task": "片方のチャンネルだけ残す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -af \"pan=stereo|c0=c0|c1=c0\" -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "片方のチャンネルだけ残す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"pan=stereo|c0=c1|c1=c0\" output.mp3",
      "binary": "ffmpeg",
      "task": "左右を入れ替える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -ac 2 output.mp3",
      "binary": "ffmpeg",
      "task": "モノラル → ステレオ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-channels-mono-stereo/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"adelay=500|500\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "ステレオ音声に 500ms の遅延を追加する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"adelay=300\" output.mp3",
      "binary": "ffmpeg",
      "task": "モノラル音声の場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"adelay=200|400\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "adelay パラメータ詳細",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"adelay=300|300|300|300|300|300\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "adelay パラメータ詳細",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -itsoffset 0.5 -i input.mp4 -map 0:v -map 1:a -c:v copy -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "音声を 0.5秒 遅らせる（映像より音声が早い場合）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -itsoffset 0.5 -i input.mp4 -i input.mp4 -map 0:v -map 1:a -c:v copy -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "音声を 0.5秒 早める（音声が映像より遅れている場合）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"setpts=PTS-STARTPTS\" -af \"atrim=start=0.3,asetpts=PTS-STARTPTS\" -c:v libx264 output.mp4",
      "binary": "ffmpeg",
      "task": "方法 3: -ss で音声だけを前にトリムする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -c:a copy -avoid_negative_ts make_zero output.mp4",
      "binary": "ffmpeg",
      "task": "映像と音声の start_time を揃える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"adelay=300|300\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "ステップ 3: コマンドを実行する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-delay-fix/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp3 -filter_complex \"[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=4:attack=200:release=1000[ducked]\" -map 0:v -map \"[ducked]\" -c:v copy output_ducked.mp4",
      "binary": "ffmpeg",
      "task": "基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-ducking/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp3 -filter_complex \"[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo[voice];[bg][voice]sidechaincompress=threshold=0.05:ratio=4:attack=200:release=1000[ducked]\" -map 0:v -map \"[ducked]\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "threshold の調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-ducking/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp3 -filter_complex \"[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=6:attack=300:release=1500[ducked]\" -map 0:v -map \"[ducked]\" -c:v copy output_natural.mp4",
      "binary": "ffmpeg",
      "task": "ゆっくりとしたダッキング（自然な感じ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-ducking/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp3 -filter_complex \"[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=8:attack=50:release=500[ducked]\" -map 0:v -map \"[ducked]\" -c:v copy output_tight.mp4",
      "binary": "ffmpeg",
      "task": "素早く反応するダッキング（タイトな感じ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-ducking/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp3 -filter_complex \"[0:a]volume=0.5,aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo[voice];[bg][voice]sidechaincompress=threshold=0.02:ratio=4:attack=200:release=1000[ducked]\" -map 0:v -map \"[ducked]\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "BGM の音量を事前に調整してからダッキング",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-ducking/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp3 -filter_complex \"[0:a]aformat=fltp:44100:stereo[bg];[1:a]aformat=fltp:44100:stereo,asplit=2[voice1][voice2];[bg][voice1]sidechaincompress=threshold=0.02:ratio=4:attack=200:release=1000[ducked];[ducked][voice2]amix=inputs=2:duration=longest[out]\" -map 0:v -map \"[out]\" -c:v copy output_mixed.mp4",
      "binary": "ffmpeg",
      "task": "ナレーションと BGM を最終的にミックスする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-ducking/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"afade=t=in:st=0:d=3\" output.mp3",
      "binary": "ffmpeg",
      "task": "フェードイン（冒頭を徐々に大きく）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -f null /dev/null 2>&1 | grep Duration",
      "binary": "ffmpeg",
      "task": "フェードアウト（末尾を徐々に小さく）",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"afade=t=out:st=50:d=10\" output.mp3",
      "binary": "ffmpeg",
      "task": "フェードアウト（末尾を徐々に小さく）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"afade=t=in:st=0:d=3,afade=t=out:st=50:d=10\" output.mp3",
      "binary": "ffmpeg",
      "task": "フェードイン＋フェードアウトを同時に適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"afade=t=in:st=0:d=3:curve=qsin\" output.mp3",
      "binary": "ffmpeg",
      "task": "カーブタイプの指定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"afade=t=in:st=0:d=2\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "動画ファイルの音声にフェードを適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fade=t=in:st=0:d=2\" -af \"afade=t=in:st=0:d=2\" -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "映像のフェードイン・フェードアウトと組み合わせる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"afade=t=in:st=0:d=2,afade=t=out:st=115:d=5\" -c:v copy -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-fade/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "2. WAV から MP3 に変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -ar 44100 -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "8. サンプリングレート変換：-ar",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -c:a libmp3lame -b:a 192k output.mp3",
      "binary": "ffmpeg",
      "task": "2. WAV から MP3 に変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -c:a aac -b:a 192k output.aac",
      "binary": "ffmpeg",
      "task": "3. WAV から AAC に変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -c:a aac -b:a 192k output.m4a",
      "binary": "ffmpeg",
      "task": "3. WAV から AAC に変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -c:a flac output.flac",
      "binary": "ffmpeg",
      "task": "4. MP3 から FLAC に変換（ロッシー→ロスレスの注意点）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.flac -c:a aac -b:a 256k output.aac",
      "binary": "ffmpeg",
      "task": "5. FLAC から AAC に変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -c:a pcm_s16le output.wav",
      "binary": "ffmpeg",
      "task": "6. MP3 から WAV に変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -c:a libmp3lame -b:a 128k output.mp3",
      "binary": "ffmpeg",
      "task": "-b:a：ビットレート指定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-format-conversion/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 20 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "再エンコードして比較する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-out-of-sync-after-converting/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -af aresample=async=1 -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "音声サンプルと音声の時刻が合っていない場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-out-of-sync-after-converting/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -fflags +genpts -i input.mp4 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "欠落したPTSを補う場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-out-of-sync-after-converting/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -fps_mode cfr -r 30 -c:v libx264 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "VFRを扱えない編集先に合わせる場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-out-of-sync-after-converting/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0 -c copy output.mkv",
      "binary": "ffmpeg",
      "task": "まず ffprobe で確認する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-track-missing/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v -map 0:a -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "原因①: -map のマップ漏れ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-track-missing/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "原因②: -an で除去している",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-track-missing/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.webm -c:v copy -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "原因③: コンテナ非対応コーデック",
      "status": "not-executed",
      "reason": "WebM (VP8 fixture) video-copy → MP4 — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-track-missing/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "原因④: 複数音声トラックで先頭のみ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-track-missing/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -itsoffset 1.5 -i input.mp4 -i input.mp4 -map 1:v -map 0:a -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. -itsoffset で音声を前にずらす（音声が遅い場合・再エンコードなし）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"adelay=1500\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -itsoffset 1.0 -i input.mp4 -map 0:a -map 1:v -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "2. -itsoffset で映像を遅らせる（音声が早い場合）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"adelay=1500|1500\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "3. adelay フィルタで音声を遅らせる（ミリ秒指定）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -async 1 -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "4. -async オプションで自動同期補正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -itsoffset 1.5 -i input.mp4 -i input.mp4 -map 1:v -map 0:a -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "5. ズレを修正しながら再エンコード",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"adelay=1500|1500\" -c:v copy -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "エラー1: `-c copy` を使っているのに adelay が機能しない",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -ss 2 -i input.mp4 -c copy trimmed.mp4",
      "binary": "ffmpeg",
      "task": "エラー4: 修正後に音声が途切れる・無音区間ができる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af aresample=async=1:min_hard_comp=0.1 -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "エラー5: `-async` 適用後に音声ピッチが変わる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-video-sync/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"showwavespic=s=1920x480\" -frames:v 1 waveform.png",
      "binary": "ffmpeg",
      "task": "波形の静止画（showwavespic）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"showspectrumpic=s=1920x480:legend=0:color=intensity\" -frames:v 1 spectrum.png",
      "binary": "ffmpeg",
      "task": "スペクトログラム（showspectrumpic / showspectrum）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"[0:a]showspectrum=s=1280x720:mode=combined:color=intensity:slide=scroll[v]\" -map \"[v]\" -map 0:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "スペクトログラム（showspectrumpic / showspectrum）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"[0:a]showfreqs=s=1280x720:mode=bar:colors=#00d4aa[v]\" -map \"[v]\" -map 0:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "周波数バー（showfreqs）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"showwavespic=s=1920x480:colors=#00d4aa\" -frames:v 1 waveform.png",
      "binary": "ffmpeg",
      "task": "色とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"showwavespic=s=1920x480:split_channels=1:colors=#00d4aa|#ff6b6b\" -frames:v 1 waveform.png",
      "binary": "ffmpeg",
      "task": "色とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"color=c=#0f1117:s=1920x480[bg];[0:a]showwavespic=s=1920x480:colors=#00d4aa[fg];[bg][fg]overlay=format=auto\" -frames:v 1 waveform.png",
      "binary": "ffmpeg",
      "task": "背景色を付ける",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"showwavespic=s=1920x480:draw=full\" -frames:v 1 waveform.png",
      "binary": "ffmpeg",
      "task": "見た目のオプション",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"[0:a]showwaves=s=1280x720:mode=cline:rate=30:colors=#00d4aa,format=yuv420p[v]\" -map \"[v]\" -map 0:a -c:v libx264 -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "動く波形の動画（showwaves）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"color=c=#0f1117:s=1280x720:r=30[bg];[0:a]showwaves=s=1280x720:mode=cline:rate=30:colors=#00d4aa[w];[bg][w]overlay=format=auto[v]\" -map \"[v]\" -map 0:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "背景色付き",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -loop 1 -i cover.png -i input.mp3 -filter_complex \"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2[bg];[1:a]showwaves=s=1280x200:mode=cline:rate=30:colors=#00d4aa[w];[bg][w]overlay=0:520:format=auto[v]\" -map \"[v]\" -map 1:a -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "ジャケット画像の上に波形を置く（ポッドキャスト用）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -filter_complex \"showspectrumpic=s=1920x480\" -frames:v 1 spectrum.png",
      "binary": "ffmpeg",
      "task": "スペクトログラム（showspectrumpic / showspectrum）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/audio-waveform-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -encoders 2>/dev/null | grep av1",
      "binary": "ffmpeg",
      "task": "エンコーダーの確認",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -b:v 2M -preset 6 -pass 2 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "libsvtav1 での2pass",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 1 -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "libaom-av1 での2pass",
      "status": "not-executed",
      "reason": "libaom-av1 too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libaom-av1 -b:v 2M -pass 2 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "libaom-av1 での2pass",
      "status": "not-executed",
      "reason": "libaom-av1 too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 32 -preset 6 -vf \"scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2\" -pix_fmt yuv420p -c:a libopus -b:a 256k output_youtube_av1.webm",
      "binary": "ffmpeg",
      "task": "YouTube 向け（AV1）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 40 -preset 8 -vf \"scale=1280:720\" -c:a libopus -b:a 96k output_web.webm",
      "binary": "ffmpeg",
      "task": "Web 配信向け（軽量）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow -c:a aac -b:a 128k out_h264.mp4",
      "binary": "ffmpeg",
      "task": "コーデック比較",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset slow -c:a aac -b:a 128k out_h265.mp4",
      "binary": "ffmpeg",
      "task": "コーデック比較",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 -c:a libopus -b:a 128k out_av1.webm",
      "binary": "ffmpeg",
      "task": "コーデック比較",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 output.webm",
      "binary": "ffmpeg",
      "task": "エンコードが非常に遅い",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "音声が出ない・コンテナエラー",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "基本コマンド（CRFモード）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 2 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "presetの選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 6 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "presetの選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 30 -preset 10 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "presetの選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -crf 35 -preset 6 -c:a aac -b:a 128k output_av1.mp4",
      "binary": "ffmpeg",
      "task": "MP4コンテナに出力する場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "基本コマンド（CRFモード）",
      "status": "not-executed",
      "reason": "libaom-av1 too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -row-mt 1 -tiles 2x2 -c:a libopus -b:a 128k output.webm",
      "binary": "ffmpeg",
      "task": "マルチスレッド設定",
      "status": "not-executed",
      "reason": "libaom-av1 too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libsvtav1 -b:v 2M -preset 6 -pass 1 -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "libsvtav1 での2pass",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/av1-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "2. ほぼすべてのAVIに使える1コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/avi-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -c:v copy -c:a copy -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "3. ストリームコピーが効くケースと効かないケース",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/avi-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -c:v copy -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "3. ストリームコピーが効くケースと効かないケース",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/avi-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "4. CRF値の選び方（画質と容量）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/avi-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -crf 20 -c:a aac -b:a 192k -ac 2 -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "5. 古いAVIの音声への対処",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/avi-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -vf yadif -c:v libx264 -crf 20 -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "6. ビデオカメラ映像のインターレース解除",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/avi-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -r 30 -c:v libx264 -crf 20 -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "エラー4: 音声と映像がずれていく",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/avi-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -y -i input.mp4 -c:v libx264 -c:a aac output.mkv",
      "binary": "ffmpeg",
      "task": "基本構文の全体像",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v:0 -map 0:a:0 output.mp4",
      "binary": "ffmpeg",
      "task": "ストリーム選択（`-map`）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -y -i input.mp4 output.avi",
      "binary": "ffmpeg",
      "task": "ミス 1: グローバルオプションを後ろに書く",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 output.mp4",
      "binary": "ffmpeg",
      "task": "ミス 2: 出力オプションを入力の前に書く",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -c copy output.mkv",
      "binary": "ffmpeg",
      "task": "実践：構文確認コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 output.avi",
      "binary": "ffmpeg",
      "task": "入力の指定（`-i`）",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -i audio.wav output.mkv",
      "binary": "ffmpeg",
      "task": "入力の指定（`-i`）",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv output.mp4",
      "binary": "ffmpeg",
      "task": "出力の指定",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -f matroska output",
      "binary": "ffmpeg",
      "task": "出力フォーマットの自動判定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -ss 10 -i input.mp4 output.mp4",
      "binary": "ffmpeg",
      "task": "入力オプションと出力オプションの違い",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 10 output.mp4",
      "binary": "ffmpeg",
      "task": "入力オプションと出力オプションの違い",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input2.mp4 output.mp4",
      "binary": "ffmpeg",
      "task": "入力と出力を混在させない",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "コーデック指定（`-c`, `-c:v`, `-c:a`）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/basic-syntax/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -vn -c:a libmp3lame -q:a 2 \"${f%.mp4}.mp3\" -n",
      "binary": "ffmpeg",
      "task": "1. 基本：全 MP4 を MP3 に変換（forループ）",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -vf scale=1280:-2 -c:v libx264 -crf 23 -c:a aac \"${f%.mp4}_720p.mp4\" -n",
      "binary": "ffmpeg",
      "task": "2. 720p H.264 に一括圧縮",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -vf scale=1280:-2 -c:v libx264 -crf 23 -c:a aac \"$out\"",
      "binary": "ffmpeg",
      "task": "3. 変換済みファイルをスキップして再実行に対応",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -c:v libx264 -crf 23 -c:a aac \"output/${base}.mp4\" -n",
      "binary": "ffmpeg",
      "task": "4. 出力を別ディレクトリに保存",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -c:v libx264 -crf 23 -c:a aac \"$out\" -n",
      "binary": "ffmpeg",
      "task": "5. サブディレクトリを再帰的に処理",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -c:v libx264 -crf 23 \"${f%.mp4}_out.mp4\" -n",
      "binary": "ffmpeg",
      "task": "エラー1: バッチ処理の途中で FFmpeg が止まる",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -c:v libx264 -crf 23 \"/mnt/external/output/${f%.mp4}.mp4\" -n",
      "binary": "ffmpeg",
      "task": "エラー4: 変換完了後にストレージ不足でエラー",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -nostdin -n -i \"$f\" -c:v libx264 -crf 23 \"${f%.mp4}_out.mp4\"",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/batch-convert/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf blackdetect -f null /dev/null",
      "binary": "ffmpeg",
      "task": "基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/black-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"blackdetect=d=0.5:pic_th=0.95:pix_th=0.10\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "カスタム例：0.5秒以上の黒区間を検出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/black-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i recording.mp4 -vf \"blackdetect=d=2.0:pix_th=0.10\" -f null /dev/null 2>&1 | grep black_",
      "binary": "ffmpeg",
      "task": "応用例：テレビ録画のCM境界を検出",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/black-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf blackdetect -f null /dev/null 2>&1 | grep black_ > black_segments.txt",
      "binary": "ffmpeg",
      "task": "出力をテキストファイルに保存",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/black-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"boxblur=2:1\" output.mp4",
      "binary": "ffmpeg",
      "task": "軽いぼかし",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"boxblur=10:3\" output.mp4",
      "binary": "ffmpeg",
      "task": "強いぼかし",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"boxblur=luma_radius=10:luma_power=3:chroma_radius=0:chroma_power=0\" output.mp4",
      "binary": "ffmpeg",
      "task": "輝度だけぼかして色情報を保持する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"boxblur=luma_radius=5:luma_power=2\" output.mp4",
      "binary": "ffmpeg",
      "task": "名前付き引数で書く",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"boxblur=20:5\" output.mp4",
      "binary": "ffmpeg",
      "task": "映像全体をぼかす（プライバシー保護・背景ぼかし）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"split[a][b]; [a]crop=200:100:50:50,boxblur=15:3[blurred]; [b][blurred]overlay=50:50\" output.mp4",
      "binary": "ffmpeg",
      "task": "特定領域だけをぼかす",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.jpg -vf \"boxblur=5:2\" output.jpg",
      "binary": "ffmpeg",
      "task": "静止画への適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf boxblur=10:3 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/boxblur-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=30 -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. フレームレートを下げる（fps フィルタ — 推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=30 -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "エラー4: 出力ファイルのフレームレートが変わっていない",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=30000/1001 -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=25 -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. フレームレートを下げる（fps フィルタ — 推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=24 -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. フレームレートを下げる（fps フィルタ — 推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -r 30 -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "2. -r オプションで指定する（シンプルな場合）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=60 -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "3. フレームレートを上げる（フレーム複製）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=1 -c:v libx264 -crf 23 output_timelapse.mp4",
      "binary": "ffmpeg",
      "task": "4. タイムラプス：1fps で抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i \"$f\" -vf fps=30 -c:v libx264 -crf 23 -c:a copy \"30fps_${f}\" -y",
      "binary": "ffmpeg",
      "task": "6. バッチ処理：フォルダ内全動画を 30fps に変換",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=1 -an -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "エラー2: タイムラプス変換後に音声が長い",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-framerate/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" output_2x.mp4",
      "binary": "ffmpeg",
      "task": "2 倍速（音声同期あり）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]rubberband=tempo=2.0[a]\" -map \"[v]\" -map \"[a]\" output_2x_pitch_keep.mp4",
      "binary": "ffmpeg",
      "task": "ピッチを保ったまま速度変更（rubberband）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=2*PTS[v];[0:a]rubberband=tempo=0.5[a]\" -map \"[v]\" -map \"[a]\" output_half_pitch_keep.mp4",
      "binary": "ffmpeg",
      "task": "ピッチを保ったまま速度変更（rubberband）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"setpts='if(lt(T,5),2,1)*PTS'\" -an output_var.mp4",
      "binary": "ffmpeg",
      "task": "方法 1: setpts 式で時間条件を書く（音声なし向け）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]trim=0:5,setpts=2*PTS[v1];[0:a]atrim=0:5,asetpts=PTS-STARTPTS,atempo=0.5[a1]; [0:v]trim=5:20,setpts=PTS-STARTPTS[v2];[0:a]atrim=5:20,asetpts=PTS-STARTPTS[a2]; [v1][a1][v2][a2]concat=n=2:v=1:a=1[v][a]\" -map \"[v]\" -map \"[a]\" output_var_audio.mp4",
      "binary": "ffmpeg",
      "task": "方法 2: trim + setpts で分割して concat（音声同期可能）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"setpts=4*PTS,minterpolate=fps=60:mi_mode=mci\" -an output_smooth_slow.mp4",
      "binary": "ffmpeg",
      "task": "フレームレートを保ちつつスロー（minterpolate）",
      "status": "not-executed",
      "reason": "minterpolate too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output_optimized.mp4",
      "binary": "ffmpeg",
      "task": "速度変更後にコーデックを変える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" output_ok.mp4",
      "binary": "ffmpeg",
      "task": "1. 音だけ・映像だけが速くなる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=0.25*PTS[v];[0:a]atempo=4.0[a]\" -map \"[v]\" -map \"[a]\" output_4x.mp4",
      "binary": "ffmpeg",
      "task": "4 倍速",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=0.1*PTS[v];[0:a]atempo=10.0[a]\" -map \"[v]\" -map \"[a]\" output_10x.mp4",
      "binary": "ffmpeg",
      "task": "10 倍速",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=2*PTS[v];[0:a]atempo=0.5[a]\" -map \"[v]\" -map \"[a]\" output_half.mp4",
      "binary": "ffmpeg",
      "task": "0.5 倍速（半分速）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=4*PTS[v];[0:a]atempo=0.5,atempo=0.5[a]\" -map \"[v]\" -map \"[a]\" output_quarter.mp4",
      "binary": "ffmpeg",
      "task": "0.25 倍速（4 倍スロー）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=4*PTS[v];[0:a]atempo=0.5,atempo=0.5[a]\" -map \"[v]\" -map \"[a]\" output_quarter_safe.mp4",
      "binary": "ffmpeg",
      "task": "古い FFmpeg で 0.25 倍速にする（連結回避）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]setpts=0.125*PTS[v];[0:a]atempo=2.0,atempo=2.0,atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" output_8x.mp4",
      "binary": "ffmpeg",
      "task": "古い FFmpeg で 8 倍速にする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"setpts=0.25*PTS\" -an output_4x_silent.mp4",
      "binary": "ffmpeg",
      "task": "音を消して映像だけ速度変更",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"setpts=2*PTS\" -an output_slow_silent.mp4",
      "binary": "ffmpeg",
      "task": "音を消して映像だけ速度変更",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/change-video-speed/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"chromakey=0x00FF00:0.1:0.2\" -c:v png output.mov",
      "binary": "ffmpeg",
      "task": "グリーンバックをキーイングしてアルファ付き映像を生成する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i background.jpg -i input.mp4 -filter_complex \"[1:v]chromakey=0x00FF00:0.1:0.2[fg]; [0:v][fg]overlay\" output.mp4",
      "binary": "ffmpeg",
      "task": "背景静止画と合成する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i background.mp4 -i greenscreen.mp4 -filter_complex \"[1:v]chromakey=0x00FF00:0.15:0.1[fg]; [0:v][fg]overlay\" output.mp4",
      "binary": "ffmpeg",
      "task": "背景動画と合成する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i background.jpg -i bluescreen.mp4 -filter_complex \"[1:v]chromakey=0x0000FF:0.15:0.1[fg]; [0:v][fg]overlay\" output.mp4",
      "binary": "ffmpeg",
      "task": "ブルーバック合成",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i background.jpg -i custom_screen.mp4 -filter_complex \"[1:v]chromakey=0x00B400:0.12:0.15[fg]; [0:v][fg]overlay\" output.mp4",
      "binary": "ffmpeg",
      "task": "任意の色をキーカラーにする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i greenscreen.mp4 -vf \"chromakey=0x00FF00:0.1:0.2\" -c:v prores_ks -profile:v 4 output.mov",
      "binary": "ffmpeg",
      "task": "アルファチャンネルが必要なコンテナ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i greenscreen.mp4 -vf \"chromakey=0x00FF00:0.1:0.2\" -c:v libvpx-vp9 -auto-alt-ref 0 output.webm",
      "binary": "ffmpeg",
      "task": "アルファチャンネルが必要なコンテナ",
      "status": "not-executed",
      "reason": "libvpx-vp9 + chromakey alpha path — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i background.jpg -i greenscreen.mp4 -filter_complex \"[1:v]chromakey=0x00FF00:0.12:0.08[fg];[0:v][fg]overlay\" -c:v libx264 -crf 23 -preset medium -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/chromakey-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=brightness=0.1:contrast=1.2:saturation=1.3:gamma=1.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "eq フィルタ — 明度・コントラスト・彩度の基本補正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf colorbalance=rs=0.15:bs=-0.15,eq=saturation=1.1 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=brightness=0.05:contrast=1.3\" output.mp4",
      "binary": "ffmpeg",
      "task": "よく使う補正例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=saturation=0\" output.mp4",
      "binary": "ffmpeg",
      "task": "よく使う補正例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=all='0/0 0.25/0.15 0.5/0.5 0.75/0.85 1/1'\" output.mp4",
      "binary": "ffmpeg",
      "task": "curves フィルタ — トーンカーブで細かく補正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=red='0/0 0.5/0.6 1/1'\" output.mp4",
      "binary": "ffmpeg",
      "task": "チャンネル別の調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=blue='0/0 0.5/0.4 1/0.9'\" output.mp4",
      "binary": "ffmpeg",
      "task": "チャンネル別の調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=preset=vintage\" output.mp4",
      "binary": "ffmpeg",
      "task": "プリセットを使う",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"colorbalance=bs=0.1:rs=-0.1:gh=0.1\" output.mp4",
      "binary": "ffmpeg",
      "task": "colorbalance フィルタ — シャドウ/ミッドトーン/ハイライトの色調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=brightness=0.05:contrast=1.1,colorbalance=rs=-0.05:bs=0.05\" output.mp4",
      "binary": "ffmpeg",
      "task": "フィルタの組み合わせ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/color-correction/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -movflags +faststart -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/common-errors/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -err_detect ignore_err -i input.mp4 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/common-errors/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/common-errors/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=trunc(iw/2)*2:trunc(ih/2)*2 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/common-errors/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "1. 基本：CRFモードでH.264圧縮（最も汎用的）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -an output.mp4",
      "binary": "ffmpeg",
      "task": "音声ストリームの最適化",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -ac 1 -b:a 64k output.mp4",
      "binary": "ffmpeg",
      "task": "音声ストリームの最適化",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 26 -preset slow -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "エラー3: 出力ファイルサイズが期待より大きい",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 4000k -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "not-executed",
      "reason": "Hardware/platform-specific encoder — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i \"$f\" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k \"compressed_${f}\" -y",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "2. H.265（HEVC）で高圧縮",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 32 -preset fast -vf scale=1280:-2 -c:a aac -b:a 96k output.mp4",
      "binary": "ffmpeg",
      "task": "3. SNS・メール送信向け（小サイズ優先）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 22 -preset slow -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "4. アーカイブ用（高品質・小サイズ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "5. ビットレート指定でサイズを制御",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 1 -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "6. 2パスエンコード（最も精確なサイズ制御）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 2000k -pass 2 -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "6. 2パスエンコード（最も精確なサイズ制御）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input_4k.mp4 -c:v libx265 -crf 26 -preset medium -vf scale=1920:-2 -c:a aac -b:a 128k output_1080p.mp4",
      "binary": "ffmpeg",
      "task": "解像度ダウンスケールとの組み合わせ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input_1080p.mp4 -c:v libx264 -crf 26 -preset fast -vf scale=1280:-2 -c:a aac -b:a 96k output_720p.mp4",
      "binary": "ffmpeg",
      "task": "解像度ダウンスケールとの組み合わせ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/compress-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -f concat -safe 0 -i concat.txt -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "ステップ3: concat デマルチプレクサで結合する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-protocol/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -f concat -safe 0 -i concat.txt -c copy output_with_audio.mp4",
      "binary": "ffmpeg",
      "task": "音声付きファイルの結合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-protocol/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex \"[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]\" -map \"[v]\" -map \"[a]\" output.mp4",
      "binary": "ffmpeg",
      "task": "concat フィルタとの違い",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-protocol/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -f concat -safe 0 -fflags +genpts -i concat.txt -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "映像がずれる・音声がずれる場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-protocol/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "concat demuxerの実行コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \"[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]\" -map \"[outv]\" -map \"[outa]\" output.mp4",
      "binary": "ffmpeg",
      "task": "基本コマンド（2ファイルの結合）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input1.mp4 -i input2.mp4 -i input.mkv -filter_complex \"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]\" -map \"[outv]\" -map \"[outa]\" output.mp4",
      "binary": "ffmpeg",
      "task": "3ファイルの結合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \"[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]\" -map \"[outv]\" -map \"[outa]\" -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "コーデックを指定して結合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \"[0:v]scale=1280:720,fps=30[v0];[1:v]scale=1280:720,fps=30[v1];[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]\" -map \"[outv]\" -map \"[outa]\" -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "解像度・フレームレートの統一",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/concat-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 20 -preset medium -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "2. 基本の変換コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/convert-hevc-to-h264/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "5. 10bit HEVCの落とし穴（8bit yuv420pを強制）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/convert-hevc-to-h264/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 20 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "6. 音声はそのまま残す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/convert-hevc-to-h264/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf cropdetect -f null -",
      "binary": "ffmpeg",
      "task": "基本の検出コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=in_w-1:in_h-1:0:0\" -c:v libx264 -pix_fmt yuv444p -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決策2: yuv420p 要件を緩める",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 60 -i input.mp4 -t 5 -vf cropdetect=64:2:0 -f null -",
      "binary": "ffmpeg",
      "task": "黒帯が真っ黒でない場合の対処",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1080:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "4:3 → 16:9 ピラーボックス追加",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-2:1080,pad=1920:1080:(ow-iw)/2:0:black\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "縦動画 → 16:9 横向きパディング",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"pad=1920:1080:(ow-iw)/2:(oh-ih)/2:white\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "黒以外の色で塗る",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -vf \"crop=1920:800:0:140\" -c:v libx264 -crf 20 -c:a copy \"cropped_${f}\" -y",
      "binary": "ffmpeg",
      "task": "一括処理スクリプト",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -vf \"$CROP\" -c:v libx264 -crf 20 -c:a copy \"cropped_${f}\" -y",
      "binary": "ffmpeg",
      "task": "一括処理スクリプト",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 60 -i input.mp4 -t 5 -vf cropdetect -f null -",
      "binary": "ffmpeg",
      "task": "短時間サンプリングで高速化",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 60 -i input.mp4 -t 5 -vf cropdetect=24:16:0 -f null -",
      "binary": "ffmpeg",
      "task": "閾値（limit）と丸め（round）の調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=in_w:in_h-40:0:20\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "検出した値を crop フィルタに適用する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=in_w:in_h-40:0:20\" -c:v libx264 -crf 18 -preset slow -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "品質指定付きの推奨形",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=in_w-80:in_h:40:0\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "ピラーボックス（左右黒帯）の例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=in_h*4/3:in_h\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "中央クロップ（簡略記法）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=floor(in_w/2)*2:floor(in_h/2)*2\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決策1: 数式で「偶数に強制」する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/crop-black-bars/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=master='0/0 0.25/0.15 0.5/0.5 0.75/0.85 1/1'\" output.mp4",
      "binary": "ffmpeg",
      "task": "マスターカーブでコントラストを上げる（S字カーブ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/curves-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=preset=cross_process\" output.mp4",
      "binary": "ffmpeg",
      "task": "組み込みプリセット一覧",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/curves-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=red='0/0 1/0.9':green='0/0 1/0.95':blue='0/0 0.8/1 1/1'\" output.mp4",
      "binary": "ffmpeg",
      "task": "RGB個別カーブを組み合わせる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/curves-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"curves=preset=vintage:master='0/0 0.5/0.55 1/1'\" output.mp4",
      "binary": "ffmpeg",
      "task": "プリセット＋マスターカーブを組み合わせる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/curves-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.jpg -vf \"curves=preset=increase_contrast\" output.jpg",
      "binary": "ffmpeg",
      "task": "静止画への適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/curves-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf curves=preset=increase_contrast -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/curves-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1500k -c:a aac -b:a 128k -f dash -seg_duration 4 output.mpd",
      "binary": "ffmpeg",
      "task": "基本コマンド（シングルビットレート）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/dash-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v -map 0:a -map 0:v -map 0:a -c:v libx264 -b:v:0 2500k -s:v:0 1280x720 -b:v:1 800k  -s:v:1 854x480 -c:a aac -b:a 128k -f dash -seg_duration 4 -adaptation_sets \"id=0,streams=v id=1,streams=a\" output.mpd",
      "binary": "ffmpeg",
      "task": "複数ビットレートのABR構成",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/dash-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1500k -c:a aac -b:a 128k -f dash -seg_duration 4 -use_timeline 1 -use_template 1 output.mpd",
      "binary": "ffmpeg",
      "task": "VOD向け設定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/dash-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 2500k -c:a aac -b:a 128k -f dash -seg_duration 4 output.mpd",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/dash-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf yadif output.mp4",
      "binary": "ffmpeg",
      "task": "基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/deinterlace/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"yadif=mode=0\" output.mp4",
      "binary": "ffmpeg",
      "task": "mode オプション",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/deinterlace/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"yadif=mode=0\" -r 30 output.mp4",
      "binary": "ffmpeg",
      "task": "60i → 30p への変換（半分のフレームレートに）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/deinterlace/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"yadif=mode=1\" output.mp4",
      "binary": "ffmpeg",
      "task": "60i → 60p への変換（フレームレートを保持）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/deinterlace/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"yadif=mode=0:parity=0\" output.mp4",
      "binary": "ffmpeg",
      "task": "parity オプション（フィールド順の指定）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/deinterlace/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf bwdif output.mp4",
      "binary": "ffmpeg",
      "task": "高品質なインターレース解除（yadifの代替）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/deinterlace/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf yadif=mode=0:parity=-1 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/deinterlace/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=50:y=50:w=200:h=100:color=red:t=3\" output.mp4",
      "binary": "ffmpeg",
      "task": "赤い矩形を描画する（輪郭のみ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawgrid=width=iw/3:height=ih/3:thickness=1:color=white@0.5\" output.mp4",
      "binary": "ffmpeg",
      "task": "三分割構図ガイドラインを描く",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=100:y=80:w=200:h=120:color=lime:t=2, drawtext=text='Object':x=102:y=60:fontsize=20:fontcolor=lime\" output.mp4",
      "binary": "ffmpeg",
      "task": "drawtext と組み合わせてラベル付きバウンディングボックス",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=50:y=50:w=200:h=100:color=red:t=3:enable='between(t,2,5)'\" output.mp4",
      "binary": "ffmpeg",
      "task": "特定の時間範囲だけ表示する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf drawbox=x=100:y=100:w=300:h=200:color=red:t=4,drawbox=x=500:y=300:w=300:h=200:color=yellow:t=4,drawbox=x=900:y=500:w=300:h=200:color=cyan:t=4 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=50:y=50:w=200:h=100:color=red@0.5:t=fill\" output.mp4",
      "binary": "ffmpeg",
      "task": "塗りつぶし矩形",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=10:y=10:w=100:h=50:color=green:t=2\" output.mp4",
      "binary": "ffmpeg",
      "task": "色の指定方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=10:y=10:w=100:h=50:color=0xFF0000:t=2\" output.mp4",
      "binary": "ffmpeg",
      "task": "色の指定方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=10:y=10:w=100:h=50:color=blue@0.4:t=fill\" output.mp4",
      "binary": "ffmpeg",
      "task": "色の指定方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=0:y=0:w=iw:h=ih:color=yellow:t=5\" output.mp4",
      "binary": "ffmpeg",
      "task": "映像全体を囲む枠を描く",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=iw/2-1:y=0:w=2:h=ih:color=white:t=fill, drawbox=x=0:y=ih/2-1:w=iw:h=2:color=white:t=fill\" output.mp4",
      "binary": "ffmpeg",
      "task": "中央に十字線を描く",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawbox=x=20:y=20:w=150:h=80:color=red:t=3, drawbox=x=200:y=100:w=120:h=60:color=blue:t=3\" output.mp4",
      "binary": "ffmpeg",
      "task": "複数の矩形を描く",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawgrid=width=100:height=100:thickness=1:color=white@0.3\" output.mp4",
      "binary": "ffmpeg",
      "task": "drawgrid フィルタでグリッドを重ねる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawbox-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='Hello World':x=10:y=10:fontsize=36:fontcolor=white\" output.mp4",
      "binary": "ffmpeg",
      "task": "左上にテキストを表示する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='Title':x=(w-text_w)/2:y=30:fontsize=48:fontcolor=white, drawtext=text='Subtitle':x=(w-text_w)/2:y=90:fontsize=28:fontcolor=yellow\" output.mp4",
      "binary": "ffmpeg",
      "task": "複数テキストを重ねる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=textfile=caption.txt:x=10:y=10:fontsize=28:fontcolor=white\" output.mp4",
      "binary": "ffmpeg",
      "task": "テキストファイルから読み込む",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='CENTER':x=(w-text_w)/2:y=(h-text_h)/2:fontsize=48:fontcolor=white\" output.mp4",
      "binary": "ffmpeg",
      "task": "中央に表示する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='FFmpeg':fontsize=40:fontcolor=yellow\" output.mp4",
      "binary": "ffmpeg",
      "task": "フォントの指定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=fontfile=/path/to/NotoSansCJKjp-Regular.otf:text='日本語テキスト':fontsize=36:fontcolor=white\" output.mp4",
      "binary": "ffmpeg",
      "task": "フォントの指定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='Shadow Text':x=50:y=50:fontsize=40:fontcolor=white:shadowcolor=black:shadowx=3:shadowy=3\" output.mp4",
      "binary": "ffmpeg",
      "task": "影付きテキスト",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='BOX TEXT':x=20:y=20:fontsize=36:fontcolor=white:box=1:boxcolor=black@0.6:boxborderw=8\" output.mp4",
      "binary": "ffmpeg",
      "task": "背景ボックス付きテキスト",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='%{pts\\\\:hms}':x=w-text_w-10:y=h-text_h-10:fontsize=24:fontcolor=white:box=1:boxcolor=black@0.5\" output.mp4",
      "binary": "ffmpeg",
      "task": "タイムコードを表示する",
      "status": "not-executed",
      "reason": "Uses shell backslash-escaping of filter chars — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='Frame %{n}':x=10:y=10:fontsize=24:fontcolor=yellow\" output.mp4",
      "binary": "ffmpeg",
      "task": "フレーム番号を表示する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='スクロールテキストのサンプルです':x=w-200*t:y=h-60:fontsize=32:fontcolor=white\" output.mp4",
      "binary": "ffmpeg",
      "task": "スクロールテロップ（右から左へ流れるテキスト）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/drawtext-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=brightness=0.1\" output.mp4",
      "binary": "ffmpeg",
      "task": "明度を上げる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=saturation=1.4:contrast=1.15\" output.mp4",
      "binary": "ffmpeg",
      "task": "色あせた映像を鮮やかにする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=contrast=1.2:saturation=0.85:gamma=0.95\" output.mp4",
      "binary": "ffmpeg",
      "task": "映像に硬質感を出す（シネマ風）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf eq=brightness=0.1 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=contrast=1.5\" output.mp4",
      "binary": "ffmpeg",
      "task": "コントラストを上げる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=gamma=1.5\" output.mp4",
      "binary": "ffmpeg",
      "task": "ガンマ補正する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=saturation=1.5\" output.mp4",
      "binary": "ffmpeg",
      "task": "彩度を調整する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=brightness=0.05:contrast=1.2:saturation=1.3:gamma=1.1\" output.mp4",
      "binary": "ffmpeg",
      "task": "複数パラメータを同時指定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=gamma_r=0.9:gamma_g=1.0:gamma_b=1.1\" output.mp4",
      "binary": "ffmpeg",
      "task": "チャンネル別ガンマ補正でホワイトバランスを調整する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=brightness='0.1*sin(t)'\" output.mp4",
      "binary": "ffmpeg",
      "task": "動的パラメータ（時間で変化）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"eq=brightness=0.1:contrast=1.1:gamma=1.3\" output.mp4",
      "binary": "ffmpeg",
      "task": "暗い映像を明るく補正する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/eq-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a copy output.aac",
      "binary": "ffmpeg",
      "task": "1. 最速：無劣化コピーで音声抽出（品質劣化ゼロ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a pcm_s24le output.wav",
      "binary": "ffmpeg",
      "task": "5. WAV（無圧縮PCM）で抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -vn -c:a copy clip_audio.aac",
      "binary": "ffmpeg",
      "task": "6. 特定の時間区間だけ音声を抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -ss 30 -i input.mp4 -t 60 -vn -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "6. 特定の時間区間だけ音声を抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:a:0 -c:a copy track1.aac",
      "binary": "ffmpeg",
      "task": "7. 複数音声トラックから特定トラックを選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:a:1 -c:a copy track2.aac",
      "binary": "ffmpeg",
      "task": "7. 複数音声トラックから特定トラックを選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i \"$f\" -vn -c:a libmp3lame -q:a 2 \"${f%.mp4}.mp3\" -y",
      "binary": "ffmpeg",
      "task": "8. バッチ音声抽出（フォルダ内全mp4）",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a aac -ac 2 output.aac",
      "binary": "ffmpeg",
      "task": "エラー4: 音声がモノラルになった",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a flac output.flac",
      "binary": "ffmpeg",
      "task": "エラー5: WAVファイルが非常に大きい",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -af loudnorm=I=-16:LRA=11:TP=-1.5 -c:a aac -b:a 192k output.aac",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a copy output.m4a",
      "binary": "ffmpeg",
      "task": "1. 最速：無劣化コピーで音声抽出（品質劣化ゼロ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 0 output.mp3",
      "binary": "ffmpeg",
      "task": "2. MP3に変換して抽出（libmp3lame）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 320k output.mp3",
      "binary": "ffmpeg",
      "task": "2. MP3に変換して抽出（libmp3lame）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 128k output.mp3",
      "binary": "ffmpeg",
      "task": "2. MP3に変換して抽出（libmp3lame）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -vn -c:a aac -b:a 192k output.aac",
      "binary": "ffmpeg",
      "task": "3. AACに変換して抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k output.aac",
      "binary": "ffmpeg",
      "task": "3. AACに変換して抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -vn -c:a flac output.flac",
      "binary": "ffmpeg",
      "task": "4. FLACで抽出（ロスレス）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a pcm_s16le output.wav",
      "binary": "ffmpeg",
      "task": "5. WAV（無圧縮PCM）で抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-audio/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf fps=1 -frames:v 1 output.png",
      "binary": "ffmpeg",
      "task": "1. 1枚だけキャプチャする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-frames/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -ss 00:00:05 -i input.mp4 -frames:v 1 output.png",
      "binary": "ffmpeg",
      "task": "1. 1枚だけキャプチャする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-frames/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -ss 00:00:05 -i input.mp4 -frames:v 1 -q:v 2 output.jpg",
      "binary": "ffmpeg",
      "task": "4. PNGとJPGと画質",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-frames/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -ss 00:00:05 -i input.mp4 -vf scale=640:-1 -frames:v 1 output.png",
      "binary": "ffmpeg",
      "task": "5. 抽出と同時にリサイズする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-frames/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:05 -frames:v 1 output.png",
      "binary": "ffmpeg",
      "task": "症状2: 抽出したフレームが狙った瞬間から少しずれる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-frames/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:01 -vframes 1 thumbnail.jpg",
      "binary": "ffmpeg",
      "task": "基本：特定タイムスタンプから1フレーム抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:01 -vframes 1 thumbnail.png",
      "binary": "ffmpeg",
      "task": "基本：特定タイムスタンプから1フレーム抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf thumbnail -vframes 1 thumbnail.jpg",
      "binary": "ffmpeg",
      "task": "thumbnailフィルタ — 代表フレームを自動選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf thumbnail=300 -vframes 1 thumbnail.jpg",
      "binary": "ffmpeg",
      "task": "thumbnailフィルタ — 代表フレームを自動選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 -vf scale=320:180 thumb.jpg",
      "binary": "ffmpeg",
      "task": "解像度指定付きサムネイル抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 -vf scale=320:-1 thumb.jpg",
      "binary": "ffmpeg",
      "task": "解像度指定付きサムネイル抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"thumbnail,scale=320:180\" -vframes 1 thumb.jpg",
      "binary": "ffmpeg",
      "task": "解像度指定付きサムネイル抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:01 -vframes 1 -q:v 2 thumbnail.jpg",
      "binary": "ffmpeg",
      "task": "JPEGとPNGの選び方",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 thumbnail.jpg",
      "binary": "ffmpeg",
      "task": "よくある問題",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/extract-thumbnail/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fade=t=in:st=0:d=2\" output.mp4",
      "binary": "ffmpeg",
      "task": "フェードイン（冒頭を黒から徐々に表示）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -loop 1 -t 3 -i img1.jpg -loop 1 -t 3 -i img2.jpg -filter_complex \"[0][1]xfade=transition=fade:duration=1:offset=2\" output.mp4",
      "binary": "ffmpeg",
      "task": "静止画のスライドショーにクロスフェードを追加する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fade=t=out:st=8:d=2\" output.mp4",
      "binary": "ffmpeg",
      "task": "フェードアウト（映像の末尾を黒にフェード）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fade=t=in:st=0:d=1.5, fade=t=out:st=8.5:d=1.5\" output.mp4",
      "binary": "ffmpeg",
      "task": "フェードイン＋フェードアウトを一度に適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fade=t=in:st=0:d=2:color=white\" output.mp4",
      "binary": "ffmpeg",
      "task": "黒以外の色にフェードする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \"[0][1]xfade=transition=fade:duration=1:offset=4\" output.mp4",
      "binary": "ffmpeg",
      "task": "基本的なクロスフェード",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex \"[0][1]xfade=transition=wipeleft:duration=1:offset=4\" output.mp4",
      "binary": "ffmpeg",
      "task": "組み込みトランジション効果一覧",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex \"[0][1]xfade=transition=fade:duration=1:offset=5\" output.mp4",
      "binary": "ffmpeg",
      "task": "2映像の長さが異なる場合の注意",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i clip1.mp4 -i clip2.mp4 -i clip3.mp4 -filter_complex \"[0][1]xfade=transition=fade:duration=1:offset=4[v01]; [v01][2]xfade=transition=wipeleft:duration=1:offset=8\" output.mp4",
      "binary": "ffmpeg",
      "task": "3本の映像を2つのトランジションでつなぐ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i clip1.mp4 -i clip2.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]; [0:a][1:a]acrossfade=d=1[a]\" -map \"[v]\" -map \"[a]\" output.mp4",
      "binary": "ffmpeg",
      "task": "音声を含む場合の処理",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fade-crossfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -ac 2 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -ac 1 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -v verbose -i input.mp4 output.mp4",
      "binary": "ffmpeg",
      "task": "デバッグ用コマンド",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn test_audio.aac",
      "binary": "ffmpeg",
      "task": "デバッグ用コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -f lavfi -i anullsrc=r=44100:cl=stereo -c:v copy -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v copy -c:a libvorbis output.mp4",
      "binary": "ffmpeg",
      "task": "症状",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v copy -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:a aac -ar 44100 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:v -map 0:a -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-audio-no-sound/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -version",
      "binary": "ffmpeg",
      "task": "Windows",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -af loudnorm=I=-14:TP=-1.5:LRA=11 output.mp4",
      "binary": "ffmpeg",
      "task": "音量を調整する（ラウドネス正規化）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -c:a aac -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "よくある質問",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i 入力ファイル [オプション] 出力ファイル",
      "binary": "ffmpeg",
      "task": "基本的なコマンド構文",
      "status": "not-executed",
      "reason": "Japanese placeholder filename — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mov output.mp4",
      "binary": "ffmpeg",
      "task": "動画フォーマット変換",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "動画フォーマット変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset fast output.mp4",
      "binary": "ffmpeg",
      "task": "動画を圧縮する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3",
      "binary": "ffmpeg",
      "task": "音声を抽出する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 0 -t 5 -vf \"fps=15,scale=480:-1:flags=lanczos,palettegen\" palette.png",
      "binary": "ffmpeg",
      "task": "GIFアニメに変換する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -i palette.png -ss 0 -t 5 -lavfi \"fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse\" output.gif",
      "binary": "ffmpeg",
      "task": "GIFアニメに変換する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-beginners-guide/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -encoders | grep 264",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -encoders",
      "binary": "ffmpeg",
      "task": "コーデックの互換性を事前確認",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -decoders",
      "binary": "ffmpeg",
      "task": "コーデックの互換性を事前確認",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -h encoder=libx264",
      "binary": "ffmpeg",
      "task": "コーデックの互換性を事前確認",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -buildconf | grep enable",
      "binary": "ffmpeg",
      "task": "ビルドフラグを確認する方法",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -encoders | grep 265",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -encoders | grep hevc",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libvpx-vp9 output.webm",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libaom-av1 output.mkv",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "libaom-av1 too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -f mpegts output.mts",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -formats",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-codec-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. ストリームコピー（`-c copy`）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-copy-codec-vs-reencode/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "2. 再エンコード",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-copy-codec-vs-reencode/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "6. ストリーム単位の選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-copy-codec-vs-reencode/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "6. ストリーム単位の選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-copy-codec-vs-reencode/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v:0 -map 0:a:0? -c:v libx264 -b:v 1560k -preset medium -c:a aac -b:a 128k -map_metadata -1 -map_chapters -1 -sn -dn -movflags +faststart discord-20mb.mp4",
      "binary": "ffmpeg",
      "task": "90秒を20MB以内に近づける例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-discord-compress/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v:0 -c:v libx264 -b:v 1560k -preset medium -pass 1 -passlogfile discord20-pass -an -f null -",
      "binary": "ffmpeg",
      "task": "容量が安定しないときは2パスを比較する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-discord-compress/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v:0 -map 0:a:0? -c:v libx264 -b:v 1560k -preset medium -pass 2 -passlogfile discord20-pass -c:a aac -b:a 128k -map_metadata -1 -map_chapters -1 -sn -dn -movflags +faststart discord-20mb-2pass.mp4",
      "binary": "ffmpeg",
      "task": "容量が安定しないときは2パスを比較する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-discord-compress/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "2. 1行で済む修正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-faststart-web-playback/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "6. 再エンコード時にfaststartを適用する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-faststart-web-playback/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "代表的な使用例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-ffprobe-ffplay/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4",
      "binary": "ffmpeg",
      "task": "代表的な使用例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-ffprobe-ffplay/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -buildconf | grep x265",
      "binary": "ffmpeg",
      "task": "確認方法",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset fast output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -v quiet -stats -i input.mp4 -c:v libx265 -crf 26 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 26 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "H.265の基本的なエンコードコマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 26 -tag:v hvc1 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "H.265の基本的なエンコードコマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset fast -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "H.265の基本的なエンコードコマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v hevc_nvenc output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Hardware/platform-specific encoder — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v hevc_videotoolbox output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Hardware/platform-specific encoder — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v hevc_qsv output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Hardware/platform-specific encoder — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -tag:v hvc1 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -profile:v main output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -profile:v main10 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -level:v 4.1 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset medium -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "推奨CRF値",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-h265-hevc-error/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i \"My Video.mp4\" output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-no-such-file/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i 'My Video.mp4' output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-no-such-file/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i /home/user/videos/input.mp4 /home/user/videos/output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-no-such-file/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i INPUT.MP4 output.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-no-such-file/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 output/result.mp4",
      "binary": "ffmpeg",
      "task": "解決方法",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-no-such-file/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 ~/Videos/output.mp4",
      "binary": "ffmpeg",
      "task": "2. 書き込み可能なディレクトリへ出力する",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ffmpeg-permission-denied/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1280:720\" output.mp4",
      "binary": "ffmpeg",
      "task": "映像フィルタ（-vf）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]split[v1][v2];[v1]scale=1280:720[main];[v2]scale=320:180[preview]\" -map \"[main]\" -c:v libx264 -crf 23 main.mp4 -map \"[preview]\" -c:v libx264 -crf 30 preview.mp4",
      "binary": "ffmpeg",
      "task": "`split` でストリームを分岐させる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]split=2[v1][v2];[v1]scale=1280:720[main];[v2]scale=640:360[preview]\" -map \"[main]\" -c:v libx264 -crf 23 -an main.mp4 -map \"[preview]\" -c:v libx264 -crf 28 -an preview.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1280:720,fps=30\" output.mp4",
      "binary": "ffmpeg",
      "task": "映像フィルタ（-vf）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"volume=2.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "音声フィルタ（-af）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]scale=640:360[v]\" -map \"[v]\" -map 0:a output.mp4",
      "binary": "ffmpeg",
      "task": "スケールして特定の出力ラベルにバインド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]scale=1280:720,fps=30[v]\" -map \"[v]\" -map 0:a -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "複数フィルタのチェーン",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"[0:v][1:v]overlay=10:10[v]\" -map \"[v]\" -map 0:a -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "ウォーターマーク（画像オーバーレイ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]scale=1280:720[main];[0:v]scale=320:180[thumb]\" -map \"[main]\" -c:v libx264 -crf 23 main.mp4 -map \"[thumb]\" -c:v libx264 -crf 28 thumb.mp4",
      "binary": "ffmpeg",
      "task": "複数出力の作成（サムネイルと本編を同時生成）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]scale=1280:720[v];[0:a]volume=1.5[a]\" -map \"[v]\" -map \"[a]\" -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "音声と映像を同時に処理する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i main.mp4 -i bgm.mp3 -filter_complex \"[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=2[a]\" -map 0:v -map \"[a]\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "`amix` で複数音声を合成する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/filtergraph-basics/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -af aresample=async=1000 -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決法①: aresample async — クロックに追従して伸縮・補填・切り詰め",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-audio-drift/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -ar 48000 -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決法②: サンプルレートを標準化する（互換性）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-audio-drift/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -analyzeduration 100M -probesize 100M -i input.mp4 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "原因①: プローブしたデータが少なすぎる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-could-not-find-codec-parameters/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=trunc(iw/2)*2:trunc(ih/2)*2\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決法1: trunc で偶数に切り下げる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-height-not-divisible-by-2/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-2:720\" output.mp4",
      "binary": "ffmpeg",
      "task": "解決法2: scale=-2 でアスペクト比を保つ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-height-not-divisible-by-2/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1280:-2\" output.mp4",
      "binary": "ffmpeg",
      "task": "解決法2: scale=-2 でアスペクト比を保つ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-height-not-divisible-by-2/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"pad=ceil(iw/2)*2:ceil(ih/2)*2\" output.mp4",
      "binary": "ffmpeg",
      "task": "解決法3: pad で次の偶数まで余白を足す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-height-not-divisible-by-2/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -err_detect ignore_err -i input.mp4 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "手順2: エラー許容で再multiplexする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-invalid-data-found/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -max_muxing_queue_size 1024 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "解決策①: muxキューサイズを引き上げる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-too-many-packets-buffered/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -max_muxing_queue_size 4096 -c:v libx264 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "解決策①: muxキューサイズを引き上げる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-too-many-packets-buffered/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -codecs",
      "binary": "ffmpeg",
      "task": "ステップ1: ビルドが持つエンコーダを確認する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-unknown-encoder-libx264/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "ステップ3: 実際のエンコードで検証する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-unknown-encoder-libx264/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v mpeg4 -q:v 4 output.mp4",
      "binary": "ffmpeg",
      "task": "x264 が使えないときの代替エンコーダ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-unknown-encoder-libx264/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libvpx -b:v 1M output.webm",
      "binary": "ffmpeg",
      "task": "x264 が使えないときの代替エンコーダ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/fix-unknown-encoder-libx264/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif",
      "binary": "ffmpeg",
      "task": "1. 最もシンプル：1コマンドでpalettegen+paletteuse（lavfi方式）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=15,scale=320:-1:flags=lanczos,palettegen\" C:/tmp/palette.png",
      "binary": "ffmpeg",
      "task": "エラー3: パス2で `No such file or directory: palette.png`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i C:/tmp/palette.png -lavfi \"fps=15,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse\" output.gif",
      "binary": "ffmpeg",
      "task": "エラー3: パス2で `No such file or directory: palette.png`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=10,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 00:00:05 -i input.mp4 -t 3 -vf \"fps=12,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" -loop 0 output.gif",
      "binary": "ffmpeg",
      "task": "2. 特定区間だけをGIFに変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=15,scale=480:-1:flags=lanczos,palettegen=stats_mode=full\" palette.png",
      "binary": "ffmpeg",
      "task": "3. 高品質：2ファイル2パス方式（推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i palette.png -lavfi \"fps=15,scale=480:-1:flags=lanczos[x];[x][1:v]paletteuse=dither=bayer:bayer_scale=5\" output.gif",
      "binary": "ffmpeg",
      "task": "3. 高品質：2ファイル2パス方式（推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 00:00:10 -i input.mp4 -t 5 -vf \"fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=bayer\" -loop 0 output_small.gif",
      "binary": "ffmpeg",
      "task": "4. 小サイズ最優先（Slack・メッセージアプリ向け）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" -loop -1 output_once.gif",
      "binary": "ffmpeg",
      "task": "5. 1回だけ再生するGIF（ループなし）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i \"$f\" -vf \"fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" \"${f%.mp4}.gif\" -y",
      "binary": "ffmpeg",
      "task": "6. バッチGIF生成（フォルダ内の全mp4）",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i palette.png -lavfi \"fps=15,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse=dither=floyd_steinberg\" output_smooth.gif",
      "binary": "ffmpeg",
      "task": "ディザリング比較",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=bayer\" output.gif",
      "binary": "ffmpeg",
      "task": "エラー1: GIFファイルが数十MB以上になった",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/gif-creation/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input_hdr.mp4 -vf \"zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p\" -c:v libx264 -crf 18 -preset slow -c:a copy output_sdr.mp4",
      "binary": "ffmpeg",
      "task": "zscale を使ったトーンマッピング（推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hdr-to-sdr/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input_hlg.mp4 -vf \"zscale=t=linear,format=gbrpf32le,zscale=p=bt709,tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p\" -c:v libx264 -crf 18 -preset slow -c:a copy output_sdr.mp4",
      "binary": "ffmpeg",
      "task": "HLG → SDR 変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hdr-to-sdr/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input_hdr.mp4 -vf \"colorspace=bt709:iall=bt2020:fast=1,format=yuv420p\" -c:v libx264 -crf 18 -preset slow -c:a copy output_sdr.mp4",
      "binary": "ffmpeg",
      "task": "colorspace フィルタを使う方法（zscale が使えない場合）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hdr-to-sdr/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input_hdr.mp4 -vf \"zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p\" -c:v libx264 -crf 18 -preset slow -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:a aac -b:a 256k output_youtube_sdr.mp4",
      "binary": "ffmpeg",
      "task": "YouTube アップロード向けの設定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hdr-to-sdr/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i \"$f\" -vf \"zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p\" -c:v libx264 -crf 18 -preset slow -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -c:a copy \"sdr_${f}\"",
      "binary": "ffmpeg",
      "task": "一括変換スクリプト（フォルダ内のHDR動画をすべてSDRに変換）",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hdr-to-sdr/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls /tmp/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "最小限のHLS出力",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -f hls -hls_time 6 /tmp/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "セグメント長の制御",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -g 60 -keyint_min 60 -sc_threshold 0 -c:a aac -f hls -hls_time 6 /tmp/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "セグメント長の制御",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -f hls -hls_time 6 -hls_list_size 0 /tmp/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "プレイリストにすべてのセグメントを保持する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -f hls -hls_time 6 -hls_list_size 0 -hls_segment_filename \"/tmp/segment_%03d.ts\" /tmp/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "セグメントファイル名のカスタマイズ",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -f hls -hls_time 6 -hls_list_size 0 -hls_segment_filename \"/tmp/hls/seg_%04d.ts\" /tmp/hls/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "セグメントファイル名のカスタマイズ",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k -f hls -hls_time 6 -hls_list_size 0 -hls_segment_filename \"/tmp/hls_vod/seg_%04d.ts\" /tmp/hls_vod/index.m3u8",
      "binary": "ffmpeg",
      "task": "VOD用の完全な例",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -f hls -hls_time 6 -hls_list_size 5 -hls_flags delete_segments /tmp/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "ライブストリーミング — 古いセグメントの自動削除",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -f hls -hls_time 6 -hls_list_size 0 -hls_segment_filename \"/tmp/hls_output/seg_%04d.ts\" /tmp/hls_output/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "出力ディレクトリが存在しない",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hls-segmenting/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=h=90\" output.mp4",
      "binary": "ffmpeg",
      "task": "色相を回転させる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf hue=h=30:s=1.2 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=s=2.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "彩度を調整する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=b=0.3\" output.mp4",
      "binary": "ffmpeg",
      "task": "輝度を調整する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=h=45:s=1.5:b=0.1\" output.mp4",
      "binary": "ffmpeg",
      "task": "複数パラメータを同時指定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=s=0\" output.mp4",
      "binary": "ffmpeg",
      "task": "グレースケール変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=h=120*sin(t/5)\" output.mp4",
      "binary": "ffmpeg",
      "task": "動的な色相変化（アニメーション表現）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.jpg -vf \"hue=h=180:s=1.2\" output.jpg",
      "binary": "ffmpeg",
      "task": "静止画への適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=h=-15:s=1.2:b=0.05\" output.mp4",
      "binary": "ffmpeg",
      "task": "暖色系に補正する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hue=h=180\" output.mp4",
      "binary": "ffmpeg",
      "task": "色味を反転する（補色）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/hue-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.ts -c copy -avoid_negative_ts make_zero output.mp4",
      "binary": "ffmpeg",
      "task": "解決②負のタイムスタンプ補正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/invalid-pts-fix/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -fflags +genpts -i input.ts -c copy -avoid_negative_ts make_zero output.mp4",
      "binary": "ffmpeg",
      "task": "genpts と合わせて使う",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/invalid-pts-fix/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -fps_mode cfr -r 30 -c:v libx264 -preset veryfast -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "解決③VFR→CFR化",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/invalid-pts-fix/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf setpts=PTS-STARTPTS -af asetpts=PTS-STARTPTS -c:v libx264 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "解決④setpts/asetptsでリセット",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/invalid-pts-fix/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i iphone.mov -c copy -tag:v hvc1 -movflags +faststart iphone.mp4",
      "binary": "ffmpeg",
      "task": "2. 最速・無劣化：リムックス + `hvc1` タグ付与",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i iphone.mov -c:v libx264 -crf 20 -preset medium -c:a aac -b:a 192k -movflags +faststart iphone_h264.mp4",
      "binary": "ffmpeg",
      "task": "3. 互換性最優先：H.264に再エンコード",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i iphone_vertical.mov -c:v libx264 -crf 20 -preset medium -c:a aac -b:a 192k -movflags +faststart -metadata:s:v rotate=0 iphone_vertical.mp4",
      "binary": "ffmpeg",
      "task": "縦動画を横動画にしたくない場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i \"$f\" -c copy -tag:v hvc1 -movflags +faststart \"${f%.*}.mp4\"",
      "binary": "ffmpeg",
      "task": "bash / macOS / Linux",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i iphone.mov -c:v copy -tag:v hvc1 -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "問題2: 音声が出ない",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i IMG_1234.MOV -c copy -tag:v hvc1 IMG_1234.mp4",
      "binary": "ffmpeg",
      "task": "問題3: ライブフォト（動画付き写真）のMOVを変換したい",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i iphone.mov -c:v libx264 -crf 20 -r 30 -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "問題4: Twitterにアップすると音ズレする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i slowmo.mov -filter:v \"setpts=8*PTS\" -r 30 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "問題5: スローモーション動画が普通の速度になる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i iphone_4k_hdr.mov -vf \"zscale=t=linear:npl=100,tonemap=hable:desat=0,zscale=p=bt709:t=bt709:m=bt709,format=yuv420p\" -c:v libx264 -crf 20 -c:a aac -b:a 192k output_sdr.mp4",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -map 0:v:0 -map 0:a:0? -vf \"scale=trunc(iw/2)*2:trunc(ih/2)*2\" -c:v libx264 -preset fast -crf 23 -pix_fmt yuv420p -c:a aac -b:a 128k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "PC版FFmpegを使う場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/iphone-video-windows-playback/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -stream_loop 2 -i input.mp4 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "リピート: -stream_loop（再エンコードなし）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"loop=loop=3:size=30:start=60\" -an output.mp4",
      "binary": "ffmpeg",
      "task": "一部区間だけを繰り返す（loop フィルタ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -stream_loop -1 -i input.mp4 -t 60 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "指定した長さまでループさせる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -stream_loop 3 -i input.mp4 -i bgm.mp3 -map 0:v -map 1:a -c:v copy -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "ループ動画に別の音声を付ける",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 2 -t 3 -i input.mp4 -filter_complex \"[0:v]split[a][b];[b]reverse[r];[a][r]concat=n=2:v=1[v]\" -map \"[v]\" -an -c:v libx264 -crf 20 -pix_fmt yuv420p -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "ブーメラン: 順再生 + 逆再生",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]split[a][b];[b]reverse[r];[a][r]concat=n=2:v=1[v];[0:a]asplit[c][d];[d]areverse[ar];[c][ar]concat=n=2:v=0:a=1[a]\" -map \"[v]\" -map \"[a]\" -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "音声も往復させる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 2 -t 3 -i input.mp4 -filter_complex \"[0:v]split[a][b];[b]reverse[r];[a][r]concat=n=2:v=1,setpts=0.5*PTS[v]\" -map \"[v]\" -an output.mp4",
      "binary": "ffmpeg",
      "task": "往復を速くする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -stream_loop 2 -i boomerang.mp4 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "往復を複数回繰り返す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 2 -t 3 -i input.mp4 -filter_complex \"[0:v]split[a][b];[b]reverse[r];[a][r]concat=n=2:v=1,loop=loop=2:size=32767:start=0[v]\" -map \"[v]\" -an output.mp4",
      "binary": "ffmpeg",
      "task": "往復を複数回繰り返す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 2 -t 2 -i input.mp4 -filter_complex \"[0:v]fps=15,scale=480:-1,split[a][b];[b]reverse[r];[a][r]concat=n=2:v=1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" -loop 0 output.gif",
      "binary": "ffmpeg",
      "task": "ブーメラン GIF",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loop-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp3 -af loudnorm output.mp3",
      "binary": "ffmpeg",
      "task": "1パス正規化（クイック）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loudness-normalization/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"loudnorm=I=-16:TP=-1.5:LRA=11\" output.mp3",
      "binary": "ffmpeg",
      "task": "ターゲット値のカスタマイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loudness-normalization/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "2パス正規化（精度重視）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loudness-normalization/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-27.06:measured_TP=-4.28:measured_LRA=7.20:measured_thresh=-37.06:linear=true\" output.mp3",
      "binary": "ffmpeg",
      "task": "2パス正規化（精度重視）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loudness-normalization/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -af \"loudnorm=I=-16:TP=-1.5:LRA=11\" output.mp4",
      "binary": "ffmpeg",
      "task": "動画ファイルへの適用（映像再エンコードなし）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/loudness-normalization/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset veryfast -tune zerolatency -profile:v baseline -level 3.1 -pix_fmt yuv420p -g 30 -keyint_min 30 -sc_threshold 0 -b:v 2500k -c:a aac -b:a 128k -f hls -hls_time 1 -hls_list_size 10 -hls_flags independent_segments+delete_segments -hls_segment_type mpegts -hls_segment_filename \"/tmp/seg_%04d.ts\" /tmp/playlist.m3u8",
      "binary": "ffmpeg",
      "task": "前提条件：固定キーフレーム間隔 / GOP",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "7.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/low-latency-hls/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset veryfast -tune zerolatency -g 30 -keyint_min 30 -sc_threshold 0 -c:a aac -f hls -hls_time 1 -hls_list_size 20 -hls_flags independent_segments+delete_segments+program_date_time -master_pl_name master.m3u8 -hls_segment_filename \"/tmp/seg_%04d.ts\" /tmp/stream.m3u8",
      "binary": "ffmpeg",
      "task": "最小限のLL-HLS出力",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "7.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/low-latency-hls/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset veryfast -tune zerolatency -g 30 -keyint_min 30 -sc_threshold 0 -c:a aac -f hls -hls_time 1 -hls_list_size 20 -hls_segment_type fmp4 -hls_fmp4_init_filename \"init.mp4\" -hls_flags independent_segments+delete_segments+program_date_time -hls_segment_filename \"/tmp/seg_%04d.m4s\" /tmp/stream.m3u8",
      "binary": "ffmpeg",
      "task": "fMP4ベースのLL-HLS（推奨）",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "7.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/low-latency-hls/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i rtmp://localhost/live/stream -c:v libx264 -preset ultrafast -tune zerolatency -g 30 -keyint_min 30 -sc_threshold 0 -b:v 3000k -c:a aac -b:a 128k -f hls -hls_time 1 -hls_list_size 10 -hls_flags delete_segments+independent_segments+program_date_time -hls_segment_filename \"/tmp/live_seg_%04d.ts\" /tmp/live_stream.m3u8",
      "binary": "ffmpeg",
      "task": "ライブソースからLL-HLSを配信する",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "7.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/low-latency-hls/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"drawtext=text='%{localtime}':fontcolor=white:fontsize=36:x=10:y=10:box=1:boxcolor=black@0.5\" -c:v libx264 -preset veryfast -tune zerolatency -g 30 -c:a aac -f hls -hls_time 1 -hls_list_size 10 -hls_flags delete_segments+independent_segments -hls_segment_filename \"/tmp/burnin_%04d.ts\" /tmp/burnin.m3u8",
      "binary": "ffmpeg",
      "task": "glass-to-glass遅延の測定",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "7.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/low-latency-hls/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"lut3d=file=my_lut.cube\" output.mp4",
      "binary": "ffmpeg",
      "task": ".cube LUT を適用する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "なぜこの数字になるのか",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"lut3d=file='my lut file.cube'\" output.mp4",
      "binary": "ffmpeg",
      "task": "パスにスペースが含まれる場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"lut3d=file=my_lut.cube,eq=contrast=0.9:saturation=0.8\" output.mp4",
      "binary": "ffmpeg",
      "task": "LUT の適用強度を弱める考え方",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"lut3d=file=test.cube\" output.mp4",
      "binary": "ffmpeg",
      "task": "テスト用の最小 .cube ファイルを作成して適用する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i lut_image.png -filter_complex \"[0][1]haldclut\" output.mp4",
      "binary": "ffmpeg",
      "task": "`haldclut` フィルタを使った LUT 適用（別の方法）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i slog3_footage.mp4 -vf \"lut3d=file=SLog3_To_Rec709.cube\" output.mp4",
      "binary": "ffmpeg",
      "task": "1. ログ映像からの変換（S-Log3 → Rec.709）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"lut3d=file=film_look.cube\" output.mp4",
      "binary": "ffmpeg",
      "task": "2. フィルムルックの適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"lut3d=file=my_lut.cube,eq=contrast=1.05:saturation=1.1\" output.mp4",
      "binary": "ffmpeg",
      "task": "`lut3d` と `curves`・`eq` の組み合わせ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf lut3d=file=look.cube,eq=saturation=0.95:contrast=0.98 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/lut3d-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.m4a -c:a libmp3lame -b:a 192k output.mp3",
      "binary": "ffmpeg",
      "task": "2. 基本の変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/m4a-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.m4a -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "3. 可変ビットレート（VBR）— 容量あたりの音質が良い",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/m4a-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.m4a -map 0:a -map 0:v? -c:a libmp3lame -q:a 2 -c:v copy -id3v2_version 3 output.mp3",
      "binary": "ffmpeg",
      "task": "5. メタデータとカバーアートの保持",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/m4a-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.m4a -c:a libmp3lame -b:a 96k -ac 1 output.mp3",
      "binary": "ffmpeg",
      "task": "6. チャンネルとサンプルレート",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/m4a-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.m4a -c:a libmp3lame -q:a 2 -ar 44100 output.mp3",
      "binary": "ffmpeg",
      "task": "6. チャンネルとサンプルレート",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/m4a-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -c copy -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "2. 基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -i subtitle_utf8.srt -c:v copy -c:a copy -c:s mov_text output.mp4",
      "binary": "ffmpeg",
      "task": "エラー4: 字幕が文字化けする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v copy -c:a copy -c:s mov_text -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "パターン1: 字幕形式が非互換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -c copy -sn -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "パターン1: 字幕形式が非互換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v copy -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "パターン2: 音声コーデックが非標準（PCM / FLAC / OPUS等）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v libx264 -crf 20 -preset slow -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "パターン3: 映像コーデックがMP4未対応（VP9 / AV1 等）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v copy -c:a aac -b:a 192k -c:s mov_text -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "4. 音声だけ再エンコードする折衷案（最も実用的）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0 -c copy -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "全トラックをまとめてコピー",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -map 0:s:m:language:jpn -c copy -c:s mov_text -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "特定の音声・字幕だけ残す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mkv-to-mp4-remux/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c copy -movflags faststart output_fast.mp4",
      "binary": "ffmpeg",
      "task": "予防策：`-movflags faststart`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/moov-atom/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4",
      "binary": "ffmpeg",
      "task": "エンコード時に faststart を指定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/moov-atom/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -c copy -movflags frag_keyframe+empty_moov+default_base_moof -frag_duration 4000000 output_frag.mp4",
      "binary": "ffmpeg",
      "task": "フラグメント化MP4で耐クラッシュ性を上げる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/moov-atom/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=80:60:100:80,scale=10:8,scale=80:60:flags=neighbor[fg];[0:v][fg]overlay=100:80[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "scale でダウンスケール→アップスケールする方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=80:60:100:80,pixelize=w=10:h=10[fg];[0:v][fg]overlay=100:80[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "pixelize フィルタを使う方法（FFmpeg 5.1+）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=80:60:100:80,gblur=sigma=20[fg];[0:v][fg]overlay=100:80[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "crop + overlay サンドイッチパターン",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=80:60:100:80,boxblur=10[fg];[0:v][fg]overlay=100:80[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "boxblur を使った高速版",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=60:50:40:40,boxblur=10[a];[0:v][a]overlay=40:40[v1];[0:v]crop=60:50:200:140,boxblur=10[b];[v1][b]overlay=200:140[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "複数の領域を同時に隠す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=60:50:40+t*5:40,boxblur=10[fg];[0:v][fg]overlay=40+t*5:40[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "一定速度で水平移動する場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=60:50:if(lt(t\\,5)\\,40\\,150):40,boxblur=10[fg];[0:v][fg]overlay=if(lt(t\\,5)\\,40\\,150):40[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "キーフレーム的に位置を切り替える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=60:50:40:40,boxblur=10[fg];[0:v][fg]overlay=x=40:y=40:enable='between(t,2,5)'[out]\" -map \"[out]\" output.mp4",
      "binary": "ffmpeg",
      "task": "特定の時間範囲だけぼかす",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]crop=80:60:100:80,boxblur=10[fg];[0:v][fg]overlay=100:80[out]\" -map \"[out]\" -c:v libx264 -crf 18 -pix_fmt yuv420p output.mp4",
      "binary": "ffmpeg",
      "task": "CRF を低めに設定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mosaic-blur-region/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mov -c copy -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "2. 最速・無劣化変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v libx264 -crf 20 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "4. 再エンコードコマンド（ProRes / PCM）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v libx264 -crf 20 -c:a aac -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "4. 再エンコードコマンド（ProRes / PCM）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v copy -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "必要な部分だけ再エンコードする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v copy -c:a copy -tag:v hvc1 -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "エラー2: HEVCのMOVは変換できたがApple端末で再生できない",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mov-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "1. 基本のコマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mp4-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -map 0:a:1 -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "4. なぜ `-vn` が重要か",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mp4-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -ss 00:01:30 -t 00:01:30 -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "5. トリミング——区間だけを切り出す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mp4-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -ss 00:01:30 -to 00:03:00 -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "5. トリミング——区間だけを切り出す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mp4-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 5 -ac 1 -ar 44100 output.mp3",
      "binary": "ffmpeg",
      "task": "6. モノラル出力とサンプルレート",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mp4-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:01:30 -t 00:01:30 -vn -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "エラー3: 切り出したクリップの先頭が少し遅れる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/mp4-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i video.mp4 -i audio_ja.aac -i audio_en.aac -map 0:v:0 -map 1:a:0 -map 2:a:0 -c:v copy -c:a copy output_bilingual.mkv",
      "binary": "ffmpeg",
      "task": "2つの音声ファイルを1本の動画にまとめる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/multi-audio-track/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i video.mp4 -i audio_ja.aac -i audio_en.aac -map 0:v:0 -map 1:a:0 -map 2:a:0 -c copy -metadata:s:a:0 language=jpn -metadata:s:a:1 language=eng output.mkv",
      "binary": "ffmpeg",
      "task": "言語メタデータを設定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/multi-audio-track/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -c copy -disposition:a:0 default -disposition:a:1 0 output.mkv",
      "binary": "ffmpeg",
      "task": "デフォルト音声トラックを設定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/multi-audio-track/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i existing.mp4 -i new_audio.aac -map 0 -map 1:a -c copy output_added.mkv",
      "binary": "ffmpeg",
      "task": "既存の動画に音声トラックを追加する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/multi-audio-track/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:a:1 -c:a copy audio_track2.aac",
      "binary": "ffmpeg",
      "task": "特定の音声トラックだけを抽出する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/multi-audio-track/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0 -map -0:a:1 -c copy output.mkv",
      "binary": "ffmpeg",
      "task": "特定の音声トラックを削除する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/multi-audio-track/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:v -map 0:a:0 -map 0:a:1 -c:v copy -c:a:0 aac -b:a:0 192k -c:a:1 copy output.mkv",
      "binary": "ffmpeg",
      "task": "音声トラックのコーデックを変換する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/multi-audio-track/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -f mp4 pipe:1 | cat > output.mp4",
      "binary": "ffmpeg",
      "task": "変換結果をstdoutに出力してパイプで送る",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/pipe-stdin-stdout/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -movflags frag_keyframe+empty_moov -f mp4 pipe:1 > output.mp4",
      "binary": "ffmpeg",
      "task": "変換結果をstdoutに出力してパイプで送る",
      "status": "not-executed",
      "reason": "Uses shell output redirection — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/pipe-stdin-stdout/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i \"https://example.com/video.mp4\" -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "`curl` との連携",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/pipe-stdin-stdout/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:01 -frames:v 1 -f image2 pipe:1 > thumbnail.jpg",
      "binary": "ffmpeg",
      "task": "サムネイル画像をstdoutに出力する",
      "status": "not-executed",
      "reason": "Uses shell output redirection — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/pipe-stdin-stdout/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow -acodec aac -b:a 96k output.mp4",
      "binary": "ffmpeg",
      "task": "2. 手早い方法 — 画質（CRF）で縮小",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reduce-video-size-for-email/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=-2:720 -c:v libx264 -crf 28 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "3. 容量を大きく削る — 解像度ダウン",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reduce-video-size-for-email/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -y -i input.mp4 -c:v libx264 -b:v 1000k -pass 1 -an -f null -",
      "binary": "ffmpeg",
      "task": "4. 2パス — 目標サイズに近づける",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reduce-video-size-for-email/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 2 -c:a aac -b:a 96k output.mp4",
      "binary": "ffmpeg",
      "task": "4. 2パス — 目標サイズに近づける",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reduce-video-size-for-email/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -an output.mp4",
      "binary": "ffmpeg",
      "task": "1. 最速の方法 — `-an` で音声を落とす",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/remove-audio-from-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "2. `-map` の方法 — 残すものを正確に指定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/remove-audio-from-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -af volume=0 -c:v copy -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "4. 削除ではなく無音化する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/remove-audio-from-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v -map 0:a:1 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "5. 複数の音声トラックのうち1つだけ削除する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/remove-audio-from-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i \"$f\" -c:v copy -an \"${f%.mp4}_mute.mp4\"",
      "binary": "ffmpeg",
      "task": "6. 複数ファイルの音声を一括削除する",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/remove-audio-from-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 18 -an output.mp4",
      "binary": "ffmpeg",
      "task": "症状2: `Could not find tag for codec ... in stream`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/remove-audio-from-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -an -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "症状3: 再生はできるがWebでシークがおかしい",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/remove-audio-from-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "1. 基本コマンド — 2入力をまとめてマッピング",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/replace-audio-in-video/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.m4a -map 0:v:0 -map 1:a:0 -c copy -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "4. 音声を再エンコードするかコピーするか",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/replace-audio-in-video/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -itsoffset 1.5 -i input.mp3 -map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -shortest output.mp4",
      "binary": "ffmpeg",
      "task": "5. 音声のディレイ・オフセットを加える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/replace-audio-in-video/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf reverse -af areverse output.mp4",
      "binary": "ffmpeg",
      "task": "基本: 映像と音声を両方逆にする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"reverse,setpts=0.5*PTS\" -af \"areverse,atempo=2\" output.mp4",
      "binary": "ffmpeg",
      "task": "逆再生 + 倍速",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -af areverse output.mp3",
      "binary": "ffmpeg",
      "task": "音声ファイルだけ逆再生",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf reverse -an output.mp4",
      "binary": "ffmpeg",
      "task": "基本: 映像と音声を両方逆にする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 00:00:05 -t 5 -i input.mp4 -vf reverse -af areverse output.mp4",
      "binary": "ffmpeg",
      "task": "一部だけ逆再生にする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"trim=0:3,reverse\" -af \"atrim=0:3,areverse\" output.mp4",
      "binary": "ffmpeg",
      "task": "一部だけ逆再生にする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-2:720,reverse\" -af areverse output.mp4",
      "binary": "ffmpeg",
      "task": "reverse はどれだけメモリを使うのか（実測）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -c copy -f segment -segment_time 10 -reset_timestamps 1 seg%03d.mp4",
      "binary": "ffmpeg",
      "task": "長い動画を丸ごと逆再生する: 分割 → 各片を逆再生 → 逆順に連結",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=15,scale=320:-1,reverse\" output.gif",
      "binary": "ffmpeg",
      "task": "逆再生 GIF",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=15,scale=320:-1,split[a][b];[b]reverse[r];[a][r]concat=n=2:v=1\" output.gif",
      "binary": "ffmpeg",
      "task": "逆再生 GIF",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/reverse-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf transpose=1 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. 90度時計回り（スマートフォン縦撮り修正）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf transpose=1 -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "エラー4: メタデータ修正後もプレイヤーで横向きになる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"transpose=1,scale=1080:-2\" -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "エラー5: 回転後に解像度が期待と違う（縦横が入れ替わる）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"rotate=PI/4\" -c:v libx264 -crf 23 output.mp4",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -nostdin -i \"$f\" -vf transpose=1 -c:a copy \"rotated_${f}\" -y",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf transpose=2 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "2. 90度反時計回り",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"transpose=1,transpose=1\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "3. 180度回転",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"hflip,vflip\" -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "3. 180度回転",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf hflip -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "4. 水平反転（左右ミラー）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf vflip -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "5. 垂直反転（上下ミラー）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"transpose=1,scale=1280:-2\" -c:v libx264 -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "6. 回転 ＋ リサイズの同時処理",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4",
      "binary": "ffmpeg",
      "task": "メタデータ回転 vs 再エンコード回転",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf transpose=1 -c:a copy test.mp4",
      "binary": "ffmpeg",
      "task": "エラー1: 回転後も映像が傾いたまま",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rotate-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 4500k -maxrate 4500k -bufsize 9000k -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -ar 44100 -f flv rtmp://a.rtmp.youtube.com/live2/STREAM-KEY",
      "binary": "ffmpeg",
      "task": "最小の送出コマンド",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rtmp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 6000k -maxrate 6000k -bufsize 12000k -pix_fmt yuv420p -g 120 -c:a aac -b:a 160k -ar 44100 -f flv rtmp://live.twitch.tv/app/STREAM-KEY",
      "binary": "ffmpeg",
      "task": "Twitchへ配信する",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rtmp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/app/STREAM-KEY",
      "binary": "ffmpeg",
      "task": "再エンコードせずに送出する（-c copy）",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rtmp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -f flv rtmp://a.rtmp.youtube.com/live2/STREAM-KEY",
      "binary": "ffmpeg",
      "task": "Webカメラのライブ配信",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/rtmp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1280:-2,format=yuv420p\" output.mp4",
      "binary": "ffmpeg",
      "task": "出力ピクセルフォーマットの指定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=1920:1080 output.mp4",
      "binary": "ffmpeg",
      "task": "よく使うコマンドまとめ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=3840:-2 -sws_flags lanczos output.mp4",
      "binary": "ffmpeg",
      "task": "拡大するとぼやける",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4",
      "binary": "ffmpeg",
      "task": "高さを固定して幅を自動計算",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=iw/2:ih/2 output.mp4",
      "binary": "ffmpeg",
      "task": "半分のサイズに縮小",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=iw*1.5:ih*1.5 output.mp4",
      "binary": "ffmpeg",
      "task": "1.5倍に拡大",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=iw/2:-2 output.mp4",
      "binary": "ffmpeg",
      "task": "アスペクト比保持で幅を2分の1に",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale='min(1920,iw)':-2\" output.mp4",
      "binary": "ffmpeg",
      "task": "最大解像度制限",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2\" output.mp4",
      "binary": "ffmpeg",
      "task": "パディング（PAD）でレターボックスを追加",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf scale=1280:-2 -pix_fmt yuv420p output.mp4",
      "binary": "ffmpeg",
      "task": "出力ピクセルフォーマットの指定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scale-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scdet=t=10,metadata=mode=print:key=lavfi.scd.score\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scene-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scdet=t=20\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "threshold（感度）の調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scene-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"select='gt(scene,0.35)'\" -vsync vfr scene_%04d.png",
      "binary": "ffmpeg",
      "task": "シーンチェンジ点のフレームを画像として保存",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scene-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scdet=t=10,metadata=print\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "metadata フィルタでタイムスタンプを確認",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scene-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scdet=t=12,metadata=mode=print:key=lavfi.scd.time\" -f null -",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/scene-detect/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -devices",
      "binary": "ffmpeg",
      "task": "必要な FFmpeg ビルド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/screen-recording/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 24 -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "録画後に再エンコードしてサイズを 1/4 に",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/screen-recording/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 26 -tag:v hvc1 -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "スクリーンキャスト向け H.265",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/screen-recording/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -ss 00:00:05 -to 00:01:30 -i input.mp4 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "トリミング（不要な前後をカット）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/screen-recording/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=in_w-200:in_h-100:100:50\" output.mp4",
      "binary": "ffmpeg",
      "task": "特定領域だけ切り抜く（crop）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/screen-recording/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=iw/2:ih/2\" -c:v libx264 -preset medium -crf 23 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "解像度を半分に（軽量化）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/screen-recording/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i left.mp4 -i right.mp4 -filter_complex \"[0:v][1:v]hstack=inputs=2[v]\" -map \"[v]\" -map 0:a -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "横並び（hstack）の基本",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i left.mp4 -i right.mp4 -filter_complex \"[0:v]pad=iw+10:ih:0:0:color=black[l];[l][1:v]hstack=inputs=2[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "仕切り線と Before / After ラベル",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i left.mp4 -i right.mp4 -filter_complex \"[0:v]drawtext=text='Before':fontsize=24:fontcolor=white:x=10:y=10[l];[1:v]drawtext=text='After':fontsize=24:fontcolor=white:x=10:y=10[r];[l][r]hstack=inputs=2[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "仕切り線と Before / After ラベル",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i left.mp4 -i right.mp4 -filter_complex \"[0:v]scale=-2:720[l];[1:v]scale=-2:720[r];[l][r]hstack=inputs=2[v]\" -map \"[v]\" -map 0:a output.mp4",
      "binary": "ffmpeg",
      "task": "高さが違うときのエラー",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i left.mp4 -i right.mp4 -filter_complex \"[0:v]scale=960:-2[l];[1:v]scale=960:-2[r];[l][r]hstack=inputs=2[v]\" -map \"[v]\" -map 0:a output.mp4",
      "binary": "ffmpeg",
      "task": "出力を元の解像度に収める",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i top.mp4 -i bottom.mp4 -filter_complex \"[0:v][1:v]vstack=inputs=2[v]\" -map \"[v]\" -map 0:a output.mp4",
      "binary": "ffmpeg",
      "task": "縦並び（vstack）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i a.mp4 -i b.mp4 -i c.mp4 -filter_complex \"[0:v][1:v][2:v]hstack=inputs=3[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "3 本以上・グリッド（xstack）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i a.mp4 -i b.mp4 -i c.mp4 -i d.mp4 -filter_complex \"[0:v][1:v][2:v][3:v]xstack=inputs=4:layout=0_0|w0_0|0_h0|w0_h0[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "3 本以上・グリッド（xstack）",
      "status": "not-executed",
      "reason": "More than 3 -i inputs — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i a.mp4 -i b.mp4 -i c.mp4 -filter_complex \"[0:v][1:v][2:v]xstack=inputs=3:layout=0_0|w0_0|0_h0:fill=black[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "3 本以上・グリッド（xstack）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i left.mp4 -i right.mp4 -filter_complex \"[0:v][1:v]hstack=inputs=2[v];[0:a][1:a]amix=inputs=2[a]\" -map \"[v]\" -map \"[a]\" output.mp4",
      "binary": "ffmpeg",
      "task": "音声の扱い",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i left.mp4 -i right.mp4 -filter_complex \"[0:v][1:v]hstack=inputs=2:shortest=1[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "長さが違う動画",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/side-by-side-video/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"signalstats,metadata=mode=print\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "基本的な使い方",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/signalstats/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf signalstats=stat=tout+vrep+brng,metadata=mode=print:file=stats.txt -f null /dev/null",
      "binary": "ffmpeg",
      "task": "フレームメタデータとして取得する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/signalstats/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"signalstats,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:text='YAVG\\: %{metadata\\:lavfi.signalstats.YAVG}':x=10:y=10:fontsize=20:fontcolor=white\" output_stats.mp4",
      "binary": "ffmpeg",
      "task": "輝度平均をリアルタイムにオーバーレイ表示",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/signalstats/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"signalstats=stat=tout+vrep+brng\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "特定の統計のみ有効化する（`stat` オプション）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/signalstats/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"signalstats,metadata=mode=print:key=lavfi.signalstats.YAVG:file=yavg.txt\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "YAVG推移をテキストファイルに保存する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/signalstats/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -af silencedetect -f null /dev/null",
      "binary": "ffmpeg",
      "task": "基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"silencedetect=noise=-40dB:duration=0.5\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "カスタム例：-40dB以下・0.49秒以上を無音と判定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"silencedetect=noise=-50dB:duration=1\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "動画ファイルへの適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af silencedetect -f null /dev/null 2>&1 | grep silence_",
      "binary": "ffmpeg",
      "task": "出力を絞り込む（grepを組み合わせる）",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af silencedetect=noise=-40dB:duration=0.5 -f null -",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=start_periods=1:start_threshold=-50dB\" output.wav",
      "binary": "ffmpeg",
      "task": "先頭の無音だけ削る: start_periods=1",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=start_periods=1:start_threshold=-50dB\" -c:a libmp3lame -q:a 2 output.mp3",
      "binary": "ffmpeg",
      "task": "MP3 / AAC に出力する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=start_periods=1:start_threshold=-50dB\" -c:a aac -b:a 160k output.m4a",
      "binary": "ffmpeg",
      "task": "MP3 / AAC に出力する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=start_periods=1:start_duration=0.5:start_silence=0.3:start_threshold=-50dB\" output.wav",
      "binary": "ffmpeg",
      "task": "start_duration と start_silence",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-50dB\" output.wav",
      "binary": "ffmpeg",
      "task": "途中の無音を詰める: stop_periods=-1",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=start_periods=1:start_threshold=-50dB:stop_periods=-1:stop_duration=1:stop_threshold=-50dB\" output.wav",
      "binary": "ffmpeg",
      "task": "途中の無音を詰める: stop_periods=-1",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=stop_periods=1:stop_duration=1:stop_threshold=-50dB\" output.wav",
      "binary": "ffmpeg",
      "task": "落とし穴: stop_periods=1 は「後半を全部消す」",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=start_periods=1:start_threshold=-50dB,areverse,silenceremove=start_periods=1:start_threshold=-50dB,areverse\" output.wav",
      "binary": "ffmpeg",
      "task": "末尾の無音を削る: areverse で挟む",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silencedetect=noise=-50dB:d=0.5\" -f null -",
      "binary": "ffmpeg",
      "task": "事前に無音の位置を確認する: silencedetect",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"silenceremove=start_periods=1:start_threshold=-50dB\" -c:v copy output.mp4",
      "binary": "ffmpeg",
      "task": "動画の無音部分を削りたいとき",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -af \"silenceremove=start_periods=1:start_threshold=-50dB:stop_periods=-1:stop_duration=1:stop_threshold=-50dB,loudnorm=I=-16:TP=-1.5:LRA=11\" output.wav",
      "binary": "ffmpeg",
      "task": "音量正規化と組み合わせる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/silence-remove/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -loop 1 -i image.png -t 5 -c:v libx264 output.mp4",
      "binary": "ffmpeg",
      "task": "単一画像 → 短動画（ループ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/slideshow-timelapse/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -loop 1 -i image.png -t 3 -c:v libx264 -pix_fmt yuv420p output.mp4",
      "binary": "ffmpeg",
      "task": "pix_fmt yuv420p の重要性",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/slideshow-timelapse/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=3,settb=AVTB,setpts=N/(30*TB),fps=30\" -an -c:v libx264 -pix_fmt yuv420p timelapse-10x.mp4",
      "binary": "ffmpeg",
      "task": "タイムラプス（動画から間引き）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/slideshow-timelapse/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"fps=1/10,settb=AVTB,setpts=N/(30*TB),fps=30\" -an -c:v libx264 -pix_fmt yuv420p timelapse-300x.mp4",
      "binary": "ffmpeg",
      "task": "タイムラプス（動画から間引き）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/slideshow-timelapse/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 00:00:00 -t 60 -i input.mp4 -c copy output_part1.mp4",
      "binary": "ffmpeg",
      "task": "3. 開始時刻と長さで1パートだけ切り出す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/split-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:02:00 -t 60 -i input.mp4 -c copy output_part2.mp4",
      "binary": "ffmpeg",
      "task": "3. 開始時刻と長さで1パートだけ切り出す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/split-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:00:30 -t 30 -i input.mp4 -c:v libx264 -crf 18 -c:a aac output_exact.mp4",
      "binary": "ffmpeg",
      "task": "5. 正確な時刻で分割する（再エンコード）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/split-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -protocols | grep srt",
      "binary": "ffmpeg",
      "task": "前提：libsrt対応の確認",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"srt://receiver-host:9000?pkt_size=1316&latency=500\"",
      "binary": "ffmpeg",
      "task": "パケットロスで映像が乱れる",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"srt://peer-host:9000?mode=rendezvous&pkt_size=1316\"",
      "binary": "ffmpeg",
      "task": "`Connection timed out`",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i \"srt://0.0.0.0:9000?mode=listener\" -c copy received.mp4",
      "binary": "ffmpeg",
      "task": "最小の送受信コマンド",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"srt://receiver-host:9000?pkt_size=1316\"",
      "binary": "ffmpeg",
      "task": "最小の送受信コマンド",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"srt://host-B:9000?mode=rendezvous&pkt_size=1316\"",
      "binary": "ffmpeg",
      "task": "接続モード（caller / listener / rendezvous）",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i \"srt://host-A:9000?mode=rendezvous\" -c copy received.mp4",
      "binary": "ffmpeg",
      "task": "接続モード（caller / listener / rendezvous）",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"srt://receiver-host:9000?pkt_size=1316&latency=200\"",
      "binary": "ffmpeg",
      "task": "latency",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 4000k -maxrate 4000k -bufsize 8000k -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -f mpegts \"srt://receiver-host:9000?pkt_size=1316\"",
      "binary": "ffmpeg",
      "task": "再エンコードして送出する",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/srt-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -map 0:v:0 -map 0:a:0 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "最初の映像と最初の音声ストリームを選択",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i video.mp4 -i audio_ja.aac -i audio_en.aac -map 0:v:0 -map 1:a:0 -map 2:a:0 -c copy output_bilingual.mkv",
      "binary": "ffmpeg",
      "task": "2言語音声トラックを1ファイルにまとめる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0 -c copy -metadata:s:a:0 language=jpn -metadata:s:a:1 language=eng output.mkv",
      "binary": "ffmpeg",
      "task": "ストリームのメタデータを設定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0 -c copy output.mkv",
      "binary": "ffmpeg",
      "task": "全ストリームをコピー（字幕含む）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -c copy output_audio1.mp4",
      "binary": "ffmpeg",
      "task": "特定の音声トラック（2番目）だけを抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:v -map 0:a -c copy output_all_audio.mp4",
      "binary": "ffmpeg",
      "task": "全音声トラックを含める",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:v:0 -map 0:a:0 -map 0:s:0 -c copy output_with_sub.mkv",
      "binary": "ffmpeg",
      "task": "字幕を含めて出力",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0:s:0 -c:s copy output.srt",
      "binary": "ffmpeg",
      "task": "字幕だけを抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mkv -map 0 -map -0:s -c copy output_nosubs.mkv",
      "binary": "ffmpeg",
      "task": "字幕を除いたすべてのストリーム",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i video.mp4 -i audio.mp3 -map 0:v:0 -map 1:a:0 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "複数入力ファイルからストリームをまとめる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/stream-mapping/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4",
      "binary": "ffmpeg",
      "task": "SRT字幕の焼き込み — `subtitles` フィルタ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"subtitles=subtitle.srt:force_style='FontSize=24,Alignment=2'\" output.mp4",
      "binary": "ffmpeg",
      "task": "SRT字幕の焼き込み — `subtitles` フィルタ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf ass=subtitle.ass output.mp4",
      "binary": "ffmpeg",
      "task": "ASS字幕の焼き込み — `ass` フィルタ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"ass=subtitle.ass:fontsdir=/path/to/fonts\" output.mp4",
      "binary": "ffmpeg",
      "task": "フォント指定（ASS）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s srt output.mkv",
      "binary": "ffmpeg",
      "task": "MKVに字幕トラックを埋め込む",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i sub_ja.srt -i sub_en.srt -c copy -c:s srt -metadata:s:s:0 language=jpn -metadata:s:s:1 language=eng output.mkv",
      "binary": "ffmpeg",
      "task": "MKVに字幕トラックを埋め込む",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v libx264 -c:a aac -c:s copy output.mkv",
      "binary": "ffmpeg",
      "task": "字幕ストリームのコピー（既存トラック）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v copy -c:a copy -c:s mov_text output.mp4",
      "binary": "ffmpeg",
      "task": "MKV → MP4 への字幕変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mkv -c:s srt extracted_subtitle.srt",
      "binary": "ffmpeg",
      "task": "字幕トラックの確認・抽出",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/subtitles/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -to 00:03:00 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. 基本：ストリームコピーで高速トリミング（速度優先）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:00:30 -i input.mp4 -t 60 -c copy -avoid_negative_ts 1 output.mp4",
      "binary": "ffmpeg",
      "task": "`-avoid_negative_ts 1`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -t 30 -c copy -copyts clip.mp4",
      "binary": "ffmpeg",
      "task": "`-copyts`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -t 60 -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "エラー1: 出力の冒頭がブロックノイズだらけ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -t 60 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "エラー2: `-to` を指定したのに期待の長さにならない",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -t 60 -c:v copy -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "エラー3: 音声だけ残って映像がない（または逆）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -t 60 -c:v copy -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "エラー5: `-c copy` で音声と映像がズレる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i \"C:\\input\\video.mp4\" -t 60 -c copy \"C:\\output\\clip.mp4\"",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "not-executed",
      "reason": "Windows-style path — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:30 -i input.mp4 -t 60 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "1. 基本：ストリームコピーで高速トリミング（速度優先）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:00:30 -i input.mp4 -to 00:01:30 -c:v libx264 -crf 23 -preset fast -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "2. 精確なフレームカット（精度優先・再エンコードあり）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:02:00 -i input.mp4 -t 45 -c:v libx264 -crf 23 -preset fast -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "2. 精確なフレームカット（精度優先・再エンコードあり）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:00:10 -to 00:01:00 -c copy clip1.mp4 -ss 00:02:30 -to 00:03:15 -c copy clip2.mp4 -ss 00:05:00 -to 00:06:30 -c copy clip3.mp4",
      "binary": "ffmpeg",
      "task": "3. 複数区間を一括切り出し（分割抽出）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:04 -i input.mp4 -t 30 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "4. キーフレーム位置を確認してから切り出す（最高精度）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 10 -i \"$f\" -t 60 -c copy \"trimmed_${f}\" -y",
      "binary": "ffmpeg",
      "task": "5. バッチトリミング（シェルスクリプト）",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "入力前 `-ss`（推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "出力前 `-ss`（低速・精確）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/trim-video/",
      "category": "cut-join"
    },
    {
      "command": "ffmpeg -i input.ts -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "2. 最速・無劣化リムックス",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -err_detect ignore_err -i input.ts -c copy -bsf:a aac_adtstoasc -fflags +genpts -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "対策コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i BDMV/STREAM/00001.m2ts -c:v copy -c:a copy -map 0:v:0 -map 0:a:0 -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "7. BDAV（Blu-ray）からの取り出し",
      "status": "not-executed",
      "reason": "Requires specific media device structure — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -fflags +genpts -i \"$f\" -c copy -bsf:a aac_adtstoasc -movflags +faststart \"${f%.ts}.mp4\"",
      "binary": "ffmpeg",
      "task": "8. バッチ処理（複数TSを一括MP4化）",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.ts -map 0:v:0 -map 0:a:0 -c copy -bsf:a aac_adtstoasc output.mp4",
      "binary": "ffmpeg",
      "task": "エラー3: 音声が2つある（副音声・二ヶ国語）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.ts -map 0 -c copy -bsf:a aac_adtstoasc output.mp4",
      "binary": "ffmpeg",
      "task": "エラー3: 音声が2つある（副音声・二ヶ国語）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i bs4k.ts -c:v copy -c:a aac -b:a 192k -ac 2 -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "エラー5: BS4K（ISDB-S3、4K放送）が変換できない",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.ts -c:v libx264 -crf 20 -c:a aac -b:a 192k -bsf:a aac_adtstoasc -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.ts -map 0:v -map 0:a -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "字幕を落としてシンプルに",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -fflags +genpts -i input.ts -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "対策",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.ts -c copy -map 0 -f segment -segment_time 3600 -reset_timestamps 1 part_%03d.ts",
      "binary": "ffmpeg",
      "task": "対策",
      "status": "not-executed",
      "reason": "Uses wildcard or sequence pattern — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -ss 00:01:30 -to 00:25:00 -i input.ts -c copy -bsf:a aac_adtstoasc part1.ts",
      "binary": "ffmpeg",
      "task": "手順2: 部分切り出し（再エンコードなし）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -ss 00:28:00 -to 00:52:30 -i input.ts -c copy -bsf:a aac_adtstoasc part2.ts",
      "binary": "ffmpeg",
      "task": "手順2: 部分切り出し（再エンコードなし）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -f concat -safe 0 -i concat.txt -c copy -bsf:a aac_adtstoasc -movflags +faststart main.mp4",
      "binary": "ffmpeg",
      "task": "手順3: 2つをconcatしてMP4に",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.ts -vf \"subtitles=subtitle.srt:force_style='FontName=Meiryo,FontSize=20'\" -c:a copy -bsf:a aac_adtstoasc -movflags +faststart output_subbed.mp4",
      "binary": "ffmpeg",
      "task": "選択肢B: 字幕を抽出してSRTに変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/ts-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 1 -passlogfile /tmp/passlog_myproject -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "基本的な2パスH.264の例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -b:v 800k -x265-params \"pass=2:stats=/tmp/passlog_h265.log\" -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "2パスH.265（libx265）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset slow -b:v 1M -pass 1 -passlogfile /tmp/passlog_slow -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "エンコーダープリセットの追加",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset slow -b:v 1M -pass 2 -passlogfile /tmp/passlog_slow -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "エンコーダープリセットの追加",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 2 -passlogfile /tmp/passlog_myproject -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "基本的な2パスH.264の例",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1500k -pass 1 -passlogfile /tmp/passlog_target -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "特定のファイルサイズをターゲットにする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1500k -pass 2 -passlogfile /tmp/passlog_target -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "特定のファイルサイズをターゲットにする",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i \"$f\" -c:v libx264 -b:v 1M -pass 1 -passlogfile \"$passlog\" -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "バッチ処理での安全な passlogfile 管理",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i \"$f\" -c:v libx264 -b:v 1M -pass 2 -passlogfile \"$passlog\" -c:a aac \"${base}_out.mp4\"",
      "binary": "ffmpeg",
      "task": "バッチ処理での安全な passlogfile 管理",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 1 -passlogfile /tmp/mylog -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "カスタムログファイルの場所（旧来の方法との対比）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 2 -passlogfile /tmp/mylog -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "カスタムログファイルの場所（旧来の方法との対比）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -b:v 800k -x265-params \"pass=1:stats=/tmp/passlog_h265.log\" -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "2パスH.265（libx265）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/two-pass-encoding/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"udp://192.168.1.50:1234\"",
      "binary": "ffmpeg",
      "task": "送信（再エンコードなし）",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/udp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i \"udp://0.0.0.0:1234\" -c copy received.mp4",
      "binary": "ffmpeg",
      "task": "受信して保存",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/udp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"udp://239.0.0.1:1234?pkt_size=1316\"",
      "binary": "ffmpeg",
      "task": "マルチキャスト送信",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/udp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c copy -f mpegts \"udp://192.168.1.50:1234?pkt_size=1316\"",
      "binary": "ffmpeg",
      "task": "pkt_size",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/udp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i \"udp://0.0.0.0:1234?overrun_nonfatal=1&fifo_size=1000000\" -c copy received.mp4",
      "binary": "ffmpeg",
      "task": "fifo_size と overrun_nonfatal",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/udp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -b:v 2000k -maxrate 2000k -bufsize 4000k -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -f mpegts \"udp://192.168.1.50:1234?pkt_size=1316\"",
      "binary": "ffmpeg",
      "task": "再エンコードして送出する",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "6.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/udp-streaming/",
      "category": "streaming"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"unsharp=5:5:1.0:5:5:0.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "シャープネスを強調する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/unsharp-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"unsharp=5:5:-1.0:5:5:0.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "ソフトなぼかしをかける（ブラーとして使う）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/unsharp-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"unsharp=7:7:1.5:5:5:0.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "輝度のみシャープ、彩度は変えない（推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/unsharp-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"unsharp=3:3:2.0:3:3:0.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "強いシャープネス（アクション映像向け）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/unsharp-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"unsharp=13:13:-0.5:5:5:0.0\" output.mp4",
      "binary": "ffmpeg",
      "task": "ソフトブラー（ポートレート向け）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/unsharp-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.jpg -vf \"unsharp=5:5:1.5:5:5:0.0\" output.jpg",
      "binary": "ffmpeg",
      "task": "静止画への適用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/unsharp-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf unsharp=5:5:1.0:5:5:0.0 -c:v libx264 -crf 23 -preset medium -an output.mp4",
      "binary": "ffmpeg",
      "task": "実測: 処理時間とサイズ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/unsharp-filter/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -fps_mode cfr -r 30 -c:v libx264 -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "手順②: 30 fps のCFRに変換する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/variable-framerate-to-constant/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -fps_mode cfr -r 60 -c:v libx264 -crf 18 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "手順③: 60 fps のCFRに変換する（高品質）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/variable-framerate-to-constant/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-1:1920,crop=1080:1920:(iw-1080)/2:0\" output_vertical.mp4",
      "binary": "ffmpeg",
      "task": "1920×1080 → 1080×1920 中央クロップ",
      "status": "not-executed",
      "reason": "crop larger than test input — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-1:1920,crop=1080:1920:(iw-1080)/2:0\" -c:v libx264 -b:v 8M -pix_fmt yuv420p -c:a aac -b:a 256k output_vertical.mp4",
      "binary": "ffmpeg",
      "task": "音声を維持する",
      "status": "not-executed",
      "reason": "crop larger than test input — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=1080:1080:(iw-1080)/2:(ih-1080)/2,scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(1080-iw)/2:(1920-ih)/2\" output_vertical.mp4",
      "binary": "ffmpeg",
      "task": "横動画から9:16サイズを中央で切り出す（スケールなし）",
      "status": "not-executed",
      "reason": "crop larger than test input — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1080:-2,pad=1080:1920:0:(1920-ih)/2:black\" output_padded.mp4",
      "binary": "ffmpeg",
      "task": "横動画を縦フォーマットに黒帯付きで収める",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1080:-2,pad=1080:1920:0:(1920-ih)/2:color=0x1a1a2e\" output_padded_color.mp4",
      "binary": "ffmpeg",
      "task": "カラー背景でパディング",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -filter_complex \"[0:v]scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920,boxblur=20:3[bg];[0:v]scale=1080:-2[fg];[bg][fg]overlay=(W-w)/2:(H-h)/2[out]\" -map \"[out]\" -c:v libx264 -b:v 8M -pix_fmt yuv420p -c:a copy output_blur_bg.mp4",
      "binary": "ffmpeg",
      "task": "方法3: ぼかし背景パディング（推奨）",
      "status": "not-executed",
      "reason": "crop larger than test input — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-1:1920,crop=1080:1920:0:0\" output_left.mp4",
      "binary": "ffmpeg",
      "task": "左側を優先してクロップ（x=0）",
      "status": "not-executed",
      "reason": "crop larger than test input — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-1:1920,crop=1080:1920:iw-1080:0\" output_right.mp4",
      "binary": "ffmpeg",
      "task": "右側を優先してクロップ",
      "status": "not-executed",
      "reason": "crop larger than test input — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=-1:1920,crop=1080:1920:300:0\" output_custom.mp4",
      "binary": "ffmpeg",
      "task": "任意のx座標でクロップ",
      "status": "not-executed",
      "reason": "crop larger than test input — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"crop=iw:ih*9/16:(iw-iw)/2:(ih-ih*9/16)/2\" output.mp4",
      "binary": "ffmpeg",
      "task": "アスペクト比を正確に確認する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vertical-video/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v libx264 -crf 23 -preset fast -c:a aac -b:a 128k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "MP4（.mp4）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-comparison/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v libx265 -crf 28 -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "MP4（.mp4）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-comparison/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 0 -crf 33 -c:a libopus -b:a 96k output.webm",
      "binary": "ffmpeg",
      "task": "WebM（.webm）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-comparison/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -c:a libopus output.webm",
      "binary": "ffmpeg",
      "task": "WebM（.webm）",
      "status": "not-executed",
      "reason": "libaom-av1 too slow for the 60s CI budget — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-comparison/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "MOV（.mov）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-comparison/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v libx264 -c:a aac output.mov",
      "binary": "ffmpeg",
      "task": "MOV（.mov）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-comparison/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "MKV → MP4（ストリームコピー）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-conversion/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c copy output.mp4",
      "binary": "ffmpeg",
      "task": "MOV → MP4（iPhone・Mac動画の変換）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-conversion/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mov -c:v libx264 -crf 22 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "MOV → MP4（iPhone・Mac動画の変換）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-conversion/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "AVI → MP4（古い形式からの変換）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-conversion/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm",
      "binary": "ffmpeg",
      "task": "MP4 → WebM（Web配信向け）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-conversion/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi output.mp4",
      "binary": "ffmpeg",
      "task": "コーデック自動選択の仕組み",
      "status": "not-executed",
      "reason": "Input filename contains space (didactic) — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-format-conversion/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -n -i input.mp4 -map \"0:V?\" -map \"0:a?\" -map_metadata -1 -map_metadata:s -1 -map_chapters -1 -c copy -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "PCで詳しく確認する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-gps-metadata-check-remove/",
      "category": "troubleshooting"
    },
    {
      "command": "ffmpeg -i original.mp4 -i encoded.mp4 -lavfi ssim -f null /dev/null",
      "binary": "ffmpeg",
      "task": "SSIM を測定するコマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -i crf28.mp4 -lavfi ssim -f null /dev/null",
      "binary": "ffmpeg",
      "task": "CRF値の比較実験",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i original.mp4 -i encoded.mp4 -lavfi psnr -f null /dev/null",
      "binary": "ffmpeg",
      "task": "PSNR を測定するコマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i original.mp4 -i encoded.mp4 -lavfi \"[0:v][1:v]ssim;[0:v][1:v]psnr\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "SSIM と PSNR を同時に測定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i original.mp4 -i encoded.mp4 -lavfi \"ssim=stats_file=ssim_stats.csv\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "結果をCSVファイルに保存",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 18 -an crf18.mp4",
      "binary": "ffmpeg",
      "task": "CRF値の比較実験",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 23 -an crf23.mp4",
      "binary": "ffmpeg",
      "task": "CRF値の比較実験",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 28 -an crf28.mp4",
      "binary": "ffmpeg",
      "task": "CRF値の比較実験",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -i crf18.mp4 -lavfi ssim -f null /dev/null",
      "binary": "ffmpeg",
      "task": "CRF値の比較実験",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -i crf23.mp4 -lavfi ssim -f null /dev/null",
      "binary": "ffmpeg",
      "task": "CRF値の比較実験",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-quality-metrics/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf vidstabdetect -f null /dev/null",
      "binary": "ffmpeg",
      "task": "基本的な2パス手ブレ補正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf vidstabtransform output.mp4",
      "binary": "ffmpeg",
      "task": "基本的な2パス手ブレ補正",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"vidstabdetect=shakiness=8:accuracy=15\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "パス1：`shakiness`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"vidstabtransform=smoothing=30:crop=black\" output.mp4",
      "binary": "ffmpeg",
      "task": "パス2：`smoothing`と`crop`",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"vidstabtransform=smoothing=20:zoom=5:crop=black\" output.mp4",
      "binary": "ffmpeg",
      "task": "ズームで黒枠を隠す",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"vidstabdetect=result=/tmp/transforms.trf\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "カスタムパスを使った完全なパイプライン",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"vidstabtransform=input=/tmp/transforms.trf:smoothing=20\" output.mp4",
      "binary": "ffmpeg",
      "task": "カスタムパスを使った完全なパイプライン",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -version | grep -o -- \"--enable-libvidstab\"",
      "binary": "ffmpeg",
      "task": "Ubuntu / Debian",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -filters 2>/dev/null | grep vidstab",
      "binary": "ffmpeg",
      "task": "ビルドの確認方法",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-stabilization/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k output.mp4",
      "binary": "ffmpeg",
      "task": "エンコード速度の調整（preset）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "音声ビットレートの指定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mkv -c:v libx264 -crf 22 -preset slow -c:a aac -b:a 192k output.mp4",
      "binary": "ffmpeg",
      "task": "よく使うコマンド例まとめ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -y -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "よく使うコマンド例まとめ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/video-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -filters | grep vmaf",
      "binary": "ffmpeg",
      "task": "libvmafの前提条件",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vmaf-quality/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -version | grep -o -- \"--enable-libvmaf\"",
      "binary": "ffmpeg",
      "task": "`apt install ffmpeg` では動きません（実測）",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vmaf-quality/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i distorted.mp4 -i reference.mp4 -filter_complex \"[0:v][1:v]libvmaf\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "libvmaf フィルタの基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vmaf-quality/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i distorted.mp4 -i reference.mp4 -filter_complex \"[0:v][1:v]libvmaf=log_fmt=json:log_path=vmaf_result.json\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "JSONレポートを保存する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vmaf-quality/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i distorted.mp4 -i reference.mp4 -filter_complex \"[0:v][1:v]libvmaf=feature=name=psnr|name=float_ssim:log_fmt=json:log_path=metrics.json\" -f null /dev/null",
      "binary": "ffmpeg",
      "task": "PSNR・SSIMと同時に計算する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vmaf-quality/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i distorted_720p.mp4 -i reference_1080p.mp4 -lavfi \"[0:v]setpts=PTS-STARTPTS[d];[1:v]setpts=PTS-STARTPTS[r];[d][r]scale2ref=flags=bicubic[ds][rs];[ds][rs]libvmaf\" -f null -",
      "binary": "ffmpeg",
      "task": "解像度が異なる場合：どちらをスケールするかでスコアが変わる",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vmaf-quality/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i original.mp4 -c:v libx264 -crf 23 encoded_crf23.mp4",
      "binary": "ffmpeg",
      "task": "エンコード設定のチューニングへの活用",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/vmaf-quality/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp3 -af volumedetect -f null /dev/null",
      "binary": "ffmpeg",
      "task": "基本コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/volume-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -af volumedetect -f null /dev/null",
      "binary": "ffmpeg",
      "task": "動画ファイルの音声を確認",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/volume-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af \"volume=+0.5dB\" output.mp3",
      "binary": "ffmpeg",
      "task": "2. volumeフィルタで音量を調整",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/volume-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp3 -af volumedetect -f null /dev/null 2>&1 | grep -E \"mean_volume|max_volume\"",
      "binary": "ffmpeg",
      "task": "音量が小さすぎるか確認",
      "status": "not-executed",
      "reason": "Uses shell pipe — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/volume-detect/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"overlay=10:10\" output.mp4",
      "binary": "ffmpeg",
      "task": "1. 基本：左上にロゴを合成",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"overlay=main_w-overlay_w-20:main_h-overlay_h-20\" -c:v libx264 -crf 18 -preset fast -c:a copy output.mp4",
      "binary": "ffmpeg",
      "task": "エラー5: 動画が再エンコードされてファイルサイズが増える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i \"$f\" -i logo.png -filter_complex \"[1:v]scale=150:-1[wm];[0:v][wm]overlay=main_w-overlay_w-20:main_h-overlay_h-20\" -c:v libx264 -crf 18 -c:a copy \"watermarked_${f}\" -y",
      "binary": "ffmpeg",
      "task": "FAQ",
      "status": "not-executed",
      "reason": "Uses shell variable or substitution — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"overlay=main_w-overlay_w-20:main_h-overlay_h-20\" output.mp4",
      "binary": "ffmpeg",
      "task": "2. 右下に配置（最も一般的）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"[1:v]scale=150:-1[wm];[0:v][wm]overlay=main_w-overlay_w-20:main_h-overlay_h-20\" output.mp4",
      "binary": "ffmpeg",
      "task": "3. ロゴをリサイズしてから合成（アルファ透明対応）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"[1:v]scale=150:-1,colorchannelmixer=aa=0.5[wm];[0:v][wm]overlay=main_w-overlay_w-20:main_h-overlay_h-20\" output.mp4",
      "binary": "ffmpeg",
      "task": "4. 透明度を下げた半透明ウォーターマーク",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"overlay=main_w-overlay_w-20:main_h-overlay_h-20:enable='between(t,0,5)'\" output.mp4",
      "binary": "ffmpeg",
      "task": "5. 特定の時間帯だけロゴを表示",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"overlay=10:10:enable='between(t,10,30)'\" output.mp4",
      "binary": "ffmpeg",
      "task": "5. 特定の時間帯だけロゴを表示",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo.png -filter_complex \"[1:v]scale=200:-1[wm];[0:v][wm]overlay=x='mod(t*100,main_w+overlay_w)-overlay_w':y=main_h-overlay_h-20\" output.mp4",
      "binary": "ffmpeg",
      "task": "6. 横スクロールするウォーターマーク",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i logo1.png -i logo2.png -filter_complex \"[1:v]scale=100:-1[wm1];[2:v]scale=150:-1[wm2];[0:v][wm1]overlay=10:10[tmp];[tmp][wm2]overlay=main_w-overlay_w-20:main_h-overlay_h-20\" output.mp4",
      "binary": "ffmpeg",
      "task": "7. 複数ロゴの同時合成",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/watermark-overlay/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.wav -c:a libmp3lame -q:a 5 -ac 1 output.mp3",
      "binary": "ffmpeg",
      "task": "4. モノラルとステレオ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/wav-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.wav -c:a libmp3lame -b:a 192k -ar 44100 output.mp3",
      "binary": "ffmpeg",
      "task": "5. サンプルレートを設定する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/wav-to-mp3/",
      "category": "audio-processing"
    },
    {
      "command": "ffmpeg -i input.webm -c:v libx264 -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "2. ほぼすべてのWebMに使える1コマンド",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/webm-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.webm -c:v libx264 -crf 20 -preset slow -c:a aac -b:a 192k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "3. CRF値の選び方（画質と容量）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/webm-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.webm -c:v copy -c:a aac -b:a 128k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "4. VP9はストリームコピーでき、VP8はできない",
      "status": "not-executed",
      "reason": "WebM (VP8 fixture) video-copy → MP4 — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/webm-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.webm -c:v libx264 -crf 23 -c:a aac -b:a 192k -ar 48000 -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "5. 音声：Opus/VorbisをAACへ",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/webm-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.webm -c:v libx264 -crf 23 -preset veryfast -c:a aac -b:a 128k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "6. エンコードを高速化する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/webm-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.webm -c:v libx264 -crf 20 -colorspace bt709 -color_primaries bt709 -color_trc bt709 -c:a aac -b:a 128k -movflags +faststart output.mp4",
      "binary": "ffmpeg",
      "task": "エラー5: 色がやや薄く見える",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/webm-to-mp4/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mp4",
      "binary": "ffmpeg",
      "task": "2. エンコード・圧縮",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/what-is-ffmpeg/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input_1080p.mp4 -vf scale=1280:-2 -c:v libx264 -crf 23 output_720p.mp4",
      "binary": "ffmpeg",
      "task": "6. 解像度変更（リサイズ）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/what-is-ffmpeg/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -re -i input.mp4 -c:v libx264 -b:v 4000k -c:a aac -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_KEY",
      "binary": "ffmpeg",
      "task": "7. ライブ配信（RTMP）",
      "status": "not-executed",
      "reason": "Contains network-protocol URL — skipped",
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/what-is-ffmpeg/",
      "category": "fundamentals"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "基本構文",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=wipeleft:duration=0.5:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "ワイプ系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=wipetl:duration=1:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "ワイプ系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=zoomin:duration=0.8:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "ズーム・回転系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=circleopen:duration=1:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "ズーム・回転系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v];[0:a][1:a]acrossfade=d=1[a]\" -map \"[v]\" -map \"[a]\" output.mp4",
      "binary": "ffmpeg",
      "task": "音声付きクロスフェード（acrossfade）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v01];[v01][2:v]xfade=transition=fade:duration=1:offset=8[vout]\" -map \"[vout]\" output.mp4",
      "binary": "ffmpeg",
      "task": "3本以上のクリップを連結する",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i clip1.mp4 -vf \"scale=1280:720,fps=30\" -c:v libx264 clip1_norm.mp4",
      "binary": "ffmpeg",
      "task": "注意事項",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i clip2.mp4 -vf \"scale=1280:720,fps=30\" -c:v libx264 clip2_norm.mp4",
      "binary": "ffmpeg",
      "task": "注意事項",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i clip1_norm.mp4 -i clip2_norm.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fade:duration=1:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "注意事項",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fade:duration=2:offset=8[v]\" -map \"[v]\" -t 14 output.mp4",
      "binary": "ffmpeg",
      "task": "offset の計算方法",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fadeblack:duration=1:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "フェード系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=fadewhite:duration=1:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "フェード系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=slideleft:duration=0.8:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "スライド系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=slideright:duration=0.8:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "スライド系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=slideup:duration=0.8:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "スライド系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -i input.mp4 -filter_complex \"[0:v][1:v]xfade=transition=slidedown:duration=0.8:offset=4[v]\" -map \"[v]\" output.mp4",
      "binary": "ffmpeg",
      "task": "スライド系",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/xfade/",
      "category": "filters"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 8M -maxrate 10M -bufsize 20M -pix_fmt yuv420p -c:a aac -b:a 256k output.mp4",
      "binary": "ffmpeg",
      "task": "1080p（FHD）標準設定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 0 -crf 30 -pix_fmt yuv420p -c:a libopus -b:a 256k output.webm",
      "binary": "ffmpeg",
      "task": "VP9 — オープンソースコーデック",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 8M -pass 1 -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "VP9 2-pass（安定したビットレート）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 8M -pass 2 -pix_fmt yuv420p -c:a libopus -b:a 256k output.webm",
      "binary": "ffmpeg",
      "task": "VP9 2-pass（安定したビットレート）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 8M -maxrate 10M -bufsize 20M -pix_fmt yuv420p -r 30 -c:a aac -b:a 256k output.mp4",
      "binary": "ffmpeg",
      "task": "フレームレートの固定",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -c:a aac -b:a 256k output.mp4",
      "binary": "ffmpeg",
      "task": "AAC-LC 256kbps（標準）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v copy -c:a aac -ac 2 -b:a 256k output.mp4",
      "binary": "ffmpeg",
      "task": "ステレオを確認・変換",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 8M -maxrate 10M -bufsize 20M -pix_fmt yuv420p -pass 1 -an -f null /dev/null",
      "binary": "ffmpeg",
      "task": "2-pass エンコード（安定したビットレート制御）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 8M -maxrate 10M -bufsize 20M -pix_fmt yuv420p -pass 2 -c:a aac -b:a 256k output.mp4",
      "binary": "ffmpeg",
      "task": "2-pass エンコード（安定したビットレート制御）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow -pix_fmt yuv420p -c:a aac -b:a 256k output.mp4",
      "binary": "ffmpeg",
      "task": "CRF（品質固定）モード — アップロード素材向け",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -maxrate 6M -bufsize 12M -pix_fmt yuv420p -vf \"scale=1280:720\" -c:a aac -b:a 192k output_720p.mp4",
      "binary": "ffmpeg",
      "task": "720p（HD）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 8M -maxrate 10M -bufsize 20M -pix_fmt yuv420p -vf \"scale=1920:1080\" -c:a aac -b:a 256k output_1080p.mp4",
      "binary": "ffmpeg",
      "task": "1080p（FHD）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -b:v 35M -maxrate 40M -bufsize 80M -pix_fmt yuv420p -vf \"scale=3840:2160\" -c:a aac -b:a 320k output_4k.mp4",
      "binary": "ffmpeg",
      "task": "4K（UHD）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -b:v 4M -maxrate 5M -bufsize 10M -pix_fmt yuv420p -c:a aac -b:a 256k output_h265.mp4",
      "binary": "ffmpeg",
      "task": "H.265（HEVC / libx265）— ファイルサイズ削減",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 20 -preset slow -pix_fmt yuv420p -c:a aac -b:a 256k output_h265.mp4",
      "binary": "ffmpeg",
      "task": "H.265 CRFモード",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-encode/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -profile:v high -level 4.1 -pix_fmt yuv420p -movflags +faststart -c:a aac -b:a 192k -ar 48000 -ac 2 output_youtube.mp4",
      "binary": "ffmpeg",
      "task": "基本コマンド（1080p・H.264）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-ffmpeg-settings/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 18 -preset slow -vf \"scale=1920:1080:flags=lanczos,fps=30\" -c:a aac -b:a 192k -ar 48000 -ac 2 -movflags +faststart output_1080p.mp4",
      "binary": "ffmpeg",
      "task": "CRFモードで全自動（推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-ffmpeg-settings/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx264 -crf 17 -preset slow -vf \"scale=1920:1080:flags=lanczos,fps=60\" -c:a aac -b:a 192k -ar 48000 -ac 2 -movflags +faststart output_1080p60.mp4",
      "binary": "ffmpeg",
      "task": "CRFモードで全自動（推奨）",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-ffmpeg-settings/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -af \"loudnorm=I=-14:TP=-1.5:LRA=11\" -c:v copy output_normalized.mp4",
      "binary": "ffmpeg",
      "task": "音量を YouTube 基準に正規化",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-ffmpeg-settings/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -c:v libx265 -crf 20 -preset slow -tag:v hvc1 -c:a aac -b:a 192k -ar 48000 -movflags +faststart output_h265.mp4",
      "binary": "ffmpeg",
      "task": "H.265（HEVC）でアップロードする場合",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-ffmpeg-settings/",
      "category": "video-conversion"
    },
    {
      "command": "ffmpeg -i input.mp4 -vf \"scale=1080:1920:flags=lanczos\" -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k -ar 48000 -movflags +faststart output_shorts.mp4",
      "binary": "ffmpeg",
      "task": "よくある問題と解決策",
      "status": "verified",
      "reason": null,
      "ffmpegVersionTested": "8.1",
      "article": "https://ffmpeg-cookbook.com/ja/articles/youtube-ffmpeg-settings/",
      "category": "video-conversion"
    }
  ]
}
