Benar-benar menonton video dari sebuah tautan (TikTok, YouTube, Instagram, Reels, Shorts, Twitter/X, Facebook, atau file video lokal) lalu melaporkan isinya. Pakai skill ini setiap kali user menempelkan tautan video dan bertanya "bisa nonton video ini?", "apa isinya?", "rangkum dong", "tolong cek videonya", "transkripnya apa", "watch this video", "summarize this video", atau meminta subtitle, transkrip, atau kutipan dari sebuah video. Pakai juga kalau isi video dibutuhkan sebagai bahan untuk ...
Scanned 8/31/2026
Install to Claude Code
npx -y skills add yanchrisdifa/claude-skill-watch-video --skill watch-video --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Watch Video?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/yanchrisdifa-watch-video)More formats (shields.io, HTML) on the badges page.
---
name: watch-video
description: Benar-benar menonton video dari sebuah tautan (TikTok, YouTube, Instagram, Reels, Shorts, Twitter/X, Facebook, atau file video lokal) lalu melaporkan isinya. Pakai skill ini setiap kali user menempelkan tautan video dan bertanya "bisa nonton video ini?", "apa isinya?", "rangkum dong", "tolong cek videonya", "transkripnya apa", "watch this video", "summarize this video", atau meminta subtitle, transkrip, atau kutipan dari sebuah video. Pakai juga kalau isi video dibutuhkan sebagai bahan untuk tugas lain, misalnya menulis artikel, memverifikasi klaim, atau mengambil potongan kode yang muncul di layar.
---
# Nonton video beneran
Model tidak bisa memutar video. Yang bisa dilakukan: **mengunduh berkasnya, mendengar audionya, dan melihat gambarnya.** Skill ini adalah cara melakukan ketiganya sampai laporannya layak disebut "sudah nonton".
## Aturan yang tidak boleh dilanggar
**Jangan pernah bilang "sudah nonton" kalau yang dibaca cuma judul, caption, atau metadata.**
Judul TikTok sering cuma satu kalimat clickbait. Melaporkan isi video berdasar judul saja adalah mengarang. Kalau pipeline gagal di tengah, katakan sejauh mana berhasilnya: "audionya sudah aku dengar, tapi teks di layar belum sempat aku lihat."
**Selalu ambil frame, bukan cuma audio.**
Video teknis hampir selalu menaruh informasi paling penting di layar, bukan di suara: potongan kode, nama file, angka, screenshot chat. Video yang audionya terdengar seperti "ada file namanya itu" baru masuk akal setelah framenya dilihat dan ternyata di sana tertulis `lib/constants/Math_Symbol.js`. Transkrip tanpa frame akan melewatkan justru bagian yang dicari user.
**Kerjakan yang lama di background.**
Unduh model Whisper pertama kali bisa 400 MB lebih dan memakan beberapa menit. Jalankan sebagai background task, jangan biarkan satu perintah foreground kena timeout lalu dikira gagal.
## Langkah 0. Cek perkakas sekali di awal
```bash
for c in yt-dlp ffmpeg whisper; do printf "%s: " "$c"; command -v "$c" || echo TIDAK-ADA; done
python -c "import curl_cffi" 2>/dev/null && echo "curl_cffi: ada" || echo "curl_cffi: TIDAK-ADA"
```
Yang wajib: `yt-dlp` dan `ffmpeg`. Yang sangat dianjurkan: `curl_cffi` (lihat jebakan TikTok di bawah) dan salah satu dari `faster-whisper` atau `openai-whisper`.
Kalau ada yang kurang:
```bash
pip install -U yt-dlp curl_cffi faster-whisper
```
`ffmpeg` dipasang lewat package manager sistem (`winget install Gyan.FFmpeg`, `brew install ffmpeg`, `apt install ffmpeg`).
Jangan mengarang alasan "aku tidak bisa mengakses video". Cek dulu. Mesin ini kemungkinan besar sudah punya perkakasnya.
## Langkah 1. YouTube? Coba caption dulu
Caption resmi jauh lebih cepat dan lebih akurat daripada Whisper, dan tidak perlu mengunduh video sama sekali.
```bash
yt-dlp --skip-download --write-auto-subs --write-subs --sub-langs "id,en" \
--sub-format json3/vtt --convert-subs srt -o "cap" "URL"
```
Kalau dapat berkas `.srt`, itu sudah transkrip. Lanjut ke Langkah 4 untuk framenya.
Kalau kosong (TikTok, Instagram, dan Reels praktis tidak pernah punya), lanjut Langkah 2.
Catatan: YouTube kadang membalas dengan "confirm you're not a bot". Itu bukan alasan untuk berhenti. Lewati caption, turun ke Whisper lokal.
## Langkah 2. Unduh videonya
```bash
cd "$SCRATCH"
yt-dlp -f "download/b[vcodec^=avc]/b[acodec!=none]/b" --merge-output-format mp4 \
--write-info-json --no-playlist -o "vid.%(ext)s" "URL"
```
Pemilihan format itu bukan gaya-gayaan. Urutannya berarti: format khusus yang disediakan situs, lalu H.264 (paling aman untuk ffmpeg dan untuk dilihat), lalu apa pun yang punya audio, baru terakhir apa saja.
Ambil metadatanya sekalian, berguna untuk laporan:
```bash
python -c "
import json; d=json.load(open('vid.info.json',encoding='utf-8'))
for k in ('title','description','duration','uploader','upload_date','view_count','like_count'):
print(k,'=',repr(d.get(k))[:400])
"
```
Kalau yang diberikan user adalah berkas lokal, lewati langkah ini.
## Langkah 3. Audio dan transkrip
```bash
ffmpeg -y -loglevel error -i vid.mp4 -vn -ac 1 -ar 16000 vid.wav
```
16 kHz mono adalah yang diminta Whisper. Mengirim audio stereo 48 kHz cuma memperlambat tanpa menambah akurasi.
Lalu, jalankan **di background**:
```bash
whisper vid.wav --model small --language Indonesian \
--output_format txt --output_dir . --fp16 False
```
Pilihan model: `small` adalah titik seimbang untuk bahasa Indonesia. `base` sering salah dengar istilah teknis. `medium` lebih akurat tapi jauh lebih lambat di CPU. Kalau tersedia `faster-whisper`, pakai itu: hasilnya sama, waktunya sepertiga.
Sebutkan bahasanya secara eksplisit kalau sudah tahu. Autodetect pada video campur Indonesia dan Inggris kadang memilih Inggris lalu mentranskripsi seluruhnya jadi kata Inggris yang bunyinya mirip.
Unduhan model pertama kali tersimpan di `~/.cache/whisper`. Kalau ingin tahu progresnya sambil menunggu, lihat ukuran berkas `.pt` di sana.
## Langkah 4. Lihat layarnya
Ini langkah yang paling sering dilewatkan dan paling sering menentukan.
```bash
mkdir -p frames
ffmpeg -y -loglevel error -i vid.mp4 -vf "fps=1/10,scale=720:-1" frames/f%02d.jpg
```
Satu frame tiap 10 detik cukup untuk video 2 sampai 3 menit. Untuk video padat teks, rapatkan ke `fps=1/5`. Untuk video panjang, pakai deteksi perubahan adegan supaya tidak membanjiri context:
```bash
ffmpeg -y -loglevel error -i vid.mp4 \
-vf "select='gt(scene,0.35)',scale=720:-1" -vsync vfr frames/scene%02d.jpg
```
Lalu **baca frame-framenya sebagai gambar**, jangan cuma daftar nama berkasnya. Mulai dari yang kemungkinan berisi layar penuh, bukan wajah. Kalau transkrip menyebut sesuatu yang menggantung ("file yang namanya itu", "angkanya segini"), cari frame di detik itu: `ffmpeg -ss 78 -i vid.mp4 -frames:v 1 frames/t78.jpg`.
Prioritaskan frame yang menampilkan editor kode, terminal, dashboard, atau tangkapan layar percakapan. Wajah orang bicara tidak menambah informasi apa pun di atas transkrip.
## Langkah 5. Laporkan
Susun laporan dari **transkrip dan frame yang digabung**, bukan salah satunya saja. Sebutkan hal yang cuma terlihat di layar sebagai terlihat di layar, misalnya "di frame detik 110 kelihatan kodenya menulis persistence ke `.vscode/tasks.json`".
Sebutkan durasi dan siapa yang bicara supaya user tahu ini video yang benar. Jangan tempelkan transkrip mentah kecuali diminta. Transkrip Whisper penuh salah dengar, dan menyalinnya bulat-bulat memindahkan kesalahan itu ke laporan.
Kalau ada klaim teknis di video yang menurutmu keliru, katakan. User menonton video itu untuk tahu faktanya, bukan untuk tahu isi videonya.
## Bersih-bersih
Video, wav, dan frame bisa ratusan megabita. Simpan semua di direktori scratchpad, bukan di folder kerja user. Hapus setelah selesai kecuali user minta berkasnya.
## Jebakan yang sudah terbukti
**TikTok: "Unable to extract universal data for rehydration"**
yt-dlp butuh impersonation TLS untuk melewati JS challenge TikTok. Peringatannya muncul lebih dulu dan mudah terlewat: "attempting impersonation, but no impersonate target is available". Perbaikannya satu baris, `pip install curl_cffi`, lalu ulangi perintah yang sama persis. Jangan buang waktu mencari extractor alternatif atau situs downloader pihak ketiga.
**TikTok: video jadi tapi tidak bisa dibaca ffmpeg**
Sebagian format TikTok adalah H.265 (`bytevc1`) yang dilabeli muxed padahal terpisah. Rantai format di Langkah 2 sudah menghindarinya dengan mendahulukan `vcodec^=avc`.
**YouTube: hanya dapat 360p, atau "Requested format is not available"**
Biasanya karena override client `[android,web]` atau cookie basi. Kosongkan `extractor_args` dan coba tanpa cookie dulu. Sejak akhir 2025 YouTube juga butuh runtime JavaScript (deno, node, atau quickjs) untuk memecahkan signature challenge. Tanpa itu yt-dlp tidak gagal, cuma diam-diam menurunkan kualitas.
**HTTP 429 Too Many Requests**
Turunkan agresivitas: `--sleep-requests 1 --min-sleep-interval 2 --max-sleep-interval 5 --retries 10`.
**Video butuh login**
`--cookies-from-browser chrome`. Peringatan: browser yang sedang terbuka mengunci basis data cookie-nya, jadi Chrome harus ditutup atau pakai `--cookies berkas.txt`. Jangan pernah minta user menempelkan password ke chat.
**Whisper crash tanpa pesan di CPU tertentu**
`ctranslate2` memilih jalur instruksi CPU otomatis (AVX512, AVX2, dan seterusnya) dan sebagian CPU jatuh karenanya. Ulangi dengan `CT2_FORCE_CPU_ISA=GENERIC` dan satu thread. Lebih lambat, tapi jadi.
**Transkrip mengulang kalimat yang sama berkali-kali**
Halusinasi Whisper pada bagian senyap. Nyalakan VAD (`vad_filter=True` di faster-whisper) atau `--condition_on_previous_text False` di openai-whisper.
**Video tanpa suara sama sekali**
Slideshow TikTok dan sebagian Reels tidak punya track audio. Whisper akan mengembalikan kosong dan itu bukan galat. Langsung ke Langkah 4, seluruh isinya memang ada di gambar.
**Video sangat panjang**
Di atas 20 menit, jangan transkrip semuanya kalau user cuma butuh satu bagian. Ambil caption kalau ada, atau potong dulu: `ffmpeg -ss 300 -t 180 -i vid.mp4 ...`.
## Berkas lokal
Semua langkah dari 3 ke bawah berlaku sama untuk berkas video yang sudah ada di disk. Lewati saja Langkah 1 dan 2.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!