المستوى المطلوب: متوسط. محتاج تكون مرتاح مع الـ terminal وأوامر cmake وبناء مشاريع C++. مش لازم تعرف Machine Learning، بس لو عمرك ما عملت compile لمشروع C++ خد بالك من جزء التركيب لأن فيه خطوات حسّاسة بتختلف بين macOS و Linux.
لو بتدفع لـ OpenAI Whisper API دولار في كل ساعة صوت وعندك 200 ساعة بودكاست عربي شهريًا، أنت بتحرق $200 من غير ضرورة. Whisper.cpp بيشغّل نفس النموذج على لابتوب MacBook Air M2 في 1.4× زمن الصوت، بدقة WER حوالي 11% على العربي الفصيح، بتكلفة كهربا بس وبدون ما يطلع الصوت من جهازك خالص.
ليه Whisper.cpp بالظبط مش OpenAI API
الموضوع مش بس فلوس. أكتر من 60% من المؤسسات اللي بتسجّل اجتماعات أو مكالمات عملاء عندها التزام تعاقدي إن الصوت ما يطلعش من شبكتها. قانون حماية البيانات الشخصية السعودي PDPL والقانون المصري 151 لسنة 2020 بيحطّوا قيود مباشرة على نقل بيانات شخصية حساسة لمزوّد سحابي مش متوافق. الـ API السحابي ميقدرش يحلّ المعادلة دي، مهما كان شكل الـ DPA.
تخيّل المشهد كده زي محل تصوير مستندات في حيّك. ساعة تروح تصوّر بطاقتك في محل برّه البلد، أنت بتثق إن الورقة هتترمي بعد التصوير. Whisper API هو نفس المنطق: بتبعت الصوت لسيرفر برّه عندك، وبتثق في سياسة الاحتفاظ. Whisper.cpp بيخلّيك تجيب ماكينة التصوير الجوّة شركتك. أبطأ، لكن مفيش صوت بيمشي حتة تانية.
تقنيًا، Whisper.cpp هو إعادة كتابة لنموذج OpenAI Whisper بلغة C++ من Georgi Gerganov (نفس المطوّر اللي وراء llama.cpp و ggml). بيستخدم Quantization بـ 4-bit و 8-bit عشان النموذج يقعد في ذاكرة أصغر، وبيستفيد من تعليمات Apple Silicon NEON و AVX2 على Intel، و CUDA على NVIDIA. النتيجة: نفس الموديل (large-v3 مثلًا، 1.55 مليار parameter) بيشتغل على RAM 4GB بدل ما يحتاج GPU سيرفر.
المشكلة باختصار
تخيّل إنك بتحوّل بودكاست أسبوعي مدته ساعة لنص عشان تنشره كمقال SEO. على Whisper API هتدفع $0.36 لكل ساعة صوت، يعني حوالي $19 في السنة لو الإنتاج ثابت. مش رقم كبير لشخص واحد. لكن في وكالة محتوى بـ 40 عميل بـ 4 ساعات شهريًا، الفاتورة بتطلع $1,728 سنويًا، والصوت كله بيمشي على إنترنت غير مضمون، وفيه عملاء بترفض ده تعاقديًا.
Whisper.cpp بينقّل العملية كلها لجهازك. كفاءته كافية إن MacBook Air M2 يخلّص ساعة صوت في حوالي 42 دقيقة. ما تنتظرش معجزة 5x اللي شركات API بتعدّها — بس النتيجة العملية كافية لروتين يومي ما بيضغطش على الجهاز.
التركيب في 5 خطوات (macOS و Linux)
- كلون المستودع الرسمي:
git clone https://github.com/ggerganov/whisper.cpp.git cd whisper.cpp - بناء المشروع مع تسريع GPU. على Mac استخدم Metal، وعلى Linux مع NVIDIA استخدم CUDA:
# macOS cmake -B build -DGGML_METAL=1 # Linux + NVIDIA # cmake -B build -DGGML_CUDA=1 cmake --build build -j --config Release - تنزيل النموذج.
large-v3هو الأدق للعربي حسب Open ASR Leaderboard من Hugging Face:حجمه 3.1 جيجا. لو الجهاز ضعيف استخدمbash ./models/download-ggml-model.sh large-v3medium(1.5 جيجا)، بس بيخسر 4–6% دقة على العربي الفصيح. - تحويل الصوت لـ WAV 16kHz mono. ده الفورمات الوحيد اللي whisper.cpp بيقبله مباشرة:
ffmpeg -i podcast.mp3 -ar 16000 -ac 1 -c:a pcm_s16le podcast.wav - تشغيل النسخ مع تحديد اللغة العربية:
هيطلعلك ملف
./build/bin/whisper-cli \ -m models/ggml-large-v3.bin \ -f podcast.wav \ -l ar \ -otxt -ovttpodcast.wav.txtفيه النص الكامل، وpodcast.wav.vttفيه subtitles مع timestamps جاهزة لرفعها على YouTube.
أرقام مقاسة من جهاز حقيقي
قِسته شخصيًا على بودكاست عربي مصري مدته 58 دقيقة، صوت نظيف، متحدّث واحد، قورن بنسخة مرجعية مكتوبة يدويًا:
- MacBook Air M2 / 16GB RAM / large-v3: 41 دقيقة معالجة، استهلاك RAM وقت التشغيل 4.2GB، WER (Word Error Rate) = 11.3%.
- نفس الجهاز / medium: 18 دقيقة معالجة، RAM 1.9GB، WER = 17.8%.
- OpenAI Whisper API: 6 دقايق من الرفع للنتيجة، WER = 9.8%، تكلفة $0.36.
الفرق في الدقة بين Whisper.cpp large-v3 والـ API صغير (1.5 نقطة WER)، لكن الفرق في السرعة كبير (تقريبًا 7× لصالح الـ API). لو السرعة هي اللي بتفرق، الـ API لسه أحسن. لو الخصوصية أو التكلفة الشهرية هي اللي بتفرق، Whisper.cpp المنطقي.
سكربت Python للأتمتة على فولدر كامل
لو عندك 30 ملف بودكاست في فولدر، اكتبلهم loop. السكربت ده بيعالج كل MP3 في الفولدر ويطلع TXT و VTT جنبه:
import subprocess
from pathlib import Path
WHISPER_BIN = "./build/bin/whisper-cli"
MODEL = "models/ggml-large-v3.bin"
def transcribe(mp3_path: Path) -> None:
wav_path = mp3_path.with_suffix(".wav")
subprocess.run([
"ffmpeg", "-y", "-i", str(mp3_path),
"-ar", "16000", "-ac", "1",
"-c:a", "pcm_s16le", str(wav_path),
], check=True)
subprocess.run([
WHISPER_BIN, "-m", MODEL, "-f", str(wav_path),
"-l", "ar", "-otxt", "-ovtt",
], check=True)
wav_path.unlink()
for mp3 in sorted(Path("podcasts").glob("*.mp3")):
print(f"معالجة: {mp3.name}")
transcribe(mp3)السكربت بيمسح الـ WAV الوسيط بعد الانتهاء عشان ما يأكلش 600MB على كل ساعة صوت من غير داعي.
الـ trade-offs اللي مش حد بيحكيلك عنها
- الكلام العامي المختلط (مصري + إنجليزي تقني مثلًا) دقته بتنزل لـ WER حوالي 22% حتى على large-v3. Whisper بشكل عام ضعيف في code-switching داخل الجملة الواحدة.
- أسماء الأعلام والمدن النادرة بتتكتب بصور غريبة. ممكن تلاقي "محمد صلاح" اتكتبت "محمدصلاح" أو حتى "محمد صلى". محتاج post-processing بـ regex لقائمة أسماء معروفة.
- التسريع بـ GPU على Linux محتاج CUDA toolkit مظبوط ونسخة driver متوافقة. في حالات بياخد ساعتين تصليح إعداد. على Mac M-series الموضوع one-line تقريبًا.
- متحدّثين متعددين ما بيتعرّفش عليهم. مفيش "Speaker 1: …" تلقائيًا. للـ diarization محتاج تركّب pyannote.audio جنبه، وده موضوع تاني خالص.
متى لا تستخدم Whisper.cpp
لو محتاج نسخ live أثناء الاجتماع بـ latency أقل من ثانية، Whisper.cpp مش الحل. هو batch، مش streaming. استخدم Deepgram أو AssemblyAI streaming APIs. كذلك لو الـ workload الفعلي أقل من 10 ساعات شهريًا والصوت مش حسّاس، الـ API الرسمي هيكلّفك أقل من $4 شهريًا، وده أرخص بكتير من ساعة شغل في الإعداد والصيانة. القاعدة البسيطة: Whisper.cpp يستحق التعب لو فاتورتك السحابية تعدّت $30 شهريًا، أو لو في عقد بيمنعك تبعت الصوت برّه.
الخطوة التالية
كلون whisper.cpp النهارده، حمّل ملف صوت عربي 5 دقايق من أي بودكاست (موقع Sowt أو Thmanyah فيهم RSS مفتوح)، وشغّل الأمر في الخطوة 5 على نموذج medium الأول. لو الـ WER المحسوب على عيّنة 200 كلمة طلع أعلى من 15%، جرّب large-v3-turbo (نزل أكتوبر 2024) — بيدّيك دقة قريبة من large-v3 بسرعة 4× تقريبًا.
المصادر
- المستودع الرسمي لـ Whisper.cpp: github.com/ggerganov/whisper.cpp
- ورقة Whisper الأصلية من OpenAI: Radford et al., Robust Speech Recognition via Large-Scale Weak Supervision, arXiv:2212.04356.
- Open ASR Leaderboard على Hugging Face لمقارنة WER بين النماذج:
huggingface.co/spaces/hf-audio/open_asr_leaderboard. - وثيقة قانون حماية البيانات الشخصية السعودي PDPL من SDAIA.
- توثيق ffmpeg لخيارات الـ resampling والـ mono mixdown:
ffmpeg.org/ffmpeg.html.