video-reader
3
总安装量
1
周安装量
#59439
全站排名
安装命令
npx skills add https://github.com/ninehills/skills --skill video-reader
Agent 安装分布
amp
1
cline
1
opencode
1
cursor
1
continue
1
kimi-cli
1
Skill 文档
Video Reader Skill
Primary Method: Gemini Native Video Understanding
ð¨ MANDATORY: Use alma video analyze for ALL video tasks. DO NOT use ffmpeg frame extraction unless alma video analyze explicitly fails. Frame extraction is a LAST RESORT, not a default.
Always use this â Gemini can understand video natively (visual + audio).
# Analyze a video with Gemini (uploads to Gemini Files API)
alma video analyze "/path/to/video.mp4" "Describe what's happening in this video"
# Custom prompts
alma video analyze "/path/to/video.mp4" "What language are they speaking? Summarize what they said"
alma video analyze "/path/to/video.mp4" "Is this video funny? Why?"
alma video analyze "/path/to/video.mp4" "Transcribe all spoken words in this video"
This uses Gemini’s native multimodal video input â no frame extraction needed. Works with mp4, mov, webm, avi, mkv, m4v, 3gp. Max file size: 2GB.
When to use Gemini:
- Any video understanding task
- “What’s in this video”, “What did they say”, “Summarize this”
- Best quality results â sees motion, hears audio, understands context
Fallback Method: Frame Extraction + Whisper
Use this if Gemini fails (no Google provider, API error, unsupported format):
# Get video info
ffprobe -v error -show_entries format=duration:stream=codec_name,width,height -of json "$VIDEO_PATH"
# Extract key frames (1 per second, max 12 frames)
OUTDIR=/tmp/alma-frames-$(date +%s)
mkdir -p "$OUTDIR"
DURATION=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$VIDEO_PATH" | cut -d. -f1)
FPS_RATE=$(echo "scale=2; 12 / $DURATION" | bc 2>/dev/null || echo "1")
if (( $(echo "$FPS_RATE > 1" | bc -l 2>/dev/null || echo 0) )); then FPS_RATE=1; fi
ffmpeg -hide_banner -loglevel error -i "$VIDEO_PATH" -vf "fps=$FPS_RATE,scale=720:-1" -frames:v 12 "$OUTDIR/frame_%02d.jpg"
ls "$OUTDIR"
Audio Transcription (Whisper)
# Extract audio
ffmpeg -hide_banner -loglevel error -i "$VIDEO_PATH" -vn -acodec pcm_s16le -ar 16000 -ac 1 "/tmp/alma-audio-$(date +%s).wav"
# Transcribe
whisper "/tmp/alma-audio.wav" --model turbo --output_format txt --output_dir /tmp/alma-whisper
cat /tmp/alma-whisper/*.txt
Thumbnail Grid (quick overview)
ffmpeg -hide_banner -loglevel error -i "$VIDEO_PATH" \
-vf "fps=1/$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$VIDEO_PATH" | awk '{printf "%.1f", $1/9}'),scale=320:-1,tile=3x3" \
-frames:v 1 "$OUTDIR/grid.jpg"
Decision Flow
- ALWAYS: Use
alma video analyze(Gemini native) â this is the ONLY correct first choice - ONLY if
alma video analyzereturns an error: Fall back to frame extraction + Whisper - Audio only (“what did they say”): Can use Whisper directly
- Always clean up:
rm -rf "$OUTDIR" /tmp/alma-whisper /tmp/alma-audio*.wav
â ï¸ NEVER skip step 1. Frame extraction loses motion, audio, and context. Gemini native video understanding is dramatically better. If you find yourself writing ffmpeg or ffprobe for video analysis WITHOUT first trying alma video analyze, you are doing it wrong.