Files
dotfiles/pi/files/agent/skills/pi-skills/youtube-transcript/transcript.js
T
Thomas G. Lopes 7edfb90d5f skills
2026-02-24 16:54:30 +00:00

45 lines
1.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
import { YoutubeTranscript } from 'youtube-transcript-plus';
const videoId = process.argv[2];
if (!videoId) {
console.error('Usage: transcript.js <video-id-or-url>');
console.error('Example: transcript.js EBw7gsDPAYQ');
console.error('Example: transcript.js https://www.youtube.com/watch?v=EBw7gsDPAYQ');
process.exit(1);
}
// Extract video ID if full URL is provided
let extractedId = videoId;
if (videoId.includes('youtube.com') || videoId.includes('youtu.be')) {
const match = videoId.match(/(?:v=|youtu\.be\/)([a-zA-Z0-9_-]{11})/);
if (match) {
extractedId = match[1];
}
}
try {
const transcript = await YoutubeTranscript.fetchTranscript(extractedId);
for (const entry of transcript) {
const timestamp = formatTimestamp(entry.offset / 1000);
console.log(`[${timestamp}] ${entry.text}`);
}
} catch (error) {
console.error('Error fetching transcript:', error.message);
process.exit(1);
}
function formatTimestamp(seconds) {
const h = Math.floor(seconds / 3600);
const m = Math.floor((seconds % 3600) / 60);
const s = Math.floor(seconds % 60);
if (h > 0) {
return `${h}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;
}
return `${m}:${s.toString().padStart(2, '0')}`;
}