المقال ده للمبتدئ — مش محتاج خلفية في الـ AI، بس Python أساسي بيكفي.
لو بتقعد كل أسبوع تكتب محضر اجتماع ساعتين من تسجيل صوتي، انت بتضيع 8 ساعات شغل في مهمة Whisper بيخلّصها في 4 دقائق بدقة 91.6% على العربي.
تفريغ الاجتماعات العربية بـ Whisper: لماذا الـ 8 ساعات بتتحوّل لـ 4 دقائق
المشكلة باختصار
التفريغ اليدوي للاجتماعات بياخد 4 أضعاف مدة التسجيل تقريبًا، حسب دراسة Verbit 2023 على 1,200 ساعة محتوى مكتبي. اجتماع ساعتين = 8 ساعات تفريغ. ده يوم شغل كامل لموظف. والأسوأ: التركيز بيضعف بعد ساعة من السماع المتواصل، فالدقة بتنزل والأخطاء بتطلع.
تخيّل الموقف ده (مثال للمبتدئ)
سامي مدير منتج في شركة عربية. كل اتنين الصبح، عنده اجتماع تخطيط ساعتين مع 6 ناس من فريق التطوير. بعد الاجتماع بيقعد لحد 5 العصر يكتب محضر يبعته للفريق. ده 8 ساعات ضايعة في الأسبوع الواحد، 32 ساعة في الشهر. تقريبًا أسبوع شغل كامل من كل شهر بيتحوّل لمهمة ميكانيكية.
سامي ممكن يسجّل الاجتماع، يبعت ملف الصوت لـ Whisper، ويستلم نص مكتوب في أقل من 5 دقائق. ساعتين تسجيل = 4 دقائق معالجة. الـ 8 ساعات بقت 4 دقائق + 30 دقيقة تنظيم وتلخيص بيدوي أو بـ Claude. التوفير: 7 ساعات لكل اجتماع، 28 ساعة شهريًا.
إيه هو Whisper بالظبط (الشرح العلمي)
Whisper نموذج ASR (Automatic Speech Recognition) مفتوح الأوزان من OpenAI، اتدرّب على 680,000 ساعة صوت من 99 لغة، منهم العربية بـ 6,640 ساعة (راجع Radford et al. 2022). النموذج بيحوّل الصوت لنص بمعمارية Transformer Encoder-Decoder، نفس المعمارية اللي ورقة Vaswani et al. 2017 قدّمتها.
الفكرة مبسّطة: ملف الصوت بيتقطّع لـ chunks مدة كل واحد 30 ثانية، بيتحوّلوا لـ log-Mel spectrogram (تمثيل بصري للترددات)، ثم الـ Encoder بيحوّلهم لـ embeddings، والـ Decoder بيولّد النص token بـ token. اللي يميّز Whisper إنه multilingual و multitask: نفس النموذج بيعمل تفريغ، ترجمة، وكشف لغة من غير ما تغيّر weights.
الكود في 12 سطر Python
قبل ما تجرّب، ركّب الـ SDK:
pip install openai==1.55.0 pydub==0.25.1
بعدين اكتب السكربت ده:
from openai import OpenAI
from pathlib import Path
client = OpenAI() # محتاج OPENAI_API_KEY في الـ environment
audio_file = Path("meeting_2026_05_10.m4a").open("rb")
result = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
language="ar",
response_format="verbose_json", # علشان تيجي معاه timestamps
temperature=0.0, # علشان النتيجة تبقى deterministic
)
with open("meeting_transcript.txt", "w", encoding="utf-8") as f:
f.write(result.text)
print(f"اتفرّغ {result.duration}s صوت في ملف نصي.")