tafrigh

tafrigh

تفريغ النصوص وإنشاء ملفات SRT و VTT باستخدام نماذج Whisper وتقنية wit.ai.

Stars: 92

Visit
 screenshot

Tafrigh is a tool for transcribing visual and audio content into text using advanced artificial intelligence techniques provided by OpenAI and wit.ai. It allows direct downloading of content from platforms like YouTube, Facebook, Twitter, and SoundCloud, and provides various output formats such as txt, srt, vtt, csv, tsv, and json. Users can install Tafrigh via pip or by cloning the GitHub repository and using Poetry. The tool supports features like skipping transcription if output exists, specifying playlist items, setting download retries, using different Whisper models, and utilizing wit.ai for transcription. Tafrigh can be used via command line or programmatically, and Docker images are available for easy usage.

README:

ar en

تفريغ

تفريغ المواد المرئية أو المسموعة إلى نصوص.

يمكنك الاطلاع على أمثلة تم تفريغها باستخدام تفريغ من هنا.

مميزات تفريغ

  • تفريغ المواد المرئية والمسموعة إلى نصوص باستخدام أحدث تقنيات الذكاء الاصطناعي المقدمة من شركة OpenAI
  • إمكانية تفريغ المواد باستخدام تقنيات wit.ai المقدمة من شركة Facebook
  • تنزيل المواد بشكل مباشر من YouTube و Facebook و Twitter و SoundCloud وغيرها
  • توفير صيَغ مخرجات مختلفة كـ txt و srt و vtt و csv و tsv و json

متطلبات الاستخدام

  • يُفضّل وجود معالج رسوميات قوي في حاسبك في حال استخدام نماذج Whisper
  • تثبيت لغة Python بإصدار 3.10 أو أعلى على حاسبك
  • تثبيت برمجية FFmpeg على حاسبك
  • تثبيت برمجية yt-dlp على حاسبك

تثبيت تفريغ

من خلال pip

يمكنك تثبيت تفريغ من خلال pip باستخدام الأمر: pip install tafrigh[wit,whisper]

يمكنك تحديد الاعتماديات التي تريد تثبيتها حسب نوع التقنية التي تريد استخدامها من خلال كتابة wit أو whisper بين قوسين مربعين كما هو موضّح في الأمر السابق.

من خلال الشيفرة المصدرية

  • قم بتنزيل هذا المستودع من خلال الضغط على Code ثم Download ZIP أو من خلال تنفيذ الأمر التالي: git clone [email protected]:ieasybooks/tafrigh.git
  • قم بفك ضغط الملف إذا قمت بتنزيله بصيغة ZIP وتوجّه إلى مجلد المشروع
  • قم بتنفيذ الأمر التالي لتثبيت تفريغ: poetry install

أضف -E wit أو -E whisper لتحديد الاعتماديات المراد تثبيتها.

استخدام تفريغ

