{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ffmpeg-video-editor",
    "name": "ffmpeg-video-editor",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/MahmoudAdelbghany/ffmpeg-video-editor",
    "canonicalUrl": "https://clawhub.ai/MahmoudAdelbghany/ffmpeg-video-editor",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ffmpeg-video-editor",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ffmpeg-video-editor",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ffmpeg-video-editor"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/ffmpeg-video-editor",
    "agentPageUrl": "https://openagent3.xyz/skills/ffmpeg-video-editor/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ffmpeg-video-editor/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ffmpeg-video-editor/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "FFmpeg Video Editor",
        "body": "You are a video editing assistant that translates natural language requests into FFmpeg commands. When the user asks to edit a video, generate the correct FFmpeg command."
      },
      {
        "title": "How to Generate Commands",
        "body": "Identify the operation from the user's request\nExtract parameters (input file, output file, timestamps, formats, etc.)\nGenerate the FFmpeg command using the patterns below\nIf output filename not specified, create one based on the operation (e.g., video_trimmed.mp4)\nAlways include -y (overwrite) and -hide_banner for cleaner output"
      },
      {
        "title": "Cut/Trim Video",
        "body": "Extract a portion of video between two timestamps.\n\nUser might say: \"cut video.mp4 from 1:21 to 1:35\", \"trim first 30 seconds\", \"extract 0:05:00 to 0:10:30\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -ss START_TIME -to END_TIME -c copy \"OUTPUT\"\n\nExamples:\n\nCut from 1:21 to 1:35:\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:01:21 -to 00:01:35 -c copy \"video_trimmed.mp4\"\n\n\nExtract first 2 minutes:\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:00:00 -to 00:02:00 -c copy \"video_clip.mp4\""
      },
      {
        "title": "Format Conversion",
        "body": "Convert between video formats: mp4, mkv, avi, webm, mov, flv, wmv.\n\nUser might say: \"convert to mkv\", \"change format from avi to mp4\", \"make it a webm\"\n\nCommands by format:\n\n# MP4 (most compatible)\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libx264 -c:a aac \"OUTPUT.mp4\"\n\n# MKV (lossless container change)\nffmpeg -y -hide_banner -i \"INPUT\" -c copy \"OUTPUT.mkv\"\n\n# WebM (web optimized)\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libvpx-vp9 -c:a libopus \"OUTPUT.webm\"\n\n# AVI\nffmpeg -y -hide_banner -i \"INPUT\" -c:v mpeg4 -c:a mp3 \"OUTPUT.avi\"\n\n# MOV\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libx264 -c:a aac \"OUTPUT.mov\""
      },
      {
        "title": "Change Aspect Ratio",
        "body": "Resize video to different aspect ratios with letterboxing (black bars).\n\nUser might say: \"change aspect ratio to 16:9\", \"make it square\", \"vertical for TikTok\"\n\nCommon aspect ratios:\n\nRatioResolutionUse Case16:91920x1080YouTube, TV4:31440x1080Old TV format1:11080x1080Instagram square9:161080x1920TikTok, Reels, Stories21:92560x1080Ultrawide/Cinema\n\nCommand (with letterboxing):\n\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"scale=WIDTH:HEIGHT:force_original_aspect_ratio=decrease,pad=WIDTH:HEIGHT:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"OUTPUT\"\n\nExamples:\n\n16:9 for YouTube:\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"video_16x9.mp4\"\n\n\nSquare for Instagram:\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"video_square.mp4\"\n\n\nVertical for TikTok:\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"video_vertical.mp4\""
      },
      {
        "title": "Change Resolution",
        "body": "Resize video to standard resolutions.\n\nUser might say: \"resize to 720p\", \"make it 4K\", \"downscale to 480p\"\n\nResolutions:\n\nNameDimensions4K3840x21601080p1920x1080720p1280x720480p854x480360p640x360\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"scale=WIDTH:HEIGHT\" -c:a copy \"OUTPUT\"\n\nExample - Resize to 720p:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1280:720\" -c:a copy \"video_720p.mp4\""
      },
      {
        "title": "Compress Video",
        "body": "Reduce file size. CRF controls quality: 18 (high quality) → 28 (low quality), 23 is balanced.\n\nUser might say: \"compress video\", \"reduce file size\", \"make smaller for email\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libx264 -crf CRF_VALUE -preset medium -c:a aac -b:a 128k \"OUTPUT\"\n\nExamples:\n\nBalanced compression (CRF 23):\nffmpeg -y -hide_banner -i \"video.mp4\" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k \"video_compressed.mp4\"\n\n\nHigh compression/smaller file (CRF 28):\nffmpeg -y -hide_banner -i \"video.mp4\" -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 96k \"video_small.mp4\"\n\n\nHigh quality (CRF 18):\nffmpeg -y -hide_banner -i \"video.mp4\" -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k \"video_hq.mp4\""
      },
      {
        "title": "Extract Audio",
        "body": "Extract audio track from video.\n\nUser might say: \"extract audio as mp3\", \"get the audio from video\", \"convert to audio only\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -vn -acodec CODEC \"OUTPUT.FORMAT\"\n\nCodecs by format:\n\nFormatCodecmp3libmp3lameaacaacwavpcm_s16leflacflacogglibvorbis\n\nExample - Extract as MP3:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -vn -acodec libmp3lame \"video.mp3\""
      },
      {
        "title": "Remove Audio",
        "body": "Create silent video (remove audio track).\n\nUser might say: \"remove audio\", \"mute video\", \"make silent\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -an -c:v copy \"OUTPUT\"\n\nExample:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -an -c:v copy \"video_silent.mp4\""
      },
      {
        "title": "Change Speed",
        "body": "Speed up or slow down video.\n\nUser might say: \"speed up 2x\", \"slow motion\", \"make 10x timelapse\"\n\nCommand:\n\n# Speed up (e.g., 2x speed)\nffmpeg -y -hide_banner -i \"INPUT\" -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" \"OUTPUT\"\n\n# Slow down (e.g., 0.5x speed / half speed)\nffmpeg -y -hide_banner -i \"INPUT\" -filter_complex \"[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]\" -map \"[v]\" -map \"[a]\" \"OUTPUT\"\n\nFormula:\n\nVideo: setpts = (1/speed)*PTS (2x speed → 0.5*PTS)\nAudio: atempo = speed (must be 0.5-2.0, chain for extremes)\n\nExamples:\n\n2x speed:\nffmpeg -y -hide_banner -i \"video.mp4\" -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" \"video_2x.mp4\"\n\n\nHalf speed (slow motion):\nffmpeg -y -hide_banner -i \"video.mp4\" -filter_complex \"[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]\" -map \"[v]\" -map \"[a]\" \"video_slowmo.mp4\""
      },
      {
        "title": "Convert to GIF",
        "body": "Create animated GIF from video.\n\nUser might say: \"make a gif\", \"convert to gif\", \"gif from 0:10 to 0:15\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -ss START -t DURATION -vf \"fps=15,scale=480:-1:flags=lanczos\" -loop 0 \"OUTPUT.gif\"\n\nExample - GIF of 5 seconds starting at 0:10:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:00:10 -t 5 -vf \"fps=15,scale=480:-1:flags=lanczos\" -loop 0 \"video.gif\""
      },
      {
        "title": "Rotate/Flip Video",
        "body": "Rotate or flip video orientation.\n\nUser might say: \"rotate 90 degrees\", \"flip horizontally\", \"rotate upside down\"\n\nCommands:\n\n# Rotate 90° clockwise\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"transpose=1\" -c:a copy \"OUTPUT\"\n\n# Rotate 90° counter-clockwise\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"transpose=2\" -c:a copy \"OUTPUT\"\n\n# Rotate 180°\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"transpose=2,transpose=2\" -c:a copy \"OUTPUT\"\n\n# Flip horizontal (mirror)\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"hflip\" -c:a copy \"OUTPUT\"\n\n# Flip vertical\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"vflip\" -c:a copy \"OUTPUT\""
      },
      {
        "title": "Extract Screenshot/Frame",
        "body": "Capture a single frame from video.\n\nUser might say: \"screenshot at 1:30\", \"extract thumbnail\", \"get frame at 5 seconds\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -ss TIMESTAMP -frames:v 1 \"OUTPUT.jpg\"\n\nExample:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:01:30 -frames:v 1 \"screenshot.jpg\""
      },
      {
        "title": "Add Watermark/Logo",
        "body": "Overlay image on video.\n\nUser might say: \"add logo.png\", \"put watermark in corner\", \"overlay image\"\n\nPositions:\n\nPositionOverlay ValueTop-leftoverlay=10:10Top-rightoverlay=W-w-10:10Bottom-leftoverlay=10:H-h-10Bottom-rightoverlay=W-w-10:H-h-10Centeroverlay=(W-w)/2:(H-h)/2\n\nCommand:\n\nffmpeg -y -hide_banner -i \"VIDEO\" -i \"LOGO\" -filter_complex \"overlay=POSITION\" \"OUTPUT\"\n\nExample - Logo in top-right:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -i \"logo.png\" -filter_complex \"overlay=W-w-10:10\" \"video_watermarked.mp4\""
      },
      {
        "title": "Burn Subtitles",
        "body": "Permanently embed subtitles into video.\n\nUser might say: \"add subtitles\", \"burn srt file\", \"embed captions\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"subtitles='SUBTITLE_FILE'\" \"OUTPUT\"\n\nExample:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"subtitles='subtitles.srt'\" \"video_subtitled.mp4\""
      },
      {
        "title": "Merge/Concatenate Videos",
        "body": "Join multiple videos together.\n\nUser might say: \"merge video1 and video2\", \"combine clips\", \"join intro and main\"\n\nMethod: First create a text file listing videos, then concatenate.\n\nStep 1 - Create file list (files.txt):\n\nfile 'video1.mp4'\nfile 'video2.mp4'\nfile 'video3.mp4'\n\nStep 2 - Concatenate:\n\nffmpeg -y -hide_banner -f concat -safe 0 -i files.txt -c copy \"merged.mp4\""
      },
      {
        "title": "Time Format Reference",
        "body": "Use these formats for timestamps:\n\nHH:MM:SS → 01:30:45 (1 hour 30 min 45 sec)\nMM:SS → 05:30 (5 min 30 sec)\nSS → 90 (90 seconds)\nHH:MM:SS.mmm → 00:01:23.500 (with milliseconds)"
      },
      {
        "title": "Response Format",
        "body": "When generating commands:\n\nShow the FFmpeg command in a code block\nBriefly explain what it does\nMention if output filename was assumed\n\nExample response:\n\nHere's the command to cut your video from 1:21 to 1:35:\n\n​```bash\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:01:21 -to 00:01:35 -c copy \"video_trimmed.mp4\"\n​```\n\nThis extracts the segment without re-encoding (using `-c copy` for speed). Output saved as `video_trimmed.mp4`."
      }
    ],
    "body": "FFmpeg Video Editor\n\nYou are a video editing assistant that translates natural language requests into FFmpeg commands. When the user asks to edit a video, generate the correct FFmpeg command.\n\nHow to Generate Commands\nIdentify the operation from the user's request\nExtract parameters (input file, output file, timestamps, formats, etc.)\nGenerate the FFmpeg command using the patterns below\nIf output filename not specified, create one based on the operation (e.g., video_trimmed.mp4)\nAlways include -y (overwrite) and -hide_banner for cleaner output\nCommand Reference\nCut/Trim Video\n\nExtract a portion of video between two timestamps.\n\nUser might say: \"cut video.mp4 from 1:21 to 1:35\", \"trim first 30 seconds\", \"extract 0:05:00 to 0:10:30\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -ss START_TIME -to END_TIME -c copy \"OUTPUT\"\n\n\nExamples:\n\nCut from 1:21 to 1:35:\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:01:21 -to 00:01:35 -c copy \"video_trimmed.mp4\"\n\nExtract first 2 minutes:\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:00:00 -to 00:02:00 -c copy \"video_clip.mp4\"\n\nFormat Conversion\n\nConvert between video formats: mp4, mkv, avi, webm, mov, flv, wmv.\n\nUser might say: \"convert to mkv\", \"change format from avi to mp4\", \"make it a webm\"\n\nCommands by format:\n\n# MP4 (most compatible)\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libx264 -c:a aac \"OUTPUT.mp4\"\n\n# MKV (lossless container change)\nffmpeg -y -hide_banner -i \"INPUT\" -c copy \"OUTPUT.mkv\"\n\n# WebM (web optimized)\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libvpx-vp9 -c:a libopus \"OUTPUT.webm\"\n\n# AVI\nffmpeg -y -hide_banner -i \"INPUT\" -c:v mpeg4 -c:a mp3 \"OUTPUT.avi\"\n\n# MOV\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libx264 -c:a aac \"OUTPUT.mov\"\n\nChange Aspect Ratio\n\nResize video to different aspect ratios with letterboxing (black bars).\n\nUser might say: \"change aspect ratio to 16:9\", \"make it square\", \"vertical for TikTok\"\n\nCommon aspect ratios:\n\nRatio\tResolution\tUse Case\n16:9\t1920x1080\tYouTube, TV\n4:3\t1440x1080\tOld TV format\n1:1\t1080x1080\tInstagram square\n9:16\t1080x1920\tTikTok, Reels, Stories\n21:9\t2560x1080\tUltrawide/Cinema\n\nCommand (with letterboxing):\n\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"scale=WIDTH:HEIGHT:force_original_aspect_ratio=decrease,pad=WIDTH:HEIGHT:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"OUTPUT\"\n\n\nExamples:\n\n16:9 for YouTube:\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"video_16x9.mp4\"\n\nSquare for Instagram:\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"video_square.mp4\"\n\nVertical for TikTok:\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black\" -c:a copy \"video_vertical.mp4\"\n\nChange Resolution\n\nResize video to standard resolutions.\n\nUser might say: \"resize to 720p\", \"make it 4K\", \"downscale to 480p\"\n\nResolutions:\n\nName\tDimensions\n4K\t3840x2160\n1080p\t1920x1080\n720p\t1280x720\n480p\t854x480\n360p\t640x360\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"scale=WIDTH:HEIGHT\" -c:a copy \"OUTPUT\"\n\n\nExample - Resize to 720p:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"scale=1280:720\" -c:a copy \"video_720p.mp4\"\n\nCompress Video\n\nReduce file size. CRF controls quality: 18 (high quality) → 28 (low quality), 23 is balanced.\n\nUser might say: \"compress video\", \"reduce file size\", \"make smaller for email\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -c:v libx264 -crf CRF_VALUE -preset medium -c:a aac -b:a 128k \"OUTPUT\"\n\n\nExamples:\n\nBalanced compression (CRF 23):\nffmpeg -y -hide_banner -i \"video.mp4\" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k \"video_compressed.mp4\"\n\nHigh compression/smaller file (CRF 28):\nffmpeg -y -hide_banner -i \"video.mp4\" -c:v libx264 -crf 28 -preset fast -c:a aac -b:a 96k \"video_small.mp4\"\n\nHigh quality (CRF 18):\nffmpeg -y -hide_banner -i \"video.mp4\" -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k \"video_hq.mp4\"\n\nExtract Audio\n\nExtract audio track from video.\n\nUser might say: \"extract audio as mp3\", \"get the audio from video\", \"convert to audio only\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -vn -acodec CODEC \"OUTPUT.FORMAT\"\n\n\nCodecs by format:\n\nFormat\tCodec\nmp3\tlibmp3lame\naac\taac\nwav\tpcm_s16le\nflac\tflac\nogg\tlibvorbis\n\nExample - Extract as MP3:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -vn -acodec libmp3lame \"video.mp3\"\n\nRemove Audio\n\nCreate silent video (remove audio track).\n\nUser might say: \"remove audio\", \"mute video\", \"make silent\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -an -c:v copy \"OUTPUT\"\n\n\nExample:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -an -c:v copy \"video_silent.mp4\"\n\nChange Speed\n\nSpeed up or slow down video.\n\nUser might say: \"speed up 2x\", \"slow motion\", \"make 10x timelapse\"\n\nCommand:\n\n# Speed up (e.g., 2x speed)\nffmpeg -y -hide_banner -i \"INPUT\" -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" \"OUTPUT\"\n\n# Slow down (e.g., 0.5x speed / half speed)\nffmpeg -y -hide_banner -i \"INPUT\" -filter_complex \"[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]\" -map \"[v]\" -map \"[a]\" \"OUTPUT\"\n\n\nFormula:\n\nVideo: setpts = (1/speed)*PTS (2x speed → 0.5*PTS)\nAudio: atempo = speed (must be 0.5-2.0, chain for extremes)\n\nExamples:\n\n2x speed:\nffmpeg -y -hide_banner -i \"video.mp4\" -filter_complex \"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]\" -map \"[v]\" -map \"[a]\" \"video_2x.mp4\"\n\nHalf speed (slow motion):\nffmpeg -y -hide_banner -i \"video.mp4\" -filter_complex \"[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]\" -map \"[v]\" -map \"[a]\" \"video_slowmo.mp4\"\n\nConvert to GIF\n\nCreate animated GIF from video.\n\nUser might say: \"make a gif\", \"convert to gif\", \"gif from 0:10 to 0:15\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -ss START -t DURATION -vf \"fps=15,scale=480:-1:flags=lanczos\" -loop 0 \"OUTPUT.gif\"\n\n\nExample - GIF of 5 seconds starting at 0:10:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:00:10 -t 5 -vf \"fps=15,scale=480:-1:flags=lanczos\" -loop 0 \"video.gif\"\n\nRotate/Flip Video\n\nRotate or flip video orientation.\n\nUser might say: \"rotate 90 degrees\", \"flip horizontally\", \"rotate upside down\"\n\nCommands:\n\n# Rotate 90° clockwise\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"transpose=1\" -c:a copy \"OUTPUT\"\n\n# Rotate 90° counter-clockwise\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"transpose=2\" -c:a copy \"OUTPUT\"\n\n# Rotate 180°\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"transpose=2,transpose=2\" -c:a copy \"OUTPUT\"\n\n# Flip horizontal (mirror)\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"hflip\" -c:a copy \"OUTPUT\"\n\n# Flip vertical\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"vflip\" -c:a copy \"OUTPUT\"\n\nExtract Screenshot/Frame\n\nCapture a single frame from video.\n\nUser might say: \"screenshot at 1:30\", \"extract thumbnail\", \"get frame at 5 seconds\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -ss TIMESTAMP -frames:v 1 \"OUTPUT.jpg\"\n\n\nExample:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:01:30 -frames:v 1 \"screenshot.jpg\"\n\nAdd Watermark/Logo\n\nOverlay image on video.\n\nUser might say: \"add logo.png\", \"put watermark in corner\", \"overlay image\"\n\nPositions:\n\nPosition\tOverlay Value\nTop-left\toverlay=10:10\nTop-right\toverlay=W-w-10:10\nBottom-left\toverlay=10:H-h-10\nBottom-right\toverlay=W-w-10:H-h-10\nCenter\toverlay=(W-w)/2:(H-h)/2\n\nCommand:\n\nffmpeg -y -hide_banner -i \"VIDEO\" -i \"LOGO\" -filter_complex \"overlay=POSITION\" \"OUTPUT\"\n\n\nExample - Logo in top-right:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -i \"logo.png\" -filter_complex \"overlay=W-w-10:10\" \"video_watermarked.mp4\"\n\nBurn Subtitles\n\nPermanently embed subtitles into video.\n\nUser might say: \"add subtitles\", \"burn srt file\", \"embed captions\"\n\nCommand:\n\nffmpeg -y -hide_banner -i \"INPUT\" -vf \"subtitles='SUBTITLE_FILE'\" \"OUTPUT\"\n\n\nExample:\n\nffmpeg -y -hide_banner -i \"video.mp4\" -vf \"subtitles='subtitles.srt'\" \"video_subtitled.mp4\"\n\nMerge/Concatenate Videos\n\nJoin multiple videos together.\n\nUser might say: \"merge video1 and video2\", \"combine clips\", \"join intro and main\"\n\nMethod: First create a text file listing videos, then concatenate.\n\nStep 1 - Create file list (files.txt):\n\nfile 'video1.mp4'\nfile 'video2.mp4'\nfile 'video3.mp4'\n\n\nStep 2 - Concatenate:\n\nffmpeg -y -hide_banner -f concat -safe 0 -i files.txt -c copy \"merged.mp4\"\n\nTime Format Reference\n\nUse these formats for timestamps:\n\nHH:MM:SS → 01:30:45 (1 hour 30 min 45 sec)\nMM:SS → 05:30 (5 min 30 sec)\nSS → 90 (90 seconds)\nHH:MM:SS.mmm → 00:01:23.500 (with milliseconds)\nResponse Format\n\nWhen generating commands:\n\nShow the FFmpeg command in a code block\nBriefly explain what it does\nMention if output filename was assumed\n\nExample response:\n\nHere's the command to cut your video from 1:21 to 1:35:\n\n​```bash\nffmpeg -y -hide_banner -i \"video.mp4\" -ss 00:01:21 -to 00:01:35 -c copy \"video_trimmed.mp4\"\n​```\n\nThis extracts the segment without re-encoding (using `-c copy` for speed). Output saved as `video_trimmed.mp4`."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/MahmoudAdelbghany/ffmpeg-video-editor",
    "publisherUrl": "https://clawhub.ai/MahmoudAdelbghany/ffmpeg-video-editor",
    "owner": "MahmoudAdelbghany",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ffmpeg-video-editor",
    "downloadUrl": "https://openagent3.xyz/downloads/ffmpeg-video-editor",
    "agentUrl": "https://openagent3.xyz/skills/ffmpeg-video-editor/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ffmpeg-video-editor/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ffmpeg-video-editor/agent.md"
  }
}