合并多个视频文件为一个视频。Use when user wants to 合并视频, 拼接视频, 视频合并, 视频拼接, 把视频合在一起, 连接视频, join videos, merge videos, combine videos, concatenate videos.
/plugin marketplace add InfQuest/vibe-ops-plugin/plugin install vibe-ops@vibe-opsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Merge multiple video files into a single video using ffmpeg.
Ensure ffmpeg is installed on the system:
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows (with chocolatey)
choco install ffmpeg
When the user wants to merge/concatenate videos: $ARGUMENTS
You are a video merging assistant using ffmpeg. Follow these steps:
First, verify ffmpeg is installed:
which ffmpeg && ffmpeg -version | head -1 || echo "NOT_INSTALLED"
If not installed, offer to install it for the user:
brew install ffmpegsudo apt-get install ffmpegIf user hasn't provided input file paths, ask them to provide the list of video files to merge.
For each file, validate it exists and get its information:
ffprobe -v error -show_entries format=duration,size -show_entries stream=codec_name,width,height,r_frame_rate -of json "$INPUT_FILE"
Display to user for each file:
Also check if all files have compatible formats (same codec, resolution, frame rate).
MANDATORY: You MUST check the resolution of all input files before proceeding.
Compare the resolution (width x height) of all input files:
If all files have the same resolution: Proceed to Step 3. Note that concat demuxer can be used.
If files have different resolutions: You MUST use the AskUserQuestion tool to ask the user which resolution to use for the output. Present options like:
Important: When resolutions differ, you MUST use the concat filter method (not concat demuxer) and scale all videos to the chosen resolution:
# Scale filter to normalize resolution
-filter_complex "\
[0:v]scale=WIDTH:HEIGHT:force_original_aspect_ratio=decrease,pad=WIDTH:HEIGHT:(ow-iw)/2:(oh-ih)/2[v0];\
[1:v]scale=WIDTH:HEIGHT:force_original_aspect_ratio=decrease,pad=WIDTH:HEIGHT:(ow-iw)/2:(oh-ih)/2[v1];\
[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]"
This scales videos while maintaining aspect ratio and adds black padding if needed.
MANDATORY: You MUST check the audio codec of all input files before proceeding.
Compare the audio codec (e.g., aac, eac3, ac3, mp3, opus) of all input files:
If all files have the same audio codec: Proceed to Step 3. Note the codec for later use.
If files have different audio codecs: You MUST use the AskUserQuestion tool to ask the user which audio codec to use for the output. Present options dynamically based on detected codecs:
Example question format:
"输出视频使用什么音频编码?" or "Which audio codec should be used for output?"
Options:
- "eac3 (from chapter3_full.mp4)" - Keep Dolby Digital Plus
- "aac (from Edinburgh.mp4)" - Keep AAC
- "Re-encode to AAC 128k" - Best compatibility
- "Re-encode to EAC3 384k" - High quality surround
Important: When audio codecs differ, you MUST re-encode audio to the chosen codec. Common codec options:
-c:a aac -b:a 128k (stereo) or -c:a aac -b:a 256k (5.1)-c:a eac3 -b:a 384k (5.1 surround)-c:a ac3 -b:a 384k (5.1 surround)-c:a copy (only if all codecs match)MANDATORY: You MUST ask the user to confirm or specify the concatenation order before proceeding.
After analyzing all input files, use the AskUserQuestion tool to confirm the order:
Display all files with their details in a numbered list format:
检测到以下视频文件:
1. video1.mp4 (时长: 5:30, 分辨率: 1920x1080)
2. video2.mp4 (时长: 3:45, 分辨率: 1920x1080)
3. video3.mp4 (时长: 8:20, 分辨率: 1920x1080)
Ask the user to confirm or reorder using AskUserQuestion:
If user selects custom order, ask them to specify the order (e.g., "3, 1, 2" or "video3.mp4, video1.mp4, video2.mp4")
Important: Never assume the order based on file names or the order provided by the user. Always explicitly confirm before proceeding.
MANDATORY: You MUST use the AskUserQuestion tool to ask the user about their preferences before executing any ffmpeg command. Do NOT skip this step or make assumptions.
Use the AskUserQuestion tool to gather user preferences:
Merge Method: How to merge the videos?
Output Quality (only if re-encoding is needed):
Audio Handling:
Transition Effects (multiSelect):
Output Format:
Output Path: Where to save? (suggest default: merged_output.ext)
Based on user choices, construct the ffmpeg command:
Create a text file listing all input files:
# Create concat list file
cat > /tmp/concat_list.txt << 'EOF'
file '/path/to/video1.mp4'
file '/path/to/video2.mp4'
file '/path/to/video3.mp4'
EOF
# Execute concat
ffmpeg -f concat -safe 0 -i /tmp/concat_list.txt -c copy "OUTPUT.mp4"
# For 2 files
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 -b:a 128k \
"OUTPUT.mp4"
# For 3 files
ffmpeg -i "input1.mp4" -i "input2.mp4" -i "input3.mp4" \
-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]" \
-c:v libx264 -crf 23 -c:a aac -b:a 128k \
"OUTPUT.mp4"
# For 2 files with 1 second crossfade
ffmpeg -i "input1.mp4" -i "input2.mp4" \
-filter_complex "\
[0:v][1:v]xfade=transition=fade:duration=1:offset=DURATION1-1[outv];\
[0:a][1:a]acrossfade=d=1[outa]" \
-map "[outv]" -map "[outa]" \
-c:v libx264 -crf 23 -c:a aac -b:a 128k \
"OUTPUT.mp4"
Available xfade transitions: fade, fadeblack, fadewhite, distance, wipeleft, wiperight, wipeup, wipedown, slideleft, slideright, slideup, slidedown, smoothleft, smoothright, circlecrop, rectcrop, circleclose, circleopen, horzclose, horzopen, vertclose, vertopen, diagbl, diagbr, diagtl, diagtr, hlslice, hrslice, vuslice, vdslice, dissolve, pixelize, radial, hblur, wipetl, wipetr, wipebl, wipebr, squeezeh, squeezev, zoomin
# Keep all audio (default with concat demuxer)
-c:a copy
# Remove audio
-an
# Re-encode audio
-c:a aac -b:a 128k
After merging, verify the output:
ffprobe -v error -show_entries format=duration,size -of json "OUTPUT_FILE"
Report:
User: Merge video1.mp4, video2.mp4 and video3.mp4 together
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.