الخيارات المتوفرة

  • المدخلات
    • الروابط أو مسارات الملفات: يجب تمرير الروابط أو مسارات الملفات للمواد المُراد تفريغها بعد اسم أداة تفريغ بشكل مباشر. على سبيل المثال: tafrigh "https://yout..." "https://yout..." "C:\Users\ieasybooks\leactue.wav"
    • تخطي عملية التفريغ في حال وجود المخرجات مسبقًا: يمكن تمرير الاختيار --skip_if_output_exist لتخطي عملية التفريغ إذا كانت المخرجات المطلوبة موجودة بالفعل في مجلد الإخراج المحدد
    • المواد المُراد تفريفها من قائمة التشغيل: يمكن تحديد نطاق معين من المواد ليتم تفريغه من قائمة التشغيل من خلال الاختيار --playlist_items من خلال تمرير قيمة على صيغة "[START]:[STOP][:STEP]". على سبيل المثال، عند تمرير 2:5 سيتم تنزيل المواد من 2 إلى 5 من قائمة التشغيل. هذا الاختيار يُؤثّر على كل قوائم التشغيل التي يتم تمريرها كمدخلات لتفريغ
    • عدد مرات محاولة إعادة تحميل المواد: قد يفشل تحميل بعض المواد عند تحميل قائمة تشغيل كاملة باستخدام مكتبة yt-dlp، يمكن من خلال الاختيار --download_retries تحديد عدد مرات محاولة إعادة التحميل في حال فشل تحميل إحدى المواد. القيمة الافتراضية هي 3
  • خيارات تقنية Whisper
    • النموذج: يمكنك تحديد النموذج من خلال الاختيار --model_name_or_path. النماذج المتوفرة:
      • tiny.en (لغة انجليزية فقط)
      • tiny (الأقل دقة)
      • base.en (لغة انجليزية فقط)
      • base
      • small.en (لغة انجليزية فقط)
      • small (الاختيار الإفتراضي)
      • medium.en (لغة انجليزية فقط)
      • medium
      • large-v1
      • large-v2
      • large-v3
      • large (الأعلى دقة)
      • اسم نموذج Whisper موجود على HuggingFace Hub
      • مسار نموذج Whisper تم تنزيله مسبقًا
      • مسار نموذج Whisper تم تحويله باستخدام أداة ct2-transformers-converter لاستخدام المكتبة السريعة faster-whisper
    • المهمة: يمكنك تحديد المهمة من خلال الاختيار --task. المهمات المتوفرة:
      • transcribe: تحويل الصوت إلى نص (الاختيار الإفتراضي)
      • translation: ترجمة الصوت إلى نص باللغة الانجليزية
    • اللغة: يمكنك تحديد لغة الصوت من خلال الاختيار --language. على سبيل المثال، لتحديد اللغة العربية قم بتمرير ar. إذا لم يتم تحديد اللغة، سيتم التعرف عليها تلقائيا
    • استخدام نسخة أسرع من نماذج Whisper: من خلال تمرير الاختيار --use_faster_whisper سيتم استخدام النسخة الأسرع من نماذج Whisper
    • حجم نطاق البحث: يمكنك تحسين النتائج باستخدام اختيار --beam_size والذي يسمح لك بإجبار النموذج على البحث في نطاق أوسع من الكلمات أثناء إنشاء النص. القيمة الإفتراضية هي 5
    • طريقة ضغط النموذج: يمكنك تحديد الطريقة التي تم بها ضغط النموذج أثناء تحويله باستخدام أداة ct2-transformers-converter من خلال تمرير الاختيار --ct2_compute_type. الطرق المتوفرة:
      • default (الاختيار الإفتراضي)
      • int8
      • int8_float16
      • int16
      • float16
  • خيارات تقنية Wit
    • مفاتيح wit.ai: يمكنك استخدام تقنيات wit.ai لتفريغ المواد إلى نصوص من خلال تمرير المفتاح أو المفاتيح الخاصة بك للاختيار --wit_client_access_tokens. إذا تم تمرير هذا الاختيار، سيتم استخدام wit.ai لتفريغ المواد إلى نصوص. غير ذلك، سيتم استخدام نماذج Whisper
    • تحديد أقصى مدة للتقطيع: يمكنك تحديد أقصى مدة للتقطيع والتي ستؤثر على طول الجمل في ملفات SRT و VTT من خلال تمرير الاختيار --max_cutting_duration. القيمة الافتراضية هي 15
  • المخرجات
    • ضغط الأجزاء: يمكنك استخدام الاختيار --min_words_per_segment للتحكم في أقل عدد من الكلمات التي يمكن أن تكون داخل جزء واحد من أجزاء التفريغ. القيمة الإفتراضية هي 1، يمكنك تمرير 0 لتعطيل هذه الخاصية
    • يمكنك تمرير الاختيار --save_files_before_compact لحفظ الملفات الأصلية قبل أن يتم دمج أجزائها بناء على اختيار --min_words_per_segment
    • يمكنك حفظ مخرجات مكتبة yt-dlp بصيغة json من خلال تمرير الاختيار --save_yt_dlp_responses
    • إخراج عينة من الأجزاء بعد الدمج: يمكنك تمرير قيمة للاختيار --output_sample للحصول على عينة عشوائية من جميع الأجزاء التي تم تفريغها من كل المواد بعد دمجها بناء على اختيار --min_words_per_segment. القيمة الافتراضية هي 0، أي أنه لن يتم إخراج أي عينات
    • صيغة المخرجات: يمكنك تحديد صيغة المخرجات من خلال الاختيار --output_formats. الصيغ المتوفرة:
      • txt
      • srt
      • vtt
      • csv
      • tsv
      • json
      • all (الاختيار الإفتراضي)
      • none (لن يتم إنشاء ملف في حال تمرير هذه الصيغة)
    • مجلد المخرجات: يمكنك تحديد مجلد الاخراج من خلال الاختيار --output_dir. بشكل تلقائي سيكون المجلد الحالي هو مجلد الاخراج إذا لم يتم تحديده
