تحويل (Tahweel) — محوّل صوت وفيديو يدعم أغلب الصيغ، أوفلاين مع FFmpeg مدمج (AppImage)
  • TypeScript 87.1%
  • CSS 8.3%
  • JavaScript 4.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
balnaimi 77a21e5aa9
All checks were successful
test / test (push) Successful in 18s
build-and-release / appimage (push) Successful in 45s
chore(release): v0.8.0
2026-10-01 21:25:49 +03:00
.forgejo/workflows feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
build feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
docs feat: persistent queue, visual regression check and in-app update 2026-10-01 21:25:48 +03:00
scripts feat: persistent queue, visual regression check and in-app update 2026-10-01 21:25:48 +03:00
src feat: persistent queue, visual regression check and in-app update 2026-10-01 21:25:48 +03:00
tests feat: persistent queue, visual regression check and in-app update 2026-10-01 21:25:48 +03:00
.editorconfig feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
.gitignore feat(smart): target size, platform presets and VMAF quality measurement 2026-09-27 22:54:51 +03:00
.prettierignore feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
.prettierrc feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
.q1.pid feat: persistent queue, visual regression check and in-app update 2026-10-01 21:25:48 +03:00
AGENTS.md feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
CHANGELOG.md chore(release): v0.8.0 2026-10-01 21:25:49 +03:00
electron-builder.yml fix(startup): ship the AppImage as zstd and defer hardware probes 2026-09-24 21:41:49 +03:00
electron.vite.config.ts feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
eslint.config.mjs feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
LICENSE feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
package-lock.json chore(release): v0.8.0 2026-10-01 21:25:49 +03:00
package.json chore(release): v0.8.0 2026-10-01 21:25:49 +03:00
README.md feat: persistent queue, visual regression check and in-app update 2026-10-01 21:25:48 +03:00
THIRD-PARTY.md fix: production audit findings (data loss, cleanup, hardening) 2026-10-01 19:51:09 +03:00
tsconfig.json feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
tsconfig.node.json feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
tsconfig.web.json feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00
vitest.config.ts feat: FFmpeg-powered audio and video converter 2026-09-24 20:39:45 +03:00

تحويل · Tahweel

محوّل صوت وفيديو عربي أولًا، يعمل بلا إنترنت، مبني على FFmpeg مدمج داخل التطبيق. Arabic-first audio and video converter. Offline, FFmpeg-powered, hardware accelerated.

مبني على desktop-standard. Built on desktop-standard.

المزايا / Features

  • تغطية صيغ واسعة: كل ما يدعمه FFmpeg — MP4، MKV، WebM، MOV، AVI، MPEG-TS، FLV، WMV، OGV، 3GP، GIF، WebP، وصيغ صوتية MP3، AAC/M4A، Opus، Vorbis، FLAC، WAV، AIFF، AC-3، E-AC-3، MP2، WMA، AMR، ALAC.

  • نسخ بلا إعادة ترميز (Remux): تغيير الحاوية خلال ثوانٍ بلا فقد في الجودة عندما تكون الصيغ متوافقة.

  • تسريع عتادي تلقائي: يفحص VAAPI / NVENC / AMF / QSV / VideoToolbox بترميز تجريبي حقيقي، ويسقط تلقائيًا إلى المعالج عند أي فشل. يعمل على أجهزة بلا كرت رسومات كذلك.

  • قائمة مهام: إضافة عدة ملفات، تقدم مباشر بالسرعة والزمن المتبقي، إلغاء وإعادة المحاولة.

  • تحكّم كامل: الجودة (بلا فقد/عالية/متوازنة/صغير)، الدقة، الحاوية، وترميز المعالج أو العتاد.

  • شفافية: كل مهمة تعرض أمر FFmpeg المولّد مع زر نسخ.

  • بريستات جاهزة: واتساب · تيليجرام · يوتيوب · ريلز/شورتس (عمودي ٩:١٦) · تيك توك · X · ديسكورد · آيفون · أندرويد · تلفزيون · فلاشة سيارة · بودكاست · أرشفة بلا فقد.

  • وضع الحجم المستهدف: «أبيه ١٥ ميقا» — يُحسب البِتريت من المدة ويُنفَّذ ترميز بمرورين، والنتيجة دائمًا عند الحد أو أقل (مقيس: ٩٢–٩٤٪).

  • الطابور يبقى بعد الإغلاق: ترجع الملفات المنتظرة وآخر العمليات، والمهمة التي كانت تعمل تُعلَّم كمتوقفة ويمكن إعادتها.

  • تحديث بضغطة: ينزّل الإصدار الجديد داخل البرنامج ويتحقق من بصمته sha256 قبل أن يخبرك أنه جاهز.

  • قياس الجودة (VMAF): بعد التحويل قارن الناتج بالأصل واحصل على درجة موضوعية، مع SSIM/PSNR كبديل.

  • مكان الحفظ بثلاثة أوضاع: بجانب الملف الأصلي (الافتراضي) · مجلد ثابت تختاره في الإعدادات · أو اسألني كل مرة عند بدء التحويل.

  • مشغّل مدمج للمقارنة: شغّل الملف الأصلي والناتج داخل التطبيق، تنقّل بينهما مع الحفاظ على الموضع، أو اعرضهما جنبًا إلى جنب مع مزامنة التشغيل. وأي صيغة لا يدعمها المشغّل المدمج (AVI، WMV، AC-3…) يمكن معاينتها بمقطع ١٠ ثوانٍ يولّده FFmpeg من نفس الموضع.

  • ثنائي اللغة: عربي/إنجليزي مع RTL/LTR، ثيم فاتح/داكن/النظام.

  • Wide format coverage — everything FFmpeg supports: MP4, MKV, WebM, MOV, AVI, MPEG-TS, FLV, WMV, OGV, 3GP, GIF, WebP, plus MP3, AAC/M4A, Opus, Vorbis, FLAC, WAV, AIFF, AC-3, E-AC-3, MP2, WMA, AMR, ALAC.

  • Remux without re-encoding — swap the container in seconds with no quality loss when codecs fit.

  • Automatic hardware acceleration — VAAPI / NVENC / AMF / QSV / VideoToolbox are validated with a real test encode and fall back to the CPU on failure. Works on machines with no GPU as well.

  • Job queue — batch files, live progress with speed and ETA, cancel and retry.

  • Full control — quality (lossless/high/balanced/small), resolution, container, CPU or GPU encoding.

  • Transparent — every job shows the exact generated FFmpeg command with a copy button.

  • Ready presets: WhatsApp, Telegram, YouTube, Reels/Shorts (vertical 9:16), TikTok, X, Discord, iPhone, Android, TV, car USB, podcast and lossless archive.

  • Target size mode: ask for an exact size (e.g. 15 MB); the bitrate is derived from the duration and encoded in two passes, always landing at or under the limit (measured 92-94%).

  • The queue survives restarts: waiting files and recent conversions come back, a job that was running is marked as stopped and can be retried.

  • One-click update: the new release is downloaded in the app and verified against its sha256.

  • Quality measurement (VMAF): compare the result against the source after converting, with SSIM/PSNR fallbacks.

  • Output location with three modes: next to the source file (default), a fixed folder chosen in the settings, or asking you every time the queue starts.

  • Built-in comparison player — play the original and the result inside the app, switch between them keeping the position, or watch both side by side with synced playback. Formats the embedded player cannot decode (AVI, WMV, AC-3...) are previewed through a 10-second clip generated by FFmpeg.

