{
  "id": "video.transcode",
  "object": "tool",
  "name": "Transcode video",
  "summary": "mp4, webm, mov, mkv, gif.",
  "description": "Re-encodes a video to MP4, WebM, MOV, MKV or GIF with ffmpeg: H.264, H.265, VP9 or AV1, constant quality (crf) or a bitrate, frame rate, size, and audio on or off.",
  "category": "video",
  "hosted_by": "Opentools",
  "runtime": "container",
  "side_effects": false,
  "status": "live",
  "credits": 5,
  "price": "$0.0050",
  "providers": [
    {
      "id": "opentools",
      "name": "Opentools",
      "price": "$0.0050"
    }
  ],
  "mcp_name": "video_transcode",
  "input_schema": {
    "type": "object",
    "properties": {
      "file": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri",
                "description": "Public http(s) URL of the file"
              }
            },
            "required": [
              "url"
            ]
          },
          {
            "type": "object",
            "properties": {
              "file_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "An id returned by POST /v1/files"
              }
            },
            "required": [
              "file_id"
            ]
          },
          {
            "type": "object",
            "properties": {
              "base64": {
                "type": "string",
                "description": "Base64-encoded file bytes (up to 10 MB)"
              },
              "name": {
                "type": "string",
                "description": "File name, e.g. invoice.pdf"
              },
              "content_type": {
                "type": "string"
              }
            },
            "required": [
              "base64",
              "name"
            ]
          },
          {
            "type": "object",
            "properties": {
              "connection": {
                "type": "string",
                "minLength": 1,
                "maxLength": 64,
                "description": "A storage connection id or name (see storage.connections)"
              },
              "path": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1024,
                "description": "Path of the file in that connection, e.g. reports/q3.pdf"
              }
            },
            "required": [
              "connection",
              "path"
            ]
          }
        ],
        "x-file": true,
        "description": "The video"
      },
      "to": {
        "default": "mp4",
        "description": "Output container",
        "type": "string",
        "enum": [
          "mp4",
          "webm",
          "mov",
          "mkv",
          "gif"
        ]
      },
      "video_codec": {
        "description": "Video codec. Defaults to the container's usual one (h264 for mp4/mov/mkv, vp9 for webm).",
        "type": "string",
        "enum": [
          "h264",
          "h265",
          "vp9",
          "av1"
        ]
      },
      "crf": {
        "description": "Constant quality (lower is better). h264/h265 0-51 (default 23/28), vp9/av1 0-63.",
        "type": "integer",
        "minimum": 0,
        "maximum": 63
      },
      "video_bitrate": {
        "description": "Video bitrate in kbps (instead of crf)",
        "type": "integer",
        "minimum": 50,
        "maximum": 100000
      },
      "fps": {
        "description": "Output frame rate",
        "type": "number",
        "minimum": 1,
        "maximum": 120
      },
      "width": {
        "description": "Fit within this width",
        "type": "integer",
        "minimum": 16,
        "maximum": 7680
      },
      "height": {
        "description": "Fit within this height",
        "type": "integer",
        "minimum": 16,
        "maximum": 4320
      },
      "audio": {
        "default": true,
        "description": "Keep the audio track",
        "type": "boolean"
      },
      "audio_bitrate": {
        "description": "Audio bitrate in kbps (ignored for lossless formats)",
        "type": "integer",
        "minimum": 8,
        "maximum": 512
      },
      "preset": {
        "default": "medium",
        "description": "h264/h265 speed vs size trade-off",
        "type": "string",
        "enum": [
          "ultrafast",
          "veryfast",
          "fast",
          "medium",
          "slow"
        ]
      }
    },
    "required": [
      "file"
    ]
  },
  "kind": "tool"
}