➜ tafrigh --help
usage: tafrigh [-h] [--version] [--skip_if_output_exist | --no-skip_if_output_exist] [--playlist_items PLAYLIST_ITEMS]
               [--download_retries DOWNLOAD_RETRIES] [--verbose | --no-verbose] [-m MODEL_NAME_OR_PATH] [-t {transcribe,translate}]
               [-l {af,am,ar,as,az,ba,be,bg,bn,bo,br,bs,ca,cs,cy,da,de,el,en,es,et,eu,fa,fi,fo,fr,gl,gu,ha,haw,he,hi,hr,ht,hu,hy,id,is,it,ja,jw,ka,kk,km,kn,ko,la,lb,ln,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,nn,no,oc,pa,pl,ps,pt,ro,ru,sa,sd,si,sk,sl,sn,so,sq,sr,su,sv,sw,ta,te,tg,th,tk,tl,tr,tt,uk,ur,uz,vi,yi,yo,zh}]
               [--use_faster_whisper | --no-use_faster_whisper] [--beam_size BEAM_SIZE]
               [--ct2_compute_type {default,int8,int8_float16,int16,float16}]
               [-w WIT_CLIENT_ACCESS_TOKENS [WIT_CLIENT_ACCESS_TOKENS ...]] [--max_cutting_duration [1-17]]
               [--min_words_per_segment MIN_WORDS_PER_SEGMENT] [--save_files_before_compact | --no-save_files_before_compact]
               [--save_yt_dlp_responses | --no-save_yt_dlp_responses] [--output_sample OUTPUT_SAMPLE]
               [-f {all,txt,srt,vtt,csv,tsv,json,none} [{all,txt,srt,vtt,csv,tsv,json,none} ...]] [-o OUTPUT_DIR]
               urls_or_paths [urls_or_paths ...]

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit

Input:
  urls_or_paths         Video/Playlist URLs or local folder/file(s) to transcribe.
  --skip_if_output_exist, --no-skip_if_output_exist
                        Whether to skip generating the output if the output file already exists.
  --playlist_items PLAYLIST_ITEMS
                        Comma separated playlist_index of the items to download. You can specify a range using "[START]:[STOP][:STEP]".
  --download_retries DOWNLOAD_RETRIES
                        Number of retries for yt-dlp downloads that fail.
  --verbose, --no-verbose
                        Whether to print out the progress and debug messages.

Whisper:
  -m MODEL_NAME_OR_PATH, --model_name_or_path MODEL_NAME_OR_PATH
                        Name or path of the Whisper model to use.
  -t {transcribe,translate}, --task {transcribe,translate}
                        Whether to perform X->X speech recognition ('transcribe') or X->English translation ('translate').
  -l {af,am,ar,as,az,ba,be,bg,bn,bo,br,bs,ca,cs,cy,da,de,el,en,es,et,eu,fa,fi,fo,fr,gl,gu,ha,haw,he,hi,hr,ht,hu,hy,id,is,it,ja,jw,ka,kk,km,kn,ko,la,lb,ln,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,nn,no,oc,pa,pl,ps,pt,ro,ru,sa,sd,si,sk,sl,sn,so,sq,sr,su,sv,sw,ta,te,tg,th,tk,tl,tr,tt,uk,ur,uz,vi,yi,yo,zh}, --language {af,am,ar,as,az,ba,be,bg,bn,bo,br,bs,ca,cs,cy,da,de,el,en,es,et,eu,fa,fi,fo,fr,gl,gu,ha,haw,he,hi,hr,ht,hu,hy,id,is,it,ja,jw,ka,kk,km,kn,ko,la,lb,ln,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,nn,no,oc,pa,pl,ps,pt,ro,ru,sa,sd,si,sk,sl,sn,so,sq,sr,su,sv,sw,ta,te,tg,th,tk,tl,tr,tt,uk,ur,uz,vi,yi,yo,zh}
                        Language spoken in the audio, skip to perform language detection.
  --use_faster_whisper, --no-use_faster_whisper
                        Whether to use Faster Whisper implementation.
  --beam_size BEAM_SIZE
                        Number of beams in beam search, only applicable when temperature is zero.
  --ct2_compute_type {default,int8,int8_float16,int16,float16}
                        Quantization type applied while converting the model to CTranslate2 format.