المحرّك / The engine

التطبيق يشحن نسخة FFmpeg مثبّتة (BtbN GPL 8.1) داخل الحزمة، فلا يحتاج إنترنت ولا تثبيتًا خارجيًا. يمكن اختيار نسخة ffmpeg أخرى من الإعدادات إن رغبت.

The app ships a pinned FFmpeg build (BtbN GPL 8.1) inside the package: no internet, no external install. You can point it at another ffmpeg binary from Settings.

npm run fetch:ffmpeg     # يجلب المحرّك المدمج إلى build/ffmpeg / download the bundled engine

التثبيت والتشغيل / Install & run

npm install
npm run fetch:ffmpeg # مطلوب للتطوير / required for development
npm run dev          # التطوير / development
npm test             # الاختبارات / tests
npm run test:engine  # مصفوفة التحويل الكاملة / full conversion matrix
npm run typecheck    # فحص الأنواع / type checking
npm run lint         # ESLint
npm run gen:icon     # توليد الأيقونات / generate icons
npm run dist         # بناء AppImage / build AppImage

أثناء التطوير: إن لم تجلب المحرّك المدمج، يستخدم التطبيق ffmpeg المثبّت على النظام تلقائيًا. In development the app falls back to the system ffmpeg when the bundled engine is missing.

الاختبارات / Tests

  • npm test — اختبارات الوحدة ومنطق الأوامر والتسمية، إضافةً إلى اختبارات تكامل خفيفة على المحرّك المدمج (تُتخطّى تلقائيًا إن لم يكن موجودًا).

  • npm run test:engine — مصفوفة التحويل الكاملة: كل صيغة مدعومة مقابل كل نوع مصدر، بأسماء ملفات عربية فيها مسافات وأقواس ورموز، مع فحص الأبعاد الفردية والترجمات وصور الغلاف والنسخ المباشر والذهاب والعودة. التقرير الكامل في docs/MATRIX.md (128 سيناريو).

  • npm test — unit tests for command planning, naming and progress handling, plus light integration tests against the bundled engine (skipped automatically when it is not present).

  • npm run test:engine — the full conversion matrix: every supported target against every source kind, using Arabic file names with spaces, brackets and symbols, covering odd dimensions, subtitles, cover art, remux and round trips. Full report in docs/MATRIX.md (128 scenarios).

التحميل / Download

من صفحة Releases: نزّل أحدث ملف tahweel-<version>.AppImage، ثم:

chmod +x tahweel-*.AppImage
./tahweel-*.AppImage

الترخيص / License

هذا العمل مرخّص تحت CC BY-NC-SA 4.0 — استخدام غير تجاري مع مشاركة بالمثل. محرّك FFmpeg المدمج مرخّص تحت GPL (نصوص الترخيص تُشحن معه في resources/ffmpeg).

This work is licensed under CC BY-NC-SA 4.0 — non-commercial, share-alike. The bundled FFmpeg engine is licensed under the GPL (its licence texts ship alongside it in resources/ffmpeg); see THIRD-PARTY.md for the full list.

هذا العمل مرخّص تحت CC BY-NC-SA 4.0 — استخدام غير تجاري مع مشاركة بالمثل. محرّك FFmpeg المدمج تحت GPL، وقائمة الأطراف الثالثة كاملة في THIRD-PARTY.md.