Transcribe | Transcribe any video or audio
Pricing
from $5.00 / 1,000 results
Transcribe | Transcribe any video or audio
Transcribe any video or audio from YouTube, TikTok, Instagram, Twitter, and 1000+ sites
Pricing
from $5.00 / 1,000 results
Rating
5.0
(1)
Developer
REXREUS D.O
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
๐๏ธ Universal Video/Audio Transcriber
Transcribe any video or audio from YouTube, TikTok, Instagram, Twitter, and 1000+ sites
Powered by OpenAI ยท Groq ยท AssemblyAI ยท Deepgram โ your choice of AI engine
โจ Why This Actor?
| Feature | What You Get |
|---|---|
| ๐ 1000+ platforms | YouTube, TikTok, Instagram, Twitter, Vimeo, SoundCloud, and virtually any site with video/audio |
| ๐ค 4 AI providers | OpenAI Whisper, Groq (free tier!), AssemblyAI, Deepgram โ pick the best fit |
| ๐ฐ Free tier option | Groq offers generous free API credits โ start transcribing for $0 |
| ๐ Multiple formats | JSON (full metadata), SRT (subtitles), VTT (web captions), TXT (plain text) |
| ๐ 99+ languages | Auto-detect or specify language โ from English to Japanese to Arabic |
| ๐ Speaker diarization | Identify who said what with AssemblyAI or Deepgram |
| ๐ Batch processing | Paste 1 URL or 100 โ the actor handles them all with per-URL error isolation |
| ๐ No length limits | Automatic compression + smart chunking handles hours of audio |
| ๐ Direct media URLs | Bypass extraction entirely for direct MP3/MP4/WAV links |
| ๐ก๏ธ Resilient by design | Automatic retries, graceful error handling, state persistence across migrations |
๐ Quick Start
Option 1: On Apify (Recommended)
- Open the Actor on Apify Console
- Paste your URLs โ YouTube, TikTok, Instagram, etc.
- Choose a provider โ OpenAI, Groq, AssemblyAI, or Deepgram
- Enter your API key โ Get one from your chosen provider
- Click Start โ Results appear in the Dataset within minutes
Option 2: Local Development
# Clone the repositorygit clone https://github.com/your-username/universal-transcriber.gitcd universal-transcriber# Install dependenciesnpm install# Set up your API keycp .env.example .env# Edit .env and add your API key# Runnpm start
๐ Provider Comparison
Choose the provider that fits your needs:
| Provider | Price/min | Best For | File Limit | Timestamps | Translation | Diarization |
|---|---|---|---|---|---|---|
| OpenAI | $0.006 | All-around accuracy | 25 MB* | โ | โ | โ |
| Groq | FREE tier | Speed + budget | 25 MB* | โ | โ | โ |
| AssemblyAI | $0.0035 | Long videos + accuracy | โ | โ | โ | โ |
| Deepgram | $0.0043 | Low latency | โ | โ | โ | โ |
*Files over 25 MB are automatically compressed and chunked โ no manual work needed.
Available Models
| Model | Provider | Highlights |
|---|---|---|
whisper-1 | OpenAI | Classic, reliable, all output formats |
gpt-4o-transcribe | OpenAI | Newer architecture, better at context |
gpt-4o-mini-transcribe | OpenAI | Cheapest OpenAI option |
whisper-large-v3 | Groq | High accuracy, free tier available |
whisper-large-v3-turbo | Groq | Fastest option, free tier |
universal-3-pro | AssemblyAI | Best overall accuracy, no file limit |
universal-2 | AssemblyAI | 99 languages, no file limit |
nova-3 | Deepgram | Latest Deepgram, best accuracy |
nova-2 | Deepgram | Proven and stable |
๐ง How It Works
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Input: URLs + Provider โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 1. EXTRACTION (yt-dlp) โโ โข Downloads audio from 1000+ platforms โโ โข Extracts metadata (title, duration, platform) โโ โข Retries with exponential backoff on failure โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 2. COMPRESSION (ffmpeg) โโ โข Converts to 16kHz mono 64kbps MP3 โโ โข ~50 minutes of audio fits in 25 MB โโ โข Reduces API costs by minimizing file size โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 3. CHUNKING (if needed) โโ โข Silence-aware splitting at 25 MB boundaries โโ โข Preserves word boundaries (no mid-word cuts) โโ โข Tracks time offsets for seamless merging โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 4. TRANSCRIPTION (AI Provider) โโ โข Sends to OpenAI / Groq / AssemblyAI / Deepgram โโ โข Handles provider-specific API formats โโ โข Merges chunks with correct time offsets โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 5. OUTPUT FORMATTING โโ โข JSON โ Full metadata + word/segment timestamps โโ โข SRT โ Standard subtitle format โโ โข VTT โ Web Video Text Tracks โโ โข TXT โ Clean plain text โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 6. STORAGE (Apify Platform) โโ โข Results โ Dataset (searchable, exportable) โโ โข Status โ Key-Value Store (real-time progress) โโ โข Per-URL error isolation (one failure โ batch failure) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ YouTube Extraction
This actor automatically uses Apify residential proxy for YouTube extraction to bypass bot detection. No manual proxy configuration is needed โ it's enabled by default in the actor input.
๐ฅ Input
Basic Usage
{"urls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },{ "url": "https://www.tiktok.com/@user/video/1234567890" }],"provider": "openai","model": "whisper-1","openaiApiKey": "sk-...","outputFormats": ["json", "srt"]}
Full Options
{"urls": [{ "url": "https://www.youtube.com/watch?v=..." }],"directMediaUrls": ["https://example.com/audio.mp3"],"provider": "groq","model": "whisper-large-v3-turbo","groqApiKey": "gsk_...","outputFormats": ["json", "srt", "vtt", "txt"],"language": "en","translateToEnglish": false,"prompt": "This is a technical discussion about Kubernetes and Docker.","speakerDiarization": false,"audioFormat": "mp3","maxDurationMinutes": 0,"debugMode": false,"proxyConfiguration": {"useApifyProxy": false}}
Input Fields Reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
urls | Array | โ Yes | โ | List of video/audio URLs to transcribe |
directMediaUrls | Array | No | โ | Direct links to media files (bypasses extraction) |
provider | String | No | openai | openai, groq, assemblyai, or deepgram |
model | String | No | whisper-1 | Transcription model (see provider comparison) |
openaiApiKey | String | * | โ | Required when provider is openai |
groqApiKey | String | * | โ | Required when provider is groq |
assemblyaiApiKey | String | * | โ | Required when provider is assemblyai |
deepgramApiKey | String | * | โ | Required when provider is deepgram |
outputFormats | Array | No | ["json"] | Output formats: json, srt, vtt, txt |
language | String | No | auto | ISO-639-1 code (e.g., en, id, ja) |
translateToEnglish | Boolean | No | false | Translate non-English to English |
prompt | String | No | โ | Context prompt for better accuracy |
speakerDiarization | Boolean | No | false | Identify speakers (AssemblyAI/Deepgram only) |
audioFormat | String | No | mp3 | Extraction format: mp3, m4a, wav, webm, flac |
maxDurationMinutes | Integer | No | 0 | Skip videos longer than X min (0 = no limit) |
debugMode | Boolean | No | false | Verbose logging for troubleshooting |
๐ค Output
Each URL produces a record in the Dataset:
{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Music Video)","provider": "openai","model": "whisper-1","language": "en","duration": 213,"status": "success","transcript": {"text": "We're no strangers to love...","segments": [{"start": 0.0,"end": 4.5,"text": "We're no strangers to love"}]},"formats": {"json": { "..." : "..." },"srt": "1\n00:00:00,000 --> 00:00:04,500\nWe're no strangers to love\n\n...","txt": "We're no strangers to love..."},"metadata": {"platform": "youtube","extractionTime": 3.2,"compressionRatio": 0.85,"totalChunks": 1},"error": null}
Output Formats
JSON โ Full structured data with timestamps, confidence scores, and segments:
{"text": "Full transcription text...","segments": [{ "start": 0.0, "end": 4.5, "text": "First segment..." },{ "start": 4.5, "end": 8.2, "text": "Second segment..." }]}
SRT โ Standard subtitle format for video players:
100:00:00,000 --> 00:00:04,500We're no strangers to love200:00:04,500 --> 00:00:08,200You know the rules and so do I
VTT โ Web-compatible subtitle format:
WEBVTT00:00:00.000 --> 00:00:04.500We're no strangers to love00:00:04.500 --> 00:00:08.200You know the rules and so do I
TXT โ Clean plain text:
We're no strangers to loveYou know the rules and so do I
๐๏ธ Architecture
src/โโโ main.js # Entry point โ orchestrates the full pipelineโโโ config.js # Provider definitions, validation, constantsโโโ extractor.js # yt-dlp wrapper with retry + error classificationโโโ processor.js # ffmpeg compression + silence-aware chunkingโโโ formatter.js # Output format converters (JSON/SRT/VTT/TXT)โโโ storage.js # Apify Dataset + KVS persistenceโโโ state.js # Resumable state tracking across migrationsโโโ utils.js # Retry logic, temp dirs, platform detectionโโโ providers/โโโ base.js # Abstract provider interfaceโโโ openai.js # OpenAI Whisper + GPT-4o transcriptionโโโ groq.js # Groq Whisper (OpenAI-compatible API)โโโ assemblyai.js # AssemblyAI (URL-based, no file upload)โโโ deepgram.js # Deepgram (URL-based, streaming-capable)โโโ index.js # Provider factory
Key Design Decisions
- Compression-first: Audio is compressed to 16kHz mono 64kbps before sending to APIs โ this means ~50 min of audio fits in 25 MB, dramatically reducing costs
- Silence-aware chunking: When files exceed provider limits, we split at silence boundaries instead of cutting mid-sentence
- Per-URL isolation: One failed URL never aborts the entire batch โ errors are captured and stored alongside successful results
- Provider abstraction: Adding a new provider requires only implementing the
BaseProviderinterface โ no changes to the pipeline - State persistence: Progress is saved to Apify KVS, so if the actor migrates servers mid-batch, it resumes where it left off
๐ Getting API Keys
OpenAI
- Go to platform.openai.com
- Navigate to API Keys
- Create a new key starting with
sk-... - Pricing: $0.006/min (whisper-1), $0.02/min (gpt-4o-transcribe)
Groq (Recommended for Free Tier!)
- Go to console.groq.com
- Sign up for a free account
- Create an API key
- Pricing: Free tier available with generous rate limits
AssemblyAI
- Go to assemblyai.com
- Sign up and get your API key
- Pricing: $0.0035/min โ best value for long videos
Deepgram
- Go to deepgram.com
- Sign up for $200 free credit
- Create an API key
- Pricing: $0.0043/min
๐ ๏ธ Development
Prerequisites
- Node.js โฅ 20
- ffmpeg (for audio compression)
- yt-dlp (for audio extraction from URLs)
Local Setup
# Install dependenciesnpm install# Create environment filecp .env.example .env# Add your API key to .env# Runnpm start# Run testsnpm test
Adding a New Provider
- Create
src/providers/your-provider.jsextendingBaseProvider - Implement
transcribe(audioBuffer, options)andget supportsTimestamps() - Add your provider to
PROVIDERSandMODEL_TO_PROVIDERinconfig.js - Update the factory in
providers/index.js
// src/providers/your-provider.jsimport { BaseProvider } from './base.js';export class YourProvider extends BaseProvider {constructor(apiKey) {super(apiKey);// Initialize your SDK client}async transcribe(audioBuffer, options = {}) {// Call your provider's APIreturn { text: '...', segments: [...] };}get supportsTimestamps() {return true;}}
๐ณ Docker
The actor runs in a Docker container with all dependencies pre-installed:
FROM apify/actor-node:22-alpine# Install ffmpeg + yt-dlpRUN apk add --no-cache ffmpeg curl \&& curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp \-o /usr/local/bin/yt-dlp \&& chmod +x /usr/local/bin/yt-dlp# Install Node.js dependenciesCOPY package*.json ./RUN npm install --omit=dev# Copy source codeCOPY . ./
Build and run locally:
docker build -t universal-transcriber .docker run --env-file .env universal-transcriber
๐ Supported Platforms
yt-dlp supports 1000+ sites. Here are the most popular:
| Platform | Status | Notes |
|---|---|---|
| YouTube | โ | Videos, Shorts, Playlists |
| TikTok | โ | Public videos |
| โ | Reels, Posts, Stories | |
| Twitter/X | โ | Public tweets with video |
| โ | Public videos | |
| Vimeo | โ | All videos |
| SoundCloud | โ | Tracks, playlists |
| Twitch | โ | VODs, clips |
| โ | Video posts | |
| Dailymotion | โ | All videos |
| โ | Public videos | |
| Direct URLs | โ | MP3, MP4, WAV, M4A, WEBM, OGG, FLAC |
| ...and 990+ more | โ | See yt-dlp supported sites |
โ FAQ
Q: How much does it cost? A: Depends on the provider. Groq offers a free tier. OpenAI charges $0.006/min. For a 1-hour video, expect ~$0.36 with OpenAI or $0 with Groq's free tier.
Q: How long does transcription take? A: Extraction + compression typically takes 1-3 minutes. API transcription is usually 10-30% of the audio duration. A 10-minute video is typically done in under 5 minutes total.
Q: Can I transcribe private/unlisted videos? A: Yes, if you provide a proxy configuration or the platform allows access via the URL alone. For geo-restricted content, use the proxy settings.
Q: What about very long videos (2+ hours)? A: The actor automatically compresses and chunks long audio. AssemblyAI and Deepgram have no file size limits, making them ideal for very long content.
Q: Can I translate non-English audio to English?
A: Yes! Enable translateToEnglish with OpenAI whisper-1 or Groq whisper-large-v3.
Q: How do I identify different speakers?
A: Enable speakerDiarization with AssemblyAI or Deepgram. This adds speaker labels (SPEAKER 1, SPEAKER 2, etc.) to the output.
Q: Can I run this locally without Apify?
A: Yes! Install ffmpeg and yt-dlp, set your API key in .env, and run npm start.
๐ค Contributing
Contributions are welcome! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ License
This project is licensed under the MIT License โ see the LICENSE file for details.
๐ Acknowledgments
- yt-dlp โ The incredible media downloader powering extraction
- ffmpeg โ The Swiss army knife for audio processing
- Apify โ The platform that makes deployment effortless
- OpenAI, Groq, AssemblyAI, Deepgram โ The AI engines making transcription possible
โญ Star this repo if you find it useful!
Made with โค๏ธ for the transcription community