Wit:
  -w WIT_CLIENT_ACCESS_TOKENS [WIT_CLIENT_ACCESS_TOKENS ...], --wit_client_access_tokens WIT_CLIENT_ACCESS_TOKENS [WIT_CLIENT_ACCESS_TOKENS ...]
                        List of wit.ai client access tokens. If provided, wit.ai APIs will be used to do the transcription, otherwise
                        whisper will be used.
  --max_cutting_duration [1-17]
                        The maximum allowed cutting duration. It should be between 1 and 17.

Output:
  --min_words_per_segment MIN_WORDS_PER_SEGMENT
                        The minimum number of words should appear in each transcript segment. Any segment have words count less than
                        this threshold will be merged with the next one. Pass 0 to disable this behavior.
  --save_files_before_compact, --no-save_files_before_compact
                        Saves the output files before applying the compact logic that is based on --min_words_per_segment.
  --save_yt_dlp_responses, --no-save_yt_dlp_responses
                        Whether to save the yt-dlp library JSON responses or not.
  --output_sample OUTPUT_SAMPLE
                        Samples random compacted segments from the output and generates a CSV file contains the sampled data. Pass 0 to
                        disable this behavior.
  -f {all,txt,srt,vtt,csv,tsv,json,none} [{all,txt,srt,vtt,csv,tsv,json,none} ...], --output_formats {all,txt,srt,vtt,csv,tsv,json,none} [{all,txt,srt,vtt,csv,tsv,json,none} ...]
                        Format of the output file; if not specified, all available formats will be produced.
  -o OUTPUT_DIR, --output_dir OUTPUT_DIR
                        Directory to save the outputs.

التفريغ من خلال سطر الأوامر

التفريغ باستخدام نماذج Whisper

تفريغ مقطع واحد
tafrigh "https://youtu.be/dDzxYcEJbgo" \
  --model_name_or_path small \
  --task transcribe \
  --language ar \
  --output_dir . \
  --output_formats txt srt
تفريغ قائمة تشغيل كاملة
tafrigh "https://youtube.com/playlist?list=PLyS-PHSxRDxsLnVsPrIwnsHMO5KgLz7T5" \
  --model_name_or_path small \
  --task transcribe \
  --language ar \
  --output_dir . \
  --output_formats txt srt
تفريغ أكثر من مقطع
tafrigh "https://youtu.be/4h5P7jXvW98" "https://youtu.be/jpfndVSROpw" \
  --model_name_or_path small \
  --task transcribe \
  --language ar \
  --output_dir . \
  --output_formats txt srt
تسريع عملية التفريغ

يمكنك استخدام مكتبة faster_whisper التي توفّر سرعة أكبر في تفريغ المواد من خلال تمرير الاختيار --use_faster_whisper كالتالي:

tafrigh "https://youtu.be/3K5Jh_-UYeA" \
  --model_name_or_path large \
  --task transcribe \
  --language ar \
  --use_faster_whisper \
  --output_dir . \
  --output_formats txt srt

التفريغ باستخدام تقنية wit.ai

تفريغ مقطع واحد
tafrigh "https://youtu.be/dDzxYcEJbgo" \
  --wit_client_access_tokens XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
  --output_dir . \
  --output_formats txt srt \
  --min_words_per_segment 10 \
  --max_cutting_duration 10
