Whisper: Arabic Speech-to-Text on Your Server

OpenAI Whisper converts conversations and meetings to text. Supports Arabic. On your server = no API cost. We explain setup.
Whisper Speech-to-Text Setup
OpenAI's Whisper is one of the best freely available Speech-to-Text models. It supports over 99 languages including Arabic. This guide explains how to run it on your own server.
Why Whisper Instead of Google Speech or سحابة أمريكية Transcribe?
Google Speech-to-Text:
- $0.006/minute for standard audio
- $0.009/minute with automatic language recognition
- Data goes to Google
سحابة أمريكية Transcribe:
- $0.024/minute
- Only 260 minutes free/month
Local Whisper on your server:
- Completely free after setup
- No data leaves your server
- Quality rivals commercial services
Whisper Model Sizes
| Model | Size | VRAM | Accuracy | Speed |
|---|---|---|---|---|
| tiny | 39 MB | 1 GB | Good | Fastest |
| base | 74 MB | 1 GB | Good | Fast |
| small | 244 MB | 2 GB | Very good | Medium |
| medium | 769 MB | 5 GB | Excellent | Slow |
| large-v3 | 1.5 GB | 10 GB | Best | Slowest |
For Arabic: Use medium or large-v3 at minimum.
Installation
apt update && apt install -y python3 python3-pip ffmpeg
pip install openai-whisper
# Verify
python3 -c "import whisper; print('Whisper installed successfully')"
Basic Usage
import whisper
model = whisper.load_model("medium")
# Transcribe an audio file
result = model.transcribe(
"arabic_audio.mp3",
language="ar",
task="transcribe"
)
print("Text:", result["text"])
print("Detected language:", result["language"])
# With timestamps
result = model.transcribe("audio.mp3", word_timestamps=True)
for segment in result["segments"]:
print(f"[{segment['start']:.1f}s - {segment['end']:.1f}s]: {segment['text']}")
Fast API Using FastAPI
from fastapi import FastAPI, UploadFile, File
import whisper
import tempfile, os
app = FastAPI(title="Whisper API")
model = whisper.load_model("medium")
@app.post("/transcribe")
async def transcribe_audio(
file: UploadFile = File(...),
language: str = "ar"
):
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp:
content = await file.read
tmp.write(content)
tmp_path = tmp.name
try:
result = model.transcribe(tmp_path, language=language)
return {"text": result["text"], "language": result["language"]}
finally:
os.unlink(tmp_path)
# Run: uvicorn main:app --host 0.0.0.0 --port 8000
Faster Whisper: 4x Faster
pip install faster-whisper
python3 << 'EOF'
from faster_whisper import WhisperModel
model = WhisperModel("medium", device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3", language="ar")
print(f"Language: {info.language} ({info.language_probability:.0%} confidence)")
for segment in segments:
print(f"[{segment.start:.1f}s] {segment.text}")
EOF
Batch Processing Audio Files
from faster_whisper import WhisperModel
from pathlib import Path
import json
model = WhisperModel("medium", device="cpu", compute_type="int8")
def process_audio_file(audio_path: str) -> dict:
segments, info = model.transcribe(audio_path, language="ar")
return {
"file": audio_path,
"text": " ".join(s.text for s in segments),
"language": info.language
}
audio_files = list(Path("/recordings").glob("*.mp3"))
results = [process_audio_file(str(f)) for f in audio_files]
with open("transcriptions.json", "w", encoding="utf-8") as f:
json.dump(results, f, ensure_ascii=False, indent=2)
Deployment on كلاود
On a Business VPS (4 vCPU / 8 GB RAM) from كلاود (cloud.net.sa), you can run Whisper medium and convert one hour of audio every 3-4 minutes. For faster processing, move to the Enterprise VPS (8 vCPU / 16 GB).
Conclusion
Local Whisper provides high-quality speech-to-text conversion without recurring API costs and without data leaving your servers. Ideal for companies handling sensitive conversations or needing high-volume conversion.
Get Started
Ready to run AI on your own server? Explore AI hosting solutions or configure your server with the specs you need.