تفريغ قائمة تشغيل كاملة
tafrigh "https://youtube.com/playlist?list=PLyS-PHSxRDxsLnVsPrIwnsHMO5KgLz7T5" \
  --wit_client_access_tokens XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
  --output_dir . \
  --output_formats txt srt \
  --min_words_per_segment 10 \
  --max_cutting_duration 10
تفريغ أكثر من مقطع
tafrigh "https://youtu.be/4h5P7jXvW98" "https://youtu.be/jpfndVSROpw" \
  --wit_client_access_tokens XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
  --output_dir . \
  --output_formats txt srt \
  --min_words_per_segment 10 \
  --max_cutting_duration 10

التفريغ من خلال الشيفرة البرمجية

يمكنك استخدام تفريغ من خلال الشيفرة البرمجية كالتالي:

from tafrigh import farrigh, Config

if __name__ == '__main__':
  config = Config(
    input=Config.Input(
      urls_or_paths=['https://youtu.be/qFsUwp5iomU'],
      skip_if_output_exist=False,
      playlist_items='',
      download_retries=3,
      verbose=False,
    ),
    whisper=Config.Whisper(
      model_name_or_path='tiny',
      task='transcribe',
      language='ar',
      use_faster_whisper=True,
      beam_size=5,
      ct2_compute_type='default',
    ),
    wit=Config.Wit(
      wit_client_access_tokens=[],
      max_cutting_duration=10,
    ),
    output=Config.Output(
      min_words_per_segment=10,
      save_files_before_compact=False,
      save_yt_dlp_responses=False,
      output_sample=0,
      output_formats=['txt', 'srt'],
      output_dir='.',
    ),
  )

  for progress in farrigh(config):
    print(progress)

دالة "فَرِّغْ" farrigh هي عبارة عن مُوَلِّدْ (Generator) يقوم بتوليد الحالة الحالية للتفريغ وأين وصلت العملية. إذا لم تكن بحاجة إلى تتبع هذا الأمر، يمكنك الاستغناء عن حلقة الدوران من خلال استخدام deque كالتالي:

from collections import deque

from tafrigh import farrigh, Config

if __name__ == '__main__':
  config = Config(...)

  deque(farrigh(config), maxlen=0)

التفريغ باستخدام Docker

إذا كان لديك Docker على حاسبك، فالطريقة الأسهل لاستخدام تفريغ هي من خلاله. الأمر التالي يقوم بتنزيل Docker image الخاصة بتفريغ وتفريغ مقطع من YouTube باستخدام تقنيات wit.ai وإخراج النتائج في المجلد الحالي:

docker run -it --rm -v "$PWD:/tafrigh" ghcr.io/ieasybooks/tafrigh \
  "https://www.youtube.com/watch?v=qFsUwp5iomU" \
  --wit_client_access_tokens XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
  -f txt srt

يمكنك تمرير أي خيار من خيارات مكتبة تفريغ المُوضّحة في الأعلى.

يوجد أكثر من Docker image يمكنك استخدامها لتفريغ حسب الاعتماديات التي تريد استخدامها:

  • ghcr.io/ieasybooks/tafrigh: تحتوي على اعتماديات تقنيات wit.ai ونماذج Whisper معا
  • ghcr.io/ieasybooks/tafrigh-whisper: تحتوي على اعتماديات نماذج Whisper فقط
  • ghcr.io/ieasybooks/tafrigh-wit: تحتوي على اعتماديات تقنيات wit.ai فقط

من السلبيات أن نماذج Whisper لن تستطيع استخدام معالج الرسوميات الخاص بحاسبك في حال استخدامك لها من خلال Docker، وهذا أمر نعمل على حله في المستقبل.


تم الاعتماد بشكل كبير على مستودع yt-whisper لإنجاز تفريغ بشكل أسرع.

For Tasks:

Click tags to check more tools for each tasks

For Jobs:

Alternative AI tools for tafrigh

Similar Open Source Tools

For similar tasks

For similar jobs