Merge branch 'beta'
This commit is contained in:
@@ -15,12 +15,30 @@
|
||||
**A modern YouTube downloader with a clean PySide6 interface.**
|
||||
Download videos in any quality, extract audio, fetch subtitles, and more.
|
||||
|
||||
### 🌍 README Languages
|
||||
|
||||
English: [EN](README.md)
|
||||
| العربية: [AR](readme-translations/README.ar.md)
|
||||
| Deutsch: [DE](readme-translations/README.de.md)
|
||||
| Español: [ES](readme-translations/README.es.md)
|
||||
| Français: [FR](readme-translations/README.fr.md)
|
||||
| हिन्दी: [HI](readme-translations/README.hi.md)
|
||||
| Bahasa Indonesia: [ID](readme-translations/README.id.md)
|
||||
| Italiano: [IT](readme-translations/README.it.md)
|
||||
| 日本語: [JA](readme-translations/README.ja.md)
|
||||
| Polski: [PL](readme-translations/README.pl.md)
|
||||
| Português: [PT](readme-translations/README.pt.md)
|
||||
| Русский: [RU](readme-translations/README.ru.md)
|
||||
| Türkçe: [TR](readme-translations/README.tr.md)
|
||||
| 中文: [ZH](readme-translations/README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Installation</a> •
|
||||
<a href="#features">Features</a> •
|
||||
<a href="#usage">Usage</a> •
|
||||
<a href="#screenshots">Screenshots</a> •
|
||||
<a href="#troubleshooting">Troubleshooting</a> •
|
||||
<a href="#sponsor">Sponsor</a> •
|
||||
<a href="#contributing">Contributing</a>
|
||||
</p>
|
||||
|
||||
@@ -36,6 +54,7 @@ YTSage is designed for users who want a **simple yet powerful YouTube downloader
|
||||
- A clean, modern PySide6 interface
|
||||
- One-click downloads for video, audio, and subtitles
|
||||
- Advanced features like SponsorBlock, subtitle merging, and playlist selection
|
||||
- Optional Generic Mode for yt-dlp-supported sites beyond YouTube
|
||||
- Cross-platform support and easy installation
|
||||
|
||||
<a id="features"></a>
|
||||
@@ -46,13 +65,13 @@ YTSage is designed for users who want a **simple yet powerful YouTube downloader
|
||||
| Core Features | Advanced Features | Extra Features |
|
||||
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||
| 🎥 Format Table | 🚫 SponsorBlock Integration | 🎞️ FPS/HDR Display |
|
||||
| 🎵 Audio Extraction | 📝 Multi-Subtitle Select & Merge | 🔄 Auto-Update yt-dlp |
|
||||
| 🎵 Audio Extraction | 📝 Multi-Subtitle Select & Merge | 🔄 Auto-Update yt-dlp |
|
||||
| ✨ Simple UI | 💾 Save Description & Thumbnail | 🛠️ FFmpeg/yt-dlp/Deno Detection |
|
||||
| 📋 Playlist Support & Selector | 🚀 Speed Limiter | ⚙️ Custom Commands |
|
||||
| 📑 Embed Chapters | ✂️ Trim Video Sections | 🍪 Login with Cookies |
|
||||
| 📜 Download History | 🔄 Release Channel Selection | 🌐 Proxy Support |
|
||||
| 🎚️ Audio Format Conversion | 🎬 Video Format Settings | 🆙 Built-in Updater Tab |
|
||||
|
||||
| 🌍 Generic Mode | 🔊 Audio Normalization (EBU R128) | 🌍 Localization in 14 Languages |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
@@ -248,36 +267,77 @@ python -m ytsage.main
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Advanced Options</summary>
|
||||
<summary>🌍 Generic Mode for non-YouTube sites</summary>
|
||||
|
||||
- **Subtitle Options:** Filter languages and embed into video file
|
||||
- **Subtitle Merge:** Merge subtitles into video file for hardcoded subtitles
|
||||
- **Custom Commands:** Access advanced yt-dlp features via command line arguments
|
||||
- **Save Description:** Save the description of the video as a text file
|
||||
- **Save Thumbnail:** Save the thumbnail of the video as an image file
|
||||
- **Embed Chapters:** Embed chapter markers as metadata in the downloaded video file for compatible video players
|
||||
Use Generic Mode when you want YTSage to accept URLs from sites supported by yt-dlp, such as Dailymotion, CBC Gem, TikTok, and others.
|
||||
|
||||
How to use it:
|
||||
|
||||
1. Open `Download Settings`.
|
||||
2. Enable `Generic Mode`.
|
||||
3. Paste a supported non-YouTube video or playlist URL.
|
||||
4. Click `Analyze`.
|
||||
5. Choose a format and download as usual.
|
||||
|
||||
Notes:
|
||||
|
||||
- Generic Mode only changes URL validation inside YTSage. The target site must still be supported by your installed yt-dlp version.
|
||||
- Some sites require cookies, a login session, a proxy, or extra yt-dlp arguments depending on the extractor.
|
||||
- If a site fails, update yt-dlp first from the built-in updater tab before reporting the issue.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Media and Download Options</summary>
|
||||
|
||||
- **Subtitle Options:** Filter languages and embed subtitles into the video file
|
||||
- **Subtitle Merge:** Merge subtitles into the video file for hardcoded subtitles
|
||||
- **Save Description:** Save the video description as a text file
|
||||
- **Save Thumbnail:** Save the video thumbnail as an image file
|
||||
- **Embed Chapters:** Embed chapter markers as metadata for compatible video players
|
||||
- **Remove Sponsor Segments:** Remove sponsor segments from the video using SponsorBlock
|
||||
- **Speed Limiter:** Limit the download speed (e.g., `500K` for 500 KB/s)
|
||||
- **Login with Cookies:** Login to YouTube using cookies to access private content
|
||||
- **Trim Video:** Download only specific parts of a video by specifying time ranges in `HH:MM:SS` format
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Output and File Settings</summary>
|
||||
|
||||
- **Speed Limiter:** Limit the download speed, for example `500K` for 500 KB/s
|
||||
- **Save Download Path:** Save the default download path for future downloads. Available in **Download Settings → Download Path**.
|
||||
- **Output Filename Format:** Customize the output filename format using variables like `%(title)s`, `%(uploader)s`, and `%(resolution)s`. Available in **Download Settings → Filename Format**.
|
||||
- **Force Output Format:** Force video downloads into a specific container format such as `mp4`, `webm`, or `mkv`. Available in **Download Settings → Output Format Settings**.
|
||||
- **Audio Format Conversion:** Convert audio-only downloads to preferred formats such as `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, or `Best`. Available in **Download Settings → Audio Format Settings**.
|
||||
- **Audio Normalization:** Standardize volume for audio-only downloads using EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Access and Network</summary>
|
||||
|
||||
- **Login with Cookies:** Login to YouTube using cookies to access private content.
|
||||
How to use it:
|
||||
1. **Recommended:** Use the built-in "Extract cookies from browser" option in the app. Select your browser (Chrome, Firefox, etc.) and then select Profile (optional).
|
||||
1. **Recommended:** Use the built-in `Extract cookies from browser` option in the app, then select your browser and optionally a profile.
|
||||
2. Alternatively, extract cookies manually:
|
||||
a. Extract cookies from your browser using an extension like [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
a. Export cookies from your browser using an extension like [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
b. Copy the cookies in Netscape format
|
||||
c. Create a file named `cookies.txt` and paste the cookies into it
|
||||
d. Select the `cookies.txt` file in the app
|
||||
- **Save Download Path:** Save the default download path for future downloads. Available in **Download Settings → Download Path**.
|
||||
- **Output Filename Format:** Customize the output filename format using variables like `%(title)s`, `%(uploader)s`, `%(resolution)s`, etc. Available in **Download Settings → Filename Format**.
|
||||
- **Updater Tab:** Unified tab in Custom Options for managing all updates:
|
||||
- **yt-dlp Updates:** Check and update yt-dlp to the latest version, with release channel selection (Stable/Nightly)
|
||||
- **FFmpeg Version Checker:** Check your FFmpeg version with direct links to installation guides
|
||||
- **Deno Updates:** Check and update Deno runtime to the latest version
|
||||
- **FFmpeg/yt-dlp/Deno Detection:** Automatically detect FFmpeg/yt-dlp/Deno path and version. You can use this option by clicking on about button.
|
||||
- **Trim Video:** Download only specific parts of a video by specifying time ranges (HH:MM:SS format)
|
||||
- **Proxy Support:** Use a proxy server for downloads (e.g., `http://<proxy-server>:<port>`)
|
||||
- **Force Output Format:** Force video downloads in a specific container format (e.g., `mp4`, `webm`, `mkv`). Available in **Download Settings → Output Format Settings**.
|
||||
- **Audio Format Conversion:** Convert audio-only downloads to preferred formats (`AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, or `Best`). Ideal for video editing software like DaVinci Resolve. Available in **Download Settings → Audio Format Settings**.
|
||||
- **Download History:** View past downloads with thumbnails and statuses. You can use this option by clicking on the **History** button.
|
||||
- **Proxy Support:** Use a proxy server for downloads, for example `http://<proxy-server>:<port>`
|
||||
- **Generic Mode:** Allow YTSage to analyze and download from non-YouTube sites supported by yt-dlp. Enable it from **Download Settings → Generic Mode**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Tools and Maintenance</summary>
|
||||
|
||||
- **Custom Commands:** Access advanced yt-dlp features via command line arguments
|
||||
- **Updater Tab:** Manage built-in update tools from one place in Custom Options:
|
||||
- **yt-dlp Updates:** Check for updates and switch between Stable and Nightly release channels
|
||||
- **FFmpeg Version Checker:** Check your FFmpeg version and open installation guides
|
||||
- **Deno Updates:** Check and update the Deno runtime
|
||||
- **FFmpeg/yt-dlp/Deno Detection:** Automatically detect FFmpeg, yt-dlp, and Deno paths and versions from the About dialog.
|
||||
- **Download History:** View past downloads with thumbnails and statuses from the **History** button.
|
||||
|
||||
</details>
|
||||
|
||||
@@ -298,6 +358,18 @@ YTSage supports **14 languages** for worldwide accessibility. Select your prefer
|
||||
| 🇧🇷 Portuguese | `pt` | 🇷🇺 Russian | `ru` |
|
||||
| 🇹🇷 Turkish | `tr` | 🇨🇳 Chinese | `zh` |
|
||||
|
||||
### README Translations
|
||||
|
||||
| Language | File | Language | File |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 English | [README.md](README.md) | 🇪🇸 Spanish | [README.es.md](readme-translations/README.es.md) |
|
||||
| 🇸🇦 Arabic | [README.ar.md](readme-translations/README.ar.md) | 🇫🇷 French | [README.fr.md](readme-translations/README.fr.md) |
|
||||
| 🇩🇪 German | [README.de.md](readme-translations/README.de.md) | 🇮🇳 Hindi | [README.hi.md](readme-translations/README.hi.md) |
|
||||
| 🇮🇩 Indonesian | [README.id.md](readme-translations/README.id.md) | 🇮🇹 Italian | [README.it.md](readme-translations/README.it.md) |
|
||||
| 🇯🇵 Japanese | [README.ja.md](readme-translations/README.ja.md) | 🇵🇱 Polish | [README.pl.md](readme-translations/README.pl.md) |
|
||||
| 🇧🇷 Portuguese | [README.pt.md](readme-translations/README.pt.md) | 🇷🇺 Russian | [README.ru.md](readme-translations/README.ru.md) |
|
||||
| 🇹🇷 Turkish | [README.tr.md](readme-translations/README.tr.md) | 🇨🇳 Chinese | [README.zh.md](readme-translations/README.zh.md) |
|
||||
|
||||
> 💡 **Want to contribute a translation?** Check out the [Contributing](#contributing) section to help us add more languages!
|
||||
|
||||
</details>
|
||||
@@ -358,6 +430,16 @@ If you see this error on macOS Sonoma or newer, you need to remove the quarantin
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Sponsor
|
||||
|
||||
If YTSage saves you time, consider sponsoring the project. Sponsorship helps cover development time, testing across platforms, and future improvements.
|
||||
|
||||
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||
- The sponsor link is also available directly inside the app from the About dialog.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Contributing
|
||||
|
||||
@@ -378,6 +460,12 @@ We welcome contributions! Here's how you can help:
|
||||
```
|
||||
5. 🔄 Open a Pull Request
|
||||
|
||||
### 🌍 Contributing Translations
|
||||
|
||||
- Update the matching localized README file (for example `readme-translations/README.es.md`)
|
||||
- Keep app strings in sync by editing `ytsage/languages/<code>.json`
|
||||
- If your language is missing, start from `README.md` and create `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Project Structure</summary>
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "ytsage"
|
||||
version = "5.0.0"
|
||||
version = "5.0.2b"
|
||||
description = "Modern YouTube downloader with a clean PySide6 interface."
|
||||
authors = [
|
||||
{ name = "oop7", email = "oop7_support@proton.me" },
|
||||
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**أداة تنزيل حديثة من YouTube بواجهة PySide6 نظيفة.**
|
||||
قم بتنزيل مقاطع الفيديو بأي جودة، واستخرج الصوت، واجلب الترجمات، والمزيد.
|
||||
|
||||
### 🌍 اقرأني اللغات
|
||||
|
||||
الإنجليزية: [EN](../README.md)
|
||||
| العربية: [AR](README.ar.md)
|
||||
| الألمانية: [DE](README.de.md)
|
||||
| الاسبانية: [ES](README.es.md)
|
||||
| الفرنسية: [FR](README.fr.md)
|
||||
| الهندية: [HI](README.hi.md)
|
||||
| البهاسا الإندونيسية: [ID](README.id.md)
|
||||
| إيطاليانو: [IT](README.it.md)
|
||||
| العنوان: [JA](README.ja.md)
|
||||
| بولسكي: [PL](README.pl.md)
|
||||
| البرتغالية: [PT](README.pt.md)
|
||||
| Русский: [RU](README.ru.md)
|
||||
| التركية: [TR](README.tr.md)
|
||||
| 中文: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">التثبيت</a> •
|
||||
<a href="#features">المميزات</a> •
|
||||
<a href="#usage">الاستخدام</a> •
|
||||
<a href="#screenshots">لقطات الشاشة</a> •
|
||||
<a href="#troubleshooting">استكشاف الأخطاء وإصلاحها</a> •
|
||||
<a href="#sponsor">Sponsor</a> •
|
||||
<a href="#contributing">المساهمة</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ لماذا YTSage؟
|
||||
|
||||
تم تصميم YTSage للمستخدمين الذين يريدون **برنامج تنزيل YouTube بسيطًا وقويًا**. على عكس الأدوات الأخرى، فهو يقدم:
|
||||
|
||||
- واجهة PySide6 نظيفة وحديثة
|
||||
- التنزيلات بنقرة واحدة للفيديو والصوت والترجمات
|
||||
- ميزات متقدمة مثل SponsorBlock ودمج الترجمة واختيار قائمة التشغيل
|
||||
- الوضع العام الاختياري للمواقع التي تدعم yt-dlp خارج YouTube
|
||||
- دعم عبر الأنظمة الأساسية وسهولة التثبيت
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨المميزات
|
||||
|
||||
<div align="center">
|
||||
|
||||
| الميزات الأساسية | الميزات المتقدمة | ميزات إضافية |
|
||||
|-----------------------------------|--------------------------------------------------------|-----|
|
||||
| 🎥 تنسيق الجدول | 🚫 تكامل SponsorBlock | 🎞️ عرض FPS/HDR |
|
||||
| 🎵 استخراج الصوت | 📝 تحديد ودمج الترجمة المتعددة | 🔄 التحديث التلقائي yt-dlp |
|
||||
| ✨ واجهة مستخدم بسيطة | 💾 حفظ الوصف والصورة المصغرة | 🛠️ كشف FFmpeg/yt-dlp/Deno |
|
||||
| 📋 دعم قائمة التشغيل والمحدد | 🚀 محدد السرعة | ⚙️ أوامر مخصصة |
|
||||
| 📑 تضمين الفصول | ✂️ تقليم أقسام الفيديو | 🍪 تسجيل الدخول باستخدام ملفات تعريف الارتباط |
|
||||
| 📜 تحميل التاريخ | 🔄 إطلاق اختيار القناة | 🌐 دعم الوكيل |
|
||||
| 🎚️ تحويل تنسيق الصوت | 🎬 إعدادات تنسيق الفيديو | 🆙 علامة تبويب التحديث المدمجة |
|
||||
| 🌍 الوضع العام | 🔊 تسوية الصوت (EBU R128) | 🌍 التعريب بـ 14 لغة |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀التركيب
|
||||
|
||||
### ⚡ التثبيت السريع (موصى به)
|
||||
|
||||
تثبيت YTSage من PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 تحديث التثبيت الحالي</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
ثم قم بتشغيل التطبيق:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 الملفات التنفيذية المعدة مسبقًا
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 ويندوز
|
||||
|
||||
| تنسيق | الوصف |
|
||||
|--------|------------|
|
||||
|  | المثبت القياسي |
|
||||
|  | مع FFmpeg المجمعة |
|
||||
|  | نسخة محمولة، لا تحتاج إلى تثبيت |
|
||||
|  | محمول مع FFmpeg، مضغوط |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ خطوات التثبيت</summary>
|
||||
|
||||
1. **مثبت EXE (`.exe`)**: انقر نقرًا مزدوجًا فوق الملف واتبع معالج الإعداد.
|
||||
2. **النسخة المحمولة (`.zip`)**: قم باستخراج الأرشيف إلى الموقع المطلوب وتشغيل `ytsage.exe`.
|
||||
3. **FFmpeg Bundled**: اختر إصدارات FFmpeg المجمعة إذا لم يكن FFmpeg مثبتًا على نظامك.
|
||||
</details>
|
||||
|
||||
#### 🐧 لينكس
|
||||
|
||||
| تنسيق | الوصف |
|
||||
|--------|------------|
|
||||
|  | حزمة دبيان |
|
||||
|  | صورة التطبيق المحمولة |
|
||||
|  | حزمة دورة في الدقيقة |
|
||||
|  | حزمة فلاتباك |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ خطوات التثبيت</summary>
|
||||
|
||||
- **ديب (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **عدد الدورات في الدقيقة (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **صورة التطبيق (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: اتبع التعليمات الموجودة على Flathub أو قم بتشغيل:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 ماك
|
||||
|
||||
| تنسيق | الوصف |
|
||||
|--------|------------|
|
||||
|  | تطبيق مضغوط لأبل سيليكون |
|
||||
|  | مثبت صورة القرص لـ Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ خطوات التثبيت</summary>
|
||||
|
||||
- **مثبت DMG (`.dmg`)**: انقر نقرًا مزدوجًا للتثبيت، ثم اسحب `YTSage.app` إلى مجلد التطبيقات.
|
||||
- **أرشيف التطبيقات (`.zip`)**: استخرج الملف المضغوط وانقل `YTSage.app` إلى مجلد التطبيقات.
|
||||
|
||||
*ملاحظة: إذا واجهت خطأ "التطبيق تالف"، راجع [macOS troubleshooting section](#troubleshooting) أدناه.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 التثبيت اليدوي من المصدر</summary>
|
||||
|
||||
### 1. استنساخ المستودع
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. تثبيت التبعيات
|
||||
|
||||
#### ⚡ مع الأشعة فوق البنفسجية
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 أو بالنقطة القياسية
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. قم بتشغيل التطبيق
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 لقطات الشاشة
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>إعدادات التحميل</em></td>
|
||||
<td align="center"><em>تنزيل قائمة التشغيل</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>تنسيق الصوت</em></td>
|
||||
<td align="center"><em>خيارات مخصصة</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 الاستخدام
|
||||
|
||||
<details>
|
||||
<summary>🎯 الاستخدام الأساسي</summary>
|
||||
|
||||
1. ** إطلاق YTSage **
|
||||
2. **الصق عنوان URL لموقع YouTube** (أو استخدم الزر "لصق عنوان URL")
|
||||
3. **انقر على "تحليل"**
|
||||
4. **حدد التنسيق:**
|
||||
- `Video` لتنزيل الفيديو
|
||||
- `Audio Only` لاستخراج الصوت
|
||||
5. **اختر الخيارات:**
|
||||
- تمكين الترجمة واختيار اللغة
|
||||
- تمكين دمج الترجمة
|
||||
- حفظ الصورة المصغرة
|
||||
- إزالة شرائح الراعي
|
||||
- حفظ الوصف
|
||||
- تضمين الفصول
|
||||
6. **حدد دليل المخرجات**
|
||||
7. **انقر على "تنزيل"**
|
||||
|
||||
> 💡 دليل التنزيل الافتراضي هو مجلد "التنزيلات" الخاص بالمستخدم.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 تنزيل قائمة التشغيل</summary>
|
||||
|
||||
1. **لصق عنوان URL لقائمة التشغيل**
|
||||
2. **انقر على "تحليل"**
|
||||
3. **حدد مقاطع الفيديو من محدد قائمة التشغيل (اختياري، الإعداد الافتراضي هو الكل)**
|
||||
4. **اختر التنسيق/الجودة المطلوبة**
|
||||
5. **انقر على "تنزيل"**
|
||||
|
||||
> 💡 يتعامل التطبيق تلقائيًا مع قائمة انتظار التنزيل
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 الوضع العام للمواقع غير التابعة لليوتيوب</summary>
|
||||
|
||||
استخدم الوضع العام عندما تريد أن يقبل YTSage عناوين URL من المواقع التي يدعمها yt-dlp، مثل Dailymotion وCBC Gem وTikTok وغيرها.
|
||||
|
||||
كيفية استخدامه:
|
||||
|
||||
1. افتح `Download Settings`.
|
||||
2. تفعيل `Generic Mode`.
|
||||
3. الصق عنوان URL لفيديو أو قائمة تشغيل مدعومة غير تابعة لـ YouTube.
|
||||
4. اضغط على `Analyze`.
|
||||
5. اختر التنسيق وقم بتنزيله كالمعتاد.
|
||||
|
||||
ملاحظات:
|
||||
|
||||
- الوضع العام يغير فقط التحقق من صحة عنوان URL داخل YTSage. يجب أن يظل الموقع المستهدف مدعومًا بإصدار yt-dlp المثبت لديك.
|
||||
- تتطلب بعض المواقع ملفات تعريف الارتباط، أو جلسة تسجيل دخول، أو وكيلًا، أو وسائط yt-dlp إضافية اعتمادًا على المستخرج.
|
||||
- إذا فشل أحد المواقع، فقم بتحديث yt-dlp أولاً من علامة تبويب المحدث المضمنة قبل الإبلاغ عن المشكلة.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 خيارات الوسائط والتنزيل</summary>
|
||||
|
||||
- **خيارات الترجمة:** تصفية اللغات وتضمين الترجمة في ملف الفيديو
|
||||
- **دمج الترجمة:** دمج الترجمات في ملف الفيديو للحصول على ترجمات مضمنة
|
||||
- **حفظ الوصف:** احفظ وصف الفيديو كملف نصي
|
||||
- **حفظ الصورة المصغرة:** احفظ الصورة المصغرة للفيديو كملف صورة
|
||||
- **تضمين الفصول:** تضمين علامات الفصل كبيانات وصفية لمشغلات الفيديو المتوافقة
|
||||
- **إزالة شرائح الجهات الراعية:** قم بإزالة شرائح الجهات الراعية من الفيديو باستخدام SponsorBlock
|
||||
- **قص الفيديو:** قم بتنزيل أجزاء محددة فقط من الفيديو عن طريق تحديد نطاقات زمنية بتنسيق `HH:MM:SS`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ إعدادات الإخراج والملف</summary>
|
||||
|
||||
- **محدد السرعة:** حدد سرعة التنزيل، على سبيل المثال `500K` لـ 500 كيلو بايت/ثانية
|
||||
- **حفظ مسار التنزيل:** احفظ مسار التنزيل الافتراضي للتنزيلات المستقبلية. متوفر في **إعدادات التنزيل → مسار التنزيل**.
|
||||
- **تنسيق اسم ملف الإخراج:** قم بتخصيص تنسيق اسم ملف الإخراج باستخدام متغيرات مثل `%(title)s`، `%(uploader)s`، و`%(resolution)s`. متوفر في **إعدادات التنزيل → تنسيق اسم الملف**.
|
||||
- **تنسيق الإخراج الإجباري:** فرض تنزيلات الفيديو في تنسيق حاوية محدد مثل `mp4` أو `webm` أو `mkv`. متوفر في **إعدادات التنزيل ← إعدادات تنسيق الإخراج**.
|
||||
- **تحويل تنسيق الصوت:** تحويل التنزيلات الصوتية فقط إلى التنسيقات المفضلة مثل `AAC`، `MP3`، `FLAC`، `WAV`، `Opus`، `M4A`، `Vorbis` أو `Best`. متوفر في **إعدادات التنزيل → إعدادات تنسيق الصوت**.
|
||||
- **تطبيع الصوت:** توحيد مستوى الصوت للتنزيلات الصوتية فقط باستخدام EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 الوصول والشبكة</summary>
|
||||
|
||||
- **تسجيل الدخول باستخدام ملفات تعريف الارتباط:** قم بتسجيل الدخول إلى YouTube باستخدام ملفات تعريف الارتباط للوصول إلى المحتوى الخاص.
|
||||
كيفية استخدامه:
|
||||
1. **موصى به:** استخدم خيار `Extract cookies from browser` المدمج في التطبيق، ثم حدد المتصفح الخاص بك وملفًا شخصيًا بشكل اختياري.
|
||||
2. بدلاً من ذلك، قم باستخراج ملفات تعريف الارتباط يدويًا:
|
||||
أ. قم بتصدير ملفات تعريف الارتباط من متصفحك باستخدام ملحق مثل [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
ب. انسخ ملفات تعريف الارتباط بتنسيق Netscape
|
||||
ج. أنشئ ملفًا باسم `cookies.txt` والصق ملفات تعريف الارتباط فيه
|
||||
د. حدد الملف `cookies.txt` في التطبيق
|
||||
- **دعم الوكيل:** استخدم خادمًا وكيلاً للتنزيلات، على سبيل المثال `http://<proxy-server>:<port>`
|
||||
- **الوضع العام:** اسمح لـ YTSage بالتحليل والتنزيل من مواقع غير تابعة لـ YouTube والتي يدعمها yt-dlp. قم بتمكينه من **إعدادات التنزيل → الوضع العام**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ الأدوات والصيانة</summary>
|
||||
|
||||
- **الأوامر المخصصة:** الوصول إلى ميزات yt-dlp المتقدمة عبر وسيطات سطر الأوامر
|
||||
- **علامة تبويب التحديث:** إدارة أدوات التحديث المضمنة من مكان واحد في الخيارات المخصصة:
|
||||
- **تحديثات yt-dlp:** تحقق من وجود تحديثات وقم بالتبديل بين قنوات الإصدار الثابت وقنوات الإصدار الليلي
|
||||
- **مدقق إصدار FFmpeg:** تحقق من إصدار FFmpeg الخاص بك وافتح أدلة التثبيت
|
||||
- **تحديثات Deno:** التحقق من وقت تشغيل Deno وتحديثه
|
||||
- **اكتشاف FFmpeg/yt-dlp/Deno:** اكتشاف مسارات وإصدارات FFmpeg وyt-dlp وDeno تلقائيًا من مربع الحوار "حول".
|
||||
- **سجل التنزيلات:** اعرض التنزيلات السابقة باستخدام الصور المصغرة والحالات من زر **السجل**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 التعريب</summary>
|
||||
|
||||
يدعم YTSage **14 لغة** لسهولة الوصول إليها في جميع أنحاء العالم. اختر لغتك المفضلة من **خيارات مخصصة → اللغة**.
|
||||
|
||||
### اللغات المدعومة
|
||||
|
||||
| اللغة | الكود | اللغة | الكود |
|
||||
|----------|------|---------|------|
|
||||
| 🇺🇸 إنجليزي | `en` | 🇪🇸 الاسبانية | `es` |
|
||||
| 🇸🇦 عربي | `ar` | 🇫🇷 فرنسي | `fr` |
|
||||
| 🇩🇪 ألماني | `de` | 🇮🇳 هندي | `hi` |
|
||||
| 🇮🇩 إندونيسي | `id` | 🇮🇹 إيطالي | `it` |
|
||||
| 🇯🇵 ياباني | `ja` | 🇵🇱 بولندية | `pl` |
|
||||
| 🇧🇷 برتغالية | `pt` | 🇷🇺 روسي | `ru` |
|
||||
| 🇹🇷 تركي | `tr` | 🇨🇳 صيني | `zh` |
|
||||
|
||||
### ترجمات README
|
||||
|
||||
| اللغة | ملف | اللغة | ملف |
|
||||
|----------|------|---------|------|
|
||||
| 🇺🇸 إنجليزي | [README.md](../README.md) | 🇪🇸 الاسبانية | [README.es.md](README.es.md)
|
||||
| 🇸🇦 عربي | [README.ar.md](README.ar.md) | 🇫🇷 فرنسي | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 ألماني | [README.de.md](README.de.md) | 🇮🇳 هندي | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 إندونيسي | [README.id.md](README.id.md) | 🇮🇹 إيطالي | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 ياباني | [README.ja.md](README.ja.md) | 🇵🇱 بولندية | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 برتغالية | [README.pt.md](README.pt.md) | 🇷🇺 روسي | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 تركي | [README.tr.md](README.tr.md) | 🇨🇳 صيني | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **هل تريد المساهمة في الترجمة؟** راجع قسم [Contributing](#contributing) لمساعدتنا في إضافة المزيد من اللغات!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ استكشاف الأخطاء وإصلاحها
|
||||
|
||||
<details>
|
||||
<summary>انقر لعرض المشكلات والحلول الشائعة</summary>
|
||||
|
||||
- **تنسيق الجدول لا يتم عرضه:** قم بتحديث yt-dlp إلى الإصدار الأحدث، ثم قم بالتبديل إلى yt-dlp ليلاً.
|
||||
- **فشل التنزيل:** تحقق من اتصالك بالإنترنت وتأكد من توفر الفيديو.
|
||||
- **أخطاء تنزيل محددة:**
|
||||
- **مقاطع الفيديو الخاصة:** استخدم مصادقة ملفات تعريف الارتباط للوصول إلى المحتوى الخاص.
|
||||
- **محتوى مقيد بالفئة العمرية:** قم بتسجيل الدخول إلى حساب YouTube لعرض مقاطع الفيديو المقيدة بالفئة العمرية.
|
||||
- **مقاطع الفيديو المحظورة جغرافيًا:** فكر في استخدام VPN لتجاوز القيود الإقليمية.
|
||||
- **مقاطع الفيديو المحذوفة/المحذوفة:** لم يعد الفيديو متاحًا على YouTube.
|
||||
- **البث المباشر:** لا يمكن تنزيل البث المباشر؛ انتظر حتى ينتهي الدفق.
|
||||
- **أخطاء الشبكة:** تحقق من اتصالك بالإنترنت وحاول مرة أخرى.
|
||||
- **عناوين URL غير صالحة:** تأكد من أن عنوان URL صحيح ومن نظام أساسي مدعوم.
|
||||
- **المحتوى المميز:** يتطلب عضوية YouTube Premium.
|
||||
- **حظر حقوق الطبع والنشر:** تم حظر المحتوى بسبب قيود حقوق الطبع والنشر.
|
||||
- **فصل ملفات الفيديو والصوت بعد التنزيل:** يحدث هذا عندما يكون FFmpeg مفقودًا أو لم يتم اكتشافه. يتطلب YTSage FFmpeg لدمج تدفقات الفيديو والصوت عالية الجودة.
|
||||
- **الحل:** تأكد من تثبيت FFmpeg وإمكانية الوصول إليه في PATH الخاص بنظامك. بالنسبة لمستخدمي Windows، الخيار الأسهل هو تنزيل الملف `YTSage-v<version>-ffmpeg.exe`، والذي يأتي مرفقًا مع FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ تحذير Windows Defender / مضاد الفيروسات
|
||||
|
||||
قد تقوم بعض برامج مكافحة الفيروسات بوضع علامة على الملفات `.exe` على أنها ملفات إيجابية كاذبة. هذا **قيد معروف** للتطبيقات المجمعة.
|
||||
|
||||
**لماذا يحدث هذا:**
|
||||
- يمكن للاستدلالات المضادة للفيروسات أن تخطئ في تعريف الملفات التنفيذية المعبأة على أنها مشبوهة
|
||||
|
||||
** البدائل الآمنة: **
|
||||
- ✅ **استخدم تثبيت النقطة:** `pip install ytsage` (مستحسن)
|
||||
- ✅ **البناء من المصدر**: باتباع هذا [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **أدرج التطبيق في القائمة البيضاء** في برنامج مكافحة الفيروسات لديك
|
||||
|
||||
#### 🍎 macOS: "التطبيق تالف ولا يمكن فتحه"
|
||||
إذا رأيت هذا الخطأ على نظام التشغيل macOS Sonoma أو الإصدارات الأحدث، فستحتاج إلى إزالة سمة العزل.
|
||||
|
||||
1. **افتح الوحدة الطرفية** (يمكنك العثور عليها باستخدام Spotlight).
|
||||
2. **اكتب الأمر التالي** لكن **لا** تضغط على Enter بعد. تأكد من تضمين المساحة في النهاية:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **اسحب الملف `YTSage.app`** من نافذة Finder وأفلته مباشرةً في نافذة الوحدة الطرفية. سيؤدي هذا تلقائيًا إلى لصق مسار الملف الصحيح.
|
||||
4. **اضغط على Enter** لتشغيل الأمر.
|
||||
5. **حاول فتح YTSage.app مرة أخرى.** من المفترض الآن أن يتم تشغيله بشكل صحيح.
|
||||
|
||||
---
|
||||
|
||||
#### **مواقع التكوين (متقدمة)**
|
||||
- **ويندوز:** `%LOCALAPPDATA%\YTSage`
|
||||
- **ماك:** `~/Library/Application Support/YTSage`
|
||||
- **لينكس:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 الراعي
|
||||
|
||||
إذا كان YTSage يوفر عليك الوقت، ففكر في رعاية المشروع. تساعد الرعاية في تغطية وقت التطوير والاختبار عبر الأنظمة الأساسية والتحسينات المستقبلية.
|
||||
|
||||
- رعاة GitHub: https://github.com/sponsors/oop7
|
||||
- رابط الراعي متاح أيضًا مباشرة داخل التطبيق من مربع الحوار "حول".
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 المساهمة
|
||||
|
||||
نحن نرحب بالمساهمات! إليك كيف يمكنك المساعدة:
|
||||
|
||||
1. 🍴 شوكة المستودع
|
||||
2. 🌿 قم بإنشاء فرع الميزات الخاص بك:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 قم بإجراء التغييرات:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 اضغط على الفرع:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 افتح طلب السحب
|
||||
|
||||
### 🌍 المساهمة بالترجمات
|
||||
|
||||
- قم بتحديث ملف README المترجم المطابق (على سبيل المثال `README.es.md`)
|
||||
- حافظ على مزامنة سلاسل التطبيق عن طريق تحرير `ytsage/languages/<code>.json`
|
||||
- إذا كانت لغتك مفقودة، ابدأ من `README.md` وأنشئ `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 هيكل المشروع</summary>
|
||||
|
||||
## YTSage - هيكل المشروع
|
||||
|
||||
يصف هذا المستند بنية المجلد المنظم لـ YTSage.
|
||||
|
||||
### 📁 هيكل المشروع
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ تاريخ النجوم
|
||||
|
||||
<div align="center">
|
||||
|
||||
## تاريخ النجوم
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 الترخيص
|
||||
|
||||
هذا المشروع مرخص بموجب ترخيص MIT - راجع الملف [LICENSE](../LICENSE) للحصول على التفاصيل.
|
||||
|
||||
## 🙏 شكر وتقدير
|
||||
|
||||
<details>
|
||||
<summary>إظهار الشكر والتقدير</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>شكرًا جزيلًا لكل من ساهم في هذا المشروع من خلال فتح مشكلة لاقتراح تحسين أو الإبلاغ عن خطأ.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">المكونات الأساسية</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>تحميل المحرك</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>معالجة الوسائط</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">دينو</a></td>
|
||||
<td>وقت التشغيل للتكامل مع yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">المكتبات والأطر</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>إطار واجهة المستخدم الرسومية</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">الوسادة</a></td>
|
||||
<td>معالجة الصور</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">الطلبات</a></td>
|
||||
<td>طلبات HTTP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">التغليف</a></td>
|
||||
<td>التعامل مع الإصدار والحزمة</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">تخفيض السعر</a></td>
|
||||
<td>عرض تخفيض السعر</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>التسجيل</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">الأصول والمساهمون</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">إشعار جديد 09 من Universfield</a></td>
|
||||
<td>صوت الإشعارات</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">الفيروس185</a></td>
|
||||
<td>مساهم الكود</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️إخلاء المسؤولية
|
||||
|
||||
هذه الأداة للاستخدام الشخصي فقط. يرجى احترام شروط خدمة YouTube وحقوق منشئي المحتوى.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
صُنع باستخدام ❤️ بواسطة [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Ein moderner YouTube-Downloader mit einer sauberen PySide6-Oberfläche.**
|
||||
Laden Sie Videos in beliebiger Qualität herunter, extrahieren Sie Audio, rufen Sie Untertitel ab und mehr.
|
||||
|
||||
### 🌍 README-Sprachen
|
||||
|
||||
Englisch: [EN](../README.md)
|
||||
| Quelle: [AR](README.ar.md)
|
||||
| Deutsch: [DE](README.de.md)
|
||||
| Spanisch: [ES](README.es.md)
|
||||
| Französisch: [FR](README.fr.md)
|
||||
| Quelle: [HI](README.hi.md)
|
||||
| Bahasa Indonesien: [ID](README.id.md)
|
||||
| Italienisch: [IT](README.it.md)
|
||||
| 日本語: [JA](README.ja.md)
|
||||
| Polnisch: [PL](README.pl.md)
|
||||
| Portugiesisch: [PT](README.pt.md)
|
||||
| Russisch: [RU](README.ru.md)
|
||||
| Türkei: [TR](README.tr.md)
|
||||
| Quelle: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Installation</a> •
|
||||
<a href="#features">Funktionen</a> •
|
||||
<a href="#usage">Verwendung</a> •
|
||||
<a href="#screenshots">Screenshots</a> •
|
||||
<a href="#troubleshooting">Fehlerbehebung</a> •
|
||||
<a href="#sponsor">Sponsor</a> •
|
||||
<a href="#contributing">Mitwirken</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ Warum YTSage?
|
||||
|
||||
YTSage wurde für Benutzer entwickelt, die einen **einfachen, aber leistungsstarken YouTube-Downloader** suchen. Im Gegensatz zu anderen Tools bietet es:
|
||||
|
||||
- Eine saubere, moderne PySide6-Schnittstelle
|
||||
- Ein-Klick-Downloads für Video, Audio und Untertitel
|
||||
- Erweiterte Funktionen wie SponsorBlock, Zusammenführen von Untertiteln und Auswahl von Wiedergabelisten
|
||||
- Optionaler generischer Modus für von YT-DLP unterstützte Websites außerhalb von YouTube
|
||||
- Plattformübergreifende Unterstützung und einfache Installation
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Funktionen
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Kernfunktionen | Erweiterte Funktionen | Zusätzliche Funktionen |
|
||||
|----------------------------------|--------------------------|------------------------------------|
|
||||
| 🎥 Tabelle formatieren | 🚫 SponsorBlock-Integration | 🎞️ FPS/HDR-Anzeige |
|
||||
| 🎵 Audioextraktion | 📝 Mehrere Untertitel auswählen und zusammenführen | 🔄 yt-dlp automatisch aktualisieren |
|
||||
| ✨ Einfache Benutzeroberfläche | 💾 Beschreibung und Miniaturansicht speichern | 🛠️ FFmpeg/yt-dlp/Deno-Erkennung |
|
||||
| 📋 Playlist-Unterstützung und -Auswahl | 🚀 Geschwindigkeitsbegrenzer | ⚙️ Benutzerdefinierte Befehle |
|
||||
| 📑 Kapitel einbetten | ✂️ Videoabschnitte zuschneiden | 🍪 Mit Cookies anmelden |
|
||||
| 📜 Download-Verlauf | 🔄 Kanalauswahl freigeben | 🌐 Proxy-Unterstützung |
|
||||
| 🎚️ Audioformatkonvertierung | 🎬 Videoformateinstellungen | 🆙 Integrierte Updater-Registerkarte |
|
||||
| 🌍 Allgemeiner Modus | 🔊 Audio-Normalisierung (EBU R128) | 🌍 Lokalisierung in 14 Sprachen |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Installation
|
||||
|
||||
### ⚡ Schnellinstallation (empfohlen)
|
||||
|
||||
Installieren Sie YTSage von PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄Aktualisieren Sie eine vorhandene Installation</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Starten Sie dann die App:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Vorgefertigte ausführbare Dateien
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Windows
|
||||
|
||||
| Formatieren | Beschreibung |
|
||||
|--------|-------------|
|
||||
|  | Standardinstallationsprogramm |
|
||||
|  | Mit FFmpeg gebündelt |
|
||||
|  | Portable Version, keine Installation erforderlich |
|
||||
|  | Tragbar mit FFmpeg, gezippt |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Installationsschritte</summary>
|
||||
|
||||
1. **EXE-Installationsprogramm (`.exe`)**: Doppelklicken Sie auf die Datei und folgen Sie dem Setup-Assistenten.
|
||||
2. **Portable Version (`.zip`)**: Extrahieren Sie das Archiv an den gewünschten Speicherort und führen Sie `ytsage.exe` aus.
|
||||
3. **FFmpeg gebündelt**: Wählen Sie die gebündelten FFmpeg-Versionen, wenn Sie FFmpeg nicht auf Ihrem System installiert haben.
|
||||
</details>
|
||||
|
||||
#### 🐧 Linux
|
||||
|
||||
| Formatieren | Beschreibung |
|
||||
|--------|-------------|
|
||||
|  | Debian-Paket |
|
||||
|  | AppImage, tragbar |
|
||||
|  | RPM-Paket |
|
||||
|  | Flatpak-Bundle |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Installationsschritte</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **AppImage (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: Folgen Sie den Anweisungen auf Flathub oder führen Sie Folgendes aus:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
| Formatieren | Beschreibung |
|
||||
|--------|-------------|
|
||||
|  | Gezippte Anwendung für Apple Silicon |
|
||||
|  | Disk-Image-Installationsprogramm für Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Installationsschritte</summary>
|
||||
|
||||
- **DMG-Installationsprogramm (`.dmg`)**: Doppelklicken Sie zum Mounten und ziehen Sie dann `YTSage.app` in Ihren Anwendungsordner.
|
||||
- **App-Archiv (`.zip`)**: Extrahieren Sie die ZIP-Datei und verschieben Sie `YTSage.app` in Ihren Anwendungsordner.
|
||||
|
||||
*Hinweis: Wenn Sie auf den Fehler „App ist beschädigt“ stoßen, sehen Sie sich das [macOS troubleshooting section](#troubleshooting) unten an.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Manuelle Installation von der Quelle</summary>
|
||||
|
||||
### 1. Klonen Sie das Repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Abhängigkeiten installieren
|
||||
|
||||
#### ⚡ Mit UV
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Oder mit Standard-Pip
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Führen Sie die Anwendung aus
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Screenshots
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Download-Einstellungen</em></td>
|
||||
<td align="center"><em>Playlist-Download</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Audioformat</em></td>
|
||||
<td align="center"><em>Benutzerdefinierte Optionen</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Verwendung
|
||||
|
||||
<details>
|
||||
<summary>🎯 Grundlegende Verwendung</summary>
|
||||
|
||||
1. **YTSage starten**
|
||||
2. **YouTube-URL einfügen** (oder verwenden Sie die Schaltfläche „URL einfügen“)
|
||||
3. **Klicken Sie auf „Analysieren“**
|
||||
4. **Format auswählen:**
|
||||
- `Video` für Video-Downloads
|
||||
- `Audio Only` zur Audioextraktion
|
||||
5. **Optionen wählen:**
|
||||
- Untertitel aktivieren und Sprache auswählen
|
||||
- Untertitelzusammenführung aktivieren
|
||||
- Miniaturansicht speichern
|
||||
- Entfernen Sie Sponsorsegmente
|
||||
- Beschreibung speichern
|
||||
- Kapitel einbetten
|
||||
6. **Ausgabeverzeichnis auswählen**
|
||||
7. **Klicken Sie auf „Herunterladen“**
|
||||
|
||||
> 💡 Das Standard-Download-Verzeichnis ist der Ordner „Downloads“ des Benutzers.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Playlist-Download</summary>
|
||||
|
||||
1. **Playlist-URL einfügen**
|
||||
2. **Klicken Sie auf „Analysieren“**
|
||||
3. **Wählen Sie Videos aus der Playlist-Auswahl aus (optional, standardmäßig alle)**
|
||||
4. **Wählen Sie das gewünschte Format/die gewünschte Qualität**
|
||||
5. **Klicken Sie auf „Herunterladen“**
|
||||
|
||||
> 💡 Die Anwendung verwaltet die Download-Warteschlange automatisch
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Allgemeiner Modus für Nicht-YouTube-Websites</summary>
|
||||
|
||||
Verwenden Sie den generischen Modus, wenn Sie möchten, dass YTSage URLs von Websites akzeptiert, die von yt-dlp unterstützt werden, wie z. B. Dailymotion, CBC Gem, TikTok und andere.
|
||||
|
||||
So verwenden Sie es:
|
||||
|
||||
1. Öffnen Sie `Download Settings`.
|
||||
2. Aktivieren Sie `Generic Mode`.
|
||||
3. Fügen Sie eine unterstützte Nicht-YouTube-Video- oder Playlist-URL ein.
|
||||
4. Klicken Sie auf `Analyze`.
|
||||
5. Wählen Sie ein Format und laden Sie es wie gewohnt herunter.
|
||||
|
||||
Hinweise:
|
||||
|
||||
- Der generische Modus ändert nur die URL-Validierung innerhalb von YTSage. Die Zielsite muss weiterhin von Ihrer installierten yt-dlp-Version unterstützt werden.
|
||||
- Einige Websites erfordern je nach Extraktor Cookies, eine Anmeldesitzung, einen Proxy oder zusätzliche YT-DLP-Argumente.
|
||||
- Wenn eine Site ausfällt, aktualisieren Sie yt-dlp zunächst über die Registerkarte des integrierten Updaters, bevor Sie das Problem melden.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Medien- und Download-Optionen</summary>
|
||||
|
||||
- **Untertiteloptionen:** Sprachen filtern und Untertitel in die Videodatei einbetten
|
||||
- **Untertitel zusammenführen:** Untertitel für fest codierte Untertitel in die Videodatei einbinden
|
||||
- **Beschreibung speichern:** Speichern Sie die Videobeschreibung als Textdatei
|
||||
- **Miniaturansicht speichern:** Speichern Sie die Miniaturansicht des Videos als Bilddatei
|
||||
- **Kapitel einbetten:** Betten Sie Kapitelmarkierungen als Metadaten für kompatible Videoplayer ein
|
||||
- **Sponsorensegmente entfernen:** Entfernen Sie Sponsorsegmente aus dem Video mit SponsorBlock
|
||||
- **Video zuschneiden:** Laden Sie nur bestimmte Teile eines Videos herunter, indem Sie Zeitbereiche im Format `HH:MM:SS` angeben
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Ausgabe- und Dateieinstellungen</summary>
|
||||
|
||||
- **Geschwindigkeitsbegrenzer:** Begrenzen Sie die Download-Geschwindigkeit, zum Beispiel `500K` auf 500 KB/s
|
||||
- **Download-Pfad speichern:** Speichern Sie den Standard-Download-Pfad für zukünftige Downloads. Verfügbar unter **Download-Einstellungen → Download-Pfad**.
|
||||
- **Format des Ausgabedateinamens:** Passen Sie das Format des Ausgabedateinamens mithilfe von Variablen wie `%(title)s`, `%(uploader)s` und `%(resolution)s` an. Verfügbar unter **Download-Einstellungen → Dateinamenformat**.
|
||||
- **Ausgabeformat erzwingen:** Video-Downloads in ein bestimmtes Containerformat wie `mp4`, `webm` oder `mkv` erzwingen. Verfügbar unter **Download-Einstellungen → Ausgabeformat-Einstellungen**.
|
||||
- **Audioformatkonvertierung:** Konvertieren Sie reine Audio-Downloads in bevorzugte Formate wie `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` oder `Best`. Verfügbar unter **Download-Einstellungen → Audioformat-Einstellungen**.
|
||||
- **Audio-Normalisierung:** Standardisieren Sie die Lautstärke für reine Audio-Downloads mit EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Zugang und Netzwerk</summary>
|
||||
|
||||
- **Mit Cookies anmelden:** Melden Sie sich mit Cookies bei YouTube an, um auf private Inhalte zuzugreifen.
|
||||
So verwenden Sie es:
|
||||
1. **Empfohlen:** Verwenden Sie die integrierte Option „Extract cookies from browser“ in der App und wählen Sie dann Ihren Browser und optional ein Profil aus.
|
||||
2. Alternativ können Sie Cookies auch manuell extrahieren:
|
||||
a. Exportieren Sie Cookies aus Ihrem Browser mit einer Erweiterung wie [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
b. Kopieren Sie die Cookies im Netscape-Format
|
||||
c. Erstellen Sie eine Datei mit dem Namen `cookies.txt` und fügen Sie die Cookies darin ein
|
||||
d. Wählen Sie in der App die Datei „cookies.txt“ aus
|
||||
- **Proxy-Unterstützung:** Verwenden Sie einen Proxy-Server für Downloads, zum Beispiel `http://<proxy-server>:<port>`
|
||||
- **Generischer Modus:** Ermöglicht YTSage die Analyse und den Download von Nicht-YouTube-Websites, die von yt-dlp unterstützt werden. Aktivieren Sie es über **Download-Einstellungen → Allgemeiner Modus**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Werkzeuge und Wartung</summary>
|
||||
|
||||
- **Benutzerdefinierte Befehle:** Greifen Sie über Befehlszeilenargumente auf erweiterte yt-dlp-Funktionen zu
|
||||
- **Registerkarte „Updater“:** Integrierte Update-Tools von einem Ort aus in den benutzerdefinierten Optionen verwalten:
|
||||
- **yt-dlp-Updates:** Suchen Sie nach Updates und wechseln Sie zwischen den Veröffentlichungskanälen Stable und Nightly
|
||||
- **FFmpeg-Versionsprüfer:** Überprüfen Sie Ihre FFmpeg-Version und öffnen Sie die Installationsanleitungen
|
||||
- **Deno-Updates:** Überprüfen und aktualisieren Sie die Deno-Laufzeitumgebung
|
||||
- **FFmpeg/yt-dlp/Deno-Erkennung:** Erkennt automatisch FFmpeg-, yt-dlp- und Deno-Pfade und -Versionen im Info-Dialog.
|
||||
- **Download-Verlauf:** Zeigen Sie frühere Downloads mit Miniaturansichten und Status über die Schaltfläche **Verlauf** an.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Lokalisierung</summary>
|
||||
|
||||
YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie Ihre bevorzugte Sprache unter **Benutzerdefinierte Optionen → Sprache** aus.
|
||||
|
||||
### Unterstützte Sprachen
|
||||
|
||||
| Sprache | Code | Sprache | Code |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Englisch | `en` | 🇪🇸 Spanisch | `es` |
|
||||
| 🇸🇦 Arabisch | `ar` | 🇫🇷 Französisch | `fr` |
|
||||
| 🇩🇪 Deutsch | `de` | 🇮🇳 Hindi | `hi` |
|
||||
| 🇮🇩 Indonesisch | `id` | 🇮🇹 Italienisch | `it` |
|
||||
| 🇯🇵 Japanisch | `ja` | 🇵🇱 Polnisch | `pl` |
|
||||
| 🇧🇷 Portugiesisch | `pt` | 🇷🇺 Russisch | `ru` |
|
||||
| 🇹🇷 Türkisch | `tr` | 🇨🇳 Chinesisch | `zh` |
|
||||
|
||||
### README-Übersetzungen
|
||||
|
||||
| Sprache | Datei | Sprache | Datei |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Englisch | [README.md](../README.md) | 🇪🇸 Spanisch | [README.es.md](README.es.md)
|
||||
| 🇸🇦 Arabisch | [README.ar.md](README.ar.md) | 🇫🇷 Französisch | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 Deutsch | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Indonesisch | [README.id.md](README.id.md) | 🇮🇹 Italienisch | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 Japanisch | [README.ja.md](README.ja.md) | 🇵🇱 Polnisch | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Portugiesisch | [README.pt.md](README.pt.md) | 🇷🇺 Russisch | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Türkisch | [README.tr.md](README.tr.md) | 🇨🇳 Chinesisch | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Möchten Sie eine Übersetzung beisteuern?** Schauen Sie sich den Abschnitt [Contributing](#contributing) an, um uns beim Hinzufügen weiterer Sprachen zu helfen!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Fehlerbehebung
|
||||
|
||||
<details>
|
||||
<summary>Klicken Sie hier, um häufige Probleme und Lösungen anzuzeigen</summary>
|
||||
|
||||
- **Formattabelle wird nicht angezeigt:** Aktualisieren Sie yt-dlp auf die neueste Version und wechseln Sie jede Nacht zu yt-dlp.
|
||||
- **Download schlägt fehl:** Überprüfen Sie Ihre Internetverbindung und stellen Sie sicher, dass das Video verfügbar ist.
|
||||
- **Spezifische Downloadfehler:**
|
||||
- **Private Videos:** Verwenden Sie die Cookie-Authentifizierung, um auf private Inhalte zuzugreifen.
|
||||
- **Inhalte mit Altersbeschränkung:** Melden Sie sich bei Ihrem YouTube-Konto an, um Videos mit Altersbeschränkung anzusehen.
|
||||
- **Geoblockierte Videos:** Erwägen Sie die Verwendung eines VPN, um regionale Beschränkungen zu umgehen.
|
||||
- **Entfernte/gelöschte Videos:** Das Video ist nicht mehr auf YouTube verfügbar.
|
||||
- **Live-Streams:** Live-Streams können nicht heruntergeladen werden; Warten Sie, bis der Stream beendet ist.
|
||||
- **Netzwerkfehler:** Überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.
|
||||
- **Ungültige URLs:** Stellen Sie sicher, dass die URL korrekt ist und von einer unterstützten Plattform stammt.
|
||||
- **Premium-Inhalte:** Erfordert eine YouTube Premium-Mitgliedschaft.
|
||||
- **Urheberrechtliche Sperren:** Der Inhalt ist aufgrund von Urheberrechtsbeschränkungen gesperrt.
|
||||
- **Video- und Audiodateien nach dem Download trennen:** Dies passiert, wenn FFmpeg fehlt oder nicht erkannt wird. YTSage benötigt FFmpeg, um hochwertige Video- und Audiostreams zusammenzuführen.
|
||||
- **Lösung:** Stellen Sie sicher, dass FFmpeg im PATH Ihres Systems installiert und zugänglich ist. Für Windows-Benutzer ist es am einfachsten, die Datei „YTSage-v<version>-ffmpeg.exe“ herunterzuladen, die im Lieferumfang von FFmpeg enthalten ist.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Windows Defender/Antivirus-Warnung
|
||||
|
||||
Einige Antivirenprogramme kennzeichnen die „.exe“-Dateien möglicherweise als falsch positive Ergebnisse. Dies ist eine **bekannte Einschränkung** von Paketanwendungen.
|
||||
|
||||
**Warum das passiert:**
|
||||
– Antivirus-Heuristiken können gepackte ausführbare Dateien fälschlicherweise als verdächtig identifizieren
|
||||
|
||||
**Sichere Alternativen:**
|
||||
- ✅ **Pip-Installation verwenden:** `pip install ytsage` (empfohlen)
|
||||
- ✅ **Aus dem Quellcode erstellen**: Folgen Sie diesem [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Setzen Sie die Anwendung in Ihre Antivirensoftware auf die Whitelist
|
||||
|
||||
#### 🍎 macOS: „App ist beschädigt und kann nicht geöffnet werden“
|
||||
Wenn dieser Fehler unter macOS Sonoma oder neuer auftritt, müssen Sie das Quarantäneattribut entfernen.
|
||||
|
||||
1. **Öffnen Sie das Terminal** (Sie können es mit Spotlight finden).
|
||||
2. **Geben Sie den folgenden Befehl ein**, drücken Sie aber noch nicht die Eingabetaste. Achten Sie darauf, das Leerzeichen am Ende einzufügen:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Ziehen Sie die Datei „YTSage.app“ aus Ihrem Finder-Fenster und legen Sie sie direkt im Terminalfenster ab. Dadurch wird automatisch der richtige Dateipfad eingefügt.
|
||||
4. **Drücken Sie die Eingabetaste**, um den Befehl auszuführen.
|
||||
5. **Versuchen Sie erneut, YTSage.app zu öffnen.** Es sollte jetzt korrekt starten.
|
||||
|
||||
---
|
||||
|
||||
#### **Konfigurationsorte (Erweitert)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Sponsor
|
||||
|
||||
Wenn Sie mit YTSage Zeit sparen, sollten Sie das Projekt sponsern. Durch Sponsoring können Entwicklungszeit, plattformübergreifende Tests und zukünftige Verbesserungen abgedeckt werden.
|
||||
|
||||
- GitHub-Sponsoren: https://github.com/sponsors/oop7
|
||||
- Der Sponsor-Link ist auch direkt in der App im Info-Dialog verfügbar.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Mitwirken
|
||||
|
||||
Wir freuen uns über Beiträge! So können Sie helfen:
|
||||
|
||||
1. 🍴 Forken Sie das Repository
|
||||
2. 🌿 Erstellen Sie Ihren Feature-Branch:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Übernehmen Sie Ihre Änderungen:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Zur Filiale schieben:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Öffnen Sie eine Pull-Anfrage
|
||||
|
||||
### 🌍 Mitwirkende Übersetzungen
|
||||
|
||||
- Aktualisieren Sie die passende lokalisierte README-Datei (zum Beispiel `README.es.md`)
|
||||
- Halten Sie App-Strings synchron, indem Sie `ytsage/languages/<code>.json` bearbeiten
|
||||
- Wenn Ihre Sprache fehlt, beginnen Sie mit `README.md` und erstellen Sie `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Projektstruktur</summary>
|
||||
|
||||
## YTSage – Projektstruktur
|
||||
|
||||
Dieses Dokument beschreibt die organisierte Ordnerstruktur von YTSage.
|
||||
|
||||
### 📁 Projektstruktur
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Sterngeschichte
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Sterngeschichte
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Lizenz
|
||||
|
||||
Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der Datei „LICENSE“.
|
||||
|
||||
## 🙏 Danksagungen
|
||||
|
||||
<details>
|
||||
<summary>Danksagungen anzeigen</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Ein herzliches Dankeschön an alle, die zu diesem Projekt beigetragen haben, indem sie ein Problem geöffnet haben, um eine Verbesserung vorzuschlagen oder einen Fehler zu melden.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Kernkomponenten</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Download Engine</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Medienverarbeitung</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Laufzeit für die Integration mit yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Bibliotheken und Frameworks</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>GUI-Framework</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Kissen</a></td>
|
||||
<td>Bildverarbeitung</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">Anfragen</a></td>
|
||||
<td>HTTP-Anfragen</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">Verpackung</a></td>
|
||||
<td>Versions- und Pakethandhabung</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">Abschlag</a></td>
|
||||
<td>Markdown-Rendering</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Protokollierung</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Vermögenswerte und Mitwirkende</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Neue Benachrichtigung 09 von Universfield</a></td>
|
||||
<td>Benachrichtigungston</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Code-Mitwirkender</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Haftungsausschluss
|
||||
|
||||
Dieses Tool ist nur für den persönlichen Gebrauch bestimmt. Bitte respektieren Sie die Nutzungsbedingungen und die Rechte der Inhaltsersteller von YouTube.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Hergestellt mit ❤️ von [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Un descargador de YouTube moderno con una interfaz PySide6 limpia.**
|
||||
Descargue videos en cualquier calidad, extraiga audio, obtenga subtítulos y más.
|
||||
|
||||
### 🌍 LÉAME Idiomas
|
||||
|
||||
Inglés: [EN](../README.md)
|
||||
| العربية: [AR](README.ar.md)
|
||||
| Alemán: [DE](README.de.md)
|
||||
| Español: [ES](README.es.md)
|
||||
| Francés: [FR](README.fr.md)
|
||||
| हिन्दी: [HI](README.hi.md)
|
||||
| Bahasa Indonesia: [ID](README.id.md)
|
||||
| Italiano: [IT](README.it.md)
|
||||
| Traducción: [JA](README.ja.md)
|
||||
| Polonia: [PL](README.pl.md)
|
||||
| Português: [PT](README.pt.md)
|
||||
| Ruso: [RU](README.ru.md)
|
||||
| Turco: [TR](README.tr.md)
|
||||
| Traducción: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Instalación</a> •
|
||||
<a href="#features">Características</a> •
|
||||
<a href="#usage">Uso</a> •
|
||||
<a href="#screenshots">Capturas de pantalla</a> •
|
||||
<a href="#troubleshooting">Solución de problemas</a> •
|
||||
<a href="#sponsor">Patrocinador</a> •
|
||||
<a href="#contributing">Contribuyendo</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ ¿Por qué YTSage?
|
||||
|
||||
YTSage está diseñado para usuarios que desean un **descargador de YouTube simple pero potente**. A diferencia de otras herramientas, ofrece:
|
||||
|
||||
- Una interfaz PySide6 limpia y moderna
|
||||
- Descargas con un solo clic de vídeo, audio y subtítulos.
|
||||
- Funciones avanzadas como SponsorBlock, combinación de subtítulos y selección de listas de reproducción
|
||||
- Modo genérico opcional para sitios compatibles con yt-dlp más allá de YouTube
|
||||
- Soporte multiplataforma y fácil instalación.
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Características
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Características principales | Funciones avanzadas | Funciones adicionales |
|
||||
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||
| 🎥 Tabla de formato | 🚫 Integración de SponsorBlock | 🎞️ Pantalla FPS/HDR |
|
||||
| 🎵 Extracción de audio | 📝 Seleccionar y fusionar múltiples subtítulos | 🔄 Actualización automática yt-dlp |
|
||||
| ✨ Interfaz de usuario sencilla | 💾 Guardar descripción y miniatura | 🛠️ FFmpeg/yt-dlp/Detección de Deno |
|
||||
| 📋 Soporte y selector de listas de reproducción | 🚀 Limitador de velocidad | ⚙️ Comandos personalizados |
|
||||
| 📑 Insertar capítulos | ✂️ Recortar secciones de video | 🍪 Iniciar sesión con cookies |
|
||||
| 📜 Historial de descargas | 🔄 Selección de canal de lanzamiento | 🌐 Soporte de proxy |
|
||||
| 🎚️ Conversión de formato de audio | 🎬 Configuración de formato de vídeo | 🆙 Pestaña de actualización incorporada |
|
||||
| 🌍 Modo Genérico | 🔊 Normalización de audio (EBU R128) | 🌍 Localización en 14 idiomas |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Instalación
|
||||
|
||||
### ⚡ Instalación rápida (recomendado)
|
||||
|
||||
Instale YTSage desde PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Actualizar una instalación existente</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Luego inicie la aplicación:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Ejecutables prediseñados
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟Ventanas
|
||||
|
||||
| Formato | Descripción |
|
||||
|--------|-------------|
|
||||
|  | Instalador estándar |
|
||||
|  | Con FFmpeg incluido |
|
||||
|  | Versión portátil, no requiere instalación |
|
||||
|  | Portátil con FFmpeg, con cremallera |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Pasos de instalación</summary>
|
||||
|
||||
1. **Instalador EXE (`.exe`)**: haga doble clic en el archivo y siga el asistente de configuración.
|
||||
2. **Versión portátil (`.zip`)**: extraiga el archivo a la ubicación deseada y ejecute `ytsage.exe`.
|
||||
3. **FFmpeg incluido**: elija las versiones incluidas de FFmpeg si no tiene FFmpeg instalado en su sistema.
|
||||
</details>
|
||||
|
||||
#### 🐧Linux
|
||||
|
||||
| Formato | Descripción |
|
||||
|--------|-------------|
|
||||
|  | Paquete Debian |
|
||||
|  | AppImage, portátil |
|
||||
|  | Paquete RPM |
|
||||
|  | Paquete plano |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Pasos de instalación</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **Imagen de aplicación (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: siga las instrucciones en Flathub o ejecute:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎macOS
|
||||
|
||||
| Formato | Descripción |
|
||||
|--------|-------------|
|
||||
|  | Aplicación comprimida para Apple Silicon |
|
||||
|  | Instalador de imágenes de disco para Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Pasos de instalación</summary>
|
||||
|
||||
- **Instalador de DMG (`.dmg`)**: haga doble clic para montar, luego arrastre `YTSage.app` a su carpeta de Aplicaciones.
|
||||
- **Archivo de aplicaciones (`.zip`)**: extrae el zip y mueve `YTSage.app` a tu carpeta de Aplicaciones.
|
||||
|
||||
*Nota: Si encuentra el error "La aplicación está dañada", consulte el [macOS troubleshooting section](#troubleshooting) a continuación.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Instalación manual desde la fuente</summary>
|
||||
|
||||
### 1. Clonar el repositorio
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Instalar dependencias
|
||||
|
||||
#### ⚡ Con ultravioleta
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 O con pip estándar
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Ejecute la aplicación
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Capturas de pantalla
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Configuración de descarga</em></td>
|
||||
<td align="center"><em>Descargar lista de reproducción</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Formato de audio</em></td>
|
||||
<td align="center"><em>Opciones personalizadas</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Uso
|
||||
|
||||
<details>
|
||||
<summary>🎯 Uso básico</summary>
|
||||
|
||||
1. **Inicie YTSage**
|
||||
2. **Pegue la URL de YouTube** (o use el botón "Pegar URL")
|
||||
3. **Haga clic en "Analizar"**
|
||||
4. **Seleccione formato:**
|
||||
- `Video` para descargas de videos
|
||||
- `Audio Only` para extracción de audio
|
||||
5. **Elija Opciones:**
|
||||
- Habilitar subtítulos y seleccionar idioma.
|
||||
- Habilitar la combinación de subtítulos
|
||||
- Guardar miniatura
|
||||
- Eliminar segmentos de patrocinadores
|
||||
- Guardar descripción
|
||||
- Insertar capítulos
|
||||
6. **Seleccione el directorio de salida**
|
||||
7. **Haga clic en "Descargar"**
|
||||
|
||||
> 💡 El directorio de descarga predeterminado es la carpeta "Descargas" del usuario.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Descarga de lista de reproducción</summary>
|
||||
|
||||
1. **Pegar URL de la lista de reproducción**
|
||||
2. **Haga clic en "Analizar"**
|
||||
3. **Seleccione videos del selector de lista de reproducción (opcional, el valor predeterminado es todos)**
|
||||
4. **Elija el formato/calidad deseado**
|
||||
5. **Haga clic en "Descargar"**
|
||||
|
||||
> 💡 La aplicación maneja automáticamente la cola de descarga
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Modo genérico para sitios que no son de YouTube</summary>
|
||||
|
||||
Utilice el modo genérico cuando desee que YTSage acepte URL de sitios compatibles con yt-dlp, como Dailymotion, CBC Gem, TikTok y otros.
|
||||
|
||||
Cómo usarlo:
|
||||
|
||||
1. Abra `Download Settings`.
|
||||
2. Habilite `Generic Mode`.
|
||||
3. Pegue una URL de lista de reproducción o video compatible que no sea de YouTube.
|
||||
4. Haga clic en `Analyze`.
|
||||
5. Elija un formato y descárguelo como de costumbre.
|
||||
|
||||
Notas:
|
||||
|
||||
- El modo genérico solo cambia la validación de URL dentro de YTSage. El sitio de destino aún debe ser compatible con la versión de yt-dlp instalada.
|
||||
- Algunos sitios requieren cookies, una sesión de inicio de sesión, un proxy o argumentos yt-dlp adicionales según el extractor.
|
||||
- Si un sitio falla, actualice primero yt-dlp desde la pestaña de actualización integrada antes de informar el problema.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Opciones de descarga y medios</summary>
|
||||
|
||||
- **Opciones de subtítulos:** Filtrar idiomas e incrustar subtítulos en el archivo de video
|
||||
- **Combinación de subtítulos:** Combina subtítulos en el archivo de video para obtener subtítulos codificados
|
||||
- **Guardar descripción:** Guarde la descripción del video como un archivo de texto.
|
||||
- **Guardar miniatura:** Guarda la miniatura del vídeo como un archivo de imagen.
|
||||
- **Incrustar capítulos:** Incrustar marcadores de capítulos como metadatos para reproductores de video compatibles
|
||||
- **Eliminar segmentos de patrocinador:** Elimina segmentos de patrocinador del video usando SponsorBlock
|
||||
- **Recortar video:** Descargue solo partes específicas de un video especificando rangos de tiempo en formato `HH:MM:SS`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Configuración de archivos y salida</summary>
|
||||
|
||||
- **Limitador de velocidad:** Limita la velocidad de descarga, por ejemplo `500K` a 500 KB/s
|
||||
- **Guardar ruta de descarga:** Guarde la ruta de descarga predeterminada para futuras descargas. Disponible en **Configuración de descarga → Ruta de descarga**.
|
||||
- **Formato de nombre de archivo de salida:** Personalice el formato de nombre de archivo de salida usando variables como `%(title)s`, `%(uploader)s` y `%(resolution)s`. Disponible en **Configuración de descarga → Formato de nombre de archivo**.
|
||||
- **Forzar formato de salida:** Fuerza las descargas de videos en un formato contenedor específico como `mp4`, `webm` o `mkv`. Disponible en **Configuración de descarga → Configuración de formato de salida**.
|
||||
- **Conversión de formato de audio:** Convierta descargas de solo audio a formatos preferidos como `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` o `Best`. Disponible en **Configuración de descarga → Configuración de formato de audio**.
|
||||
- **Normalización de audio:** Estandarice el volumen para descargas de solo audio usando EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Acceso y Red</summary>
|
||||
|
||||
- **Iniciar sesión con cookies:** Inicie sesión en YouTube utilizando cookies para acceder a contenido privado.
|
||||
Cómo usarlo:
|
||||
1. **Recomendado:** Utilice la opción `Extract cookies from browser` incorporada en la aplicación, luego seleccione su navegador y, opcionalmente, un perfil.
|
||||
2. Alternativamente, extraiga las cookies manualmente:
|
||||
un. Exporte cookies desde su navegador usando una extensión como [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
B. Copiar las cookies en formato Netscape
|
||||
c. Cree un archivo llamado `cookies.txt` y pegue las cookies en él
|
||||
d. Seleccione el archivo `cookies.txt` en la aplicación
|
||||
- **Soporte de proxy:** Utilice un servidor proxy para descargas, por ejemplo `http://<proxy-server>:<port>`
|
||||
- **Modo genérico:** Permita que YTSage analice y descargue desde sitios que no sean de YouTube compatibles con yt-dlp. Habilítelo desde **Configuración de descarga → Modo genérico**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Herramientas y Mantenimiento</summary>
|
||||
|
||||
- **Comandos personalizados:** Acceda a funciones avanzadas de yt-dlp a través de argumentos de línea de comando
|
||||
- **Pestaña Actualizador:** Administre las herramientas de actualización integradas desde un solo lugar en Opciones personalizadas:
|
||||
- **Actualizaciones de yt-dlp:** Busque actualizaciones y cambie entre los canales de lanzamiento estable y nocturno
|
||||
- **Comprobador de versiones de FFmpeg:** Verifique su versión de FFmpeg y abra las guías de instalación
|
||||
- **Actualizaciones de Deno:** Verifique y actualice el tiempo de ejecución de Deno
|
||||
- **Detección de FFmpeg/yt-dlp/Deno:** Detecta automáticamente las rutas y versiones de FFmpeg, yt-dlp y Deno desde el cuadro de diálogo Acerca de.
|
||||
- **Historial de descargas:** Vea descargas anteriores con miniaturas y estados desde el botón **Historial**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Localización</summary>
|
||||
|
||||
YTSage admite **14 idiomas** para accesibilidad mundial. Seleccione su idioma preferido en **Opciones personalizadas → Idioma**.
|
||||
|
||||
### Idiomas admitidos
|
||||
|
||||
| Idioma | Código | Idioma | Código |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Inglés | `en` | 🇪🇸 Español | `es` |
|
||||
| 🇸🇦 Árabe | `ar` | 🇫🇷 Francés | `fr` |
|
||||
| 🇩🇪 Alemán | `de` | 🇮🇳 hindi | `hi` |
|
||||
| 🇮🇩 Indonesio | `id` | 🇮🇹 Italiano | `it` |
|
||||
| 🇯🇵 Japonés | `ja` | 🇵🇱 Polaco | `pl` |
|
||||
| 🇧🇷 Portugués | `pt` | 🇷🇺 Ruso | `ru` |
|
||||
| 🇹🇷 Turco | `tr` | 🇨🇳 Chino | `zh` |
|
||||
|
||||
### Léame Traducciones
|
||||
|
||||
| Idioma | Archivo | Idioma | Archivo |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Inglés | [README.md](../README.md) | 🇪🇸 Español | [README.es.md](README.es.md)
|
||||
| 🇸🇦 Árabe | [README.ar.md](README.ar.md) | 🇫🇷 Francés | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 Alemán | [README.de.md](README.de.md) | 🇮🇳 hindi | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Indonesio | [README.id.md](README.id.md) | 🇮🇹 Italiano | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 Japonés | [README.ja.md](README.ja.md) | 🇵🇱 Polaco | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Portugués | [README.pt.md](README.pt.md) | 🇷🇺 Ruso | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Turco | [README.tr.md](README.tr.md) | 🇨🇳 Chino | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **¿Quieres contribuir con una traducción?** ¡Consulta la sección [Contributing](#contributing) para ayudarnos a agregar más idiomas!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Solución de problemas
|
||||
|
||||
<details>
|
||||
<summary>Haga clic para ver problemas y soluciones comunes</summary>
|
||||
|
||||
- **La tabla de formato no se muestra:** Actualice yt-dlp a la última versión y cambie a yt-dlp todas las noches.
|
||||
- **La descarga falla:** Verifique su conexión a Internet y asegúrese de que el video esté disponible.
|
||||
- **Errores de descarga específicos:**
|
||||
- **Vídeos privados:** Utilice la autenticación de cookies para acceder a contenido privado.
|
||||
- **Contenido restringido por edad:** Inicie sesión en su cuenta de YouTube para ver videos restringidos por edad.
|
||||
- **Videos bloqueados geográficamente:** Considere usar una VPN para evitar las restricciones regionales.
|
||||
- **Videos eliminados/eliminados:** El video ya no está disponible en YouTube.
|
||||
- **Transmisiones en vivo:** Las transmisiones en vivo no se pueden descargar; espera a que termine la transmisión.
|
||||
- **Errores de red:** Verifica tu conexión a Internet y vuelve a intentarlo.
|
||||
- **URL no válidas:** Asegúrese de que la URL sea correcta y provenga de una plataforma compatible.
|
||||
- **Contenido premium:** Requiere membresía de YouTube Premium.
|
||||
- **Bloqueos de derechos de autor:** El contenido está bloqueado debido a restricciones de derechos de autor.
|
||||
- **Separar archivos de video y audio después de la descarga:** Esto sucede cuando falta FFmpeg o no se detecta. YTSage requiere FFmpeg para fusionar transmisiones de audio y video de alta calidad.
|
||||
- **Solución:** Asegúrese de que FFmpeg esté instalado y sea accesible en la RUTA de su sistema. Para los usuarios de Windows, la opción más sencilla es descargar el archivo `YTSage-v<version>-ffmpeg.exe`, que viene incluido con FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Advertencia de Windows Defender/Antivirus
|
||||
|
||||
Algunos programas antivirus pueden marcar los archivos `.exe` como falsos positivos. Esta es una **limitación conocida** de las aplicaciones empaquetadas.
|
||||
|
||||
**Por qué sucede esto:**
|
||||
- La heurística antivirus puede identificar erróneamente ejecutables empaquetados como sospechosos.
|
||||
|
||||
**Alternativas seguras:**
|
||||
- ✅ **Usar instalación de pip:** `pip install ytsage` (recomendado)
|
||||
- ✅ **Construir desde la fuente**: siguiendo esto [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Incluye la aplicación en la lista blanca** en tu software antivirus
|
||||
|
||||
#### 🍎 macOS: "La aplicación está dañada y no se puede abrir"
|
||||
Si ve este error en macOS Sonoma o posterior, debe eliminar el atributo de cuarentena.
|
||||
|
||||
1. **Abrir Terminal** (puedes encontrarlo usando Spotlight).
|
||||
2. **Escriba el siguiente comando** pero **no** presione Entrar todavía. Asegúrate de incluir el espacio al final:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Arrastre el archivo `YTSage.app`** desde la ventana de su Finder y suéltelo directamente en la ventana de Terminal. Esto pegará automáticamente la ruta del archivo correcta.
|
||||
4. **Presione Entrar** para ejecutar el comando.
|
||||
5. **Intenta abrir YTSage.app nuevamente.** Ahora debería iniciarse correctamente.
|
||||
|
||||
---
|
||||
|
||||
#### **Ubicaciones de configuración (avanzada)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Patrocinador
|
||||
|
||||
Si YTSage le ahorra tiempo, considere patrocinar el proyecto. El patrocinio ayuda a cubrir el tiempo de desarrollo, las pruebas en todas las plataformas y las mejoras futuras.
|
||||
|
||||
- Patrocinadores de GitHub: https://github.com/sponsors/oop7
|
||||
- El enlace del patrocinador también está disponible directamente dentro de la aplicación desde el cuadro de diálogo Acerca de.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Contribuyendo
|
||||
|
||||
¡Agradecemos las contribuciones! Así es como puedes ayudar:
|
||||
|
||||
1. 🍴 Bifurca el repositorio
|
||||
2. 🌿 Crea tu rama de funciones:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Confirme sus cambios:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Empuje a la sucursal:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Abra una solicitud de extracción
|
||||
|
||||
### 🌍 Contribuyendo con traducciones
|
||||
|
||||
- Actualice el archivo README localizado coincidente (por ejemplo `README.es.md`)
|
||||
- Mantenga las cadenas de aplicaciones sincronizadas editando `ytsage/languages/<code>.json`
|
||||
- Si falta su idioma, comience desde `README.md` y cree `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Estructura del proyecto</summary>
|
||||
|
||||
## YTSage - Estructura del proyecto
|
||||
|
||||
Este documento describe la estructura de carpetas organizada de YTSage.
|
||||
|
||||
### 📁 Estructura del proyecto
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Historia de las estrellas
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Historia de las estrellas
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Licencia
|
||||
|
||||
Este proyecto tiene la licencia MIT; consulte el archivo [LICENSE](../LICENSE) para obtener más detalles.
|
||||
|
||||
## 🙏 Agradecimientos
|
||||
|
||||
<details>
|
||||
<summary>Mostrar agradecimientos</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Un sincero agradecimiento a todos los que contribuyeron a este proyecto abriendo un problema para sugerir una mejora o informar un error.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Componentes principales</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Motor de descarga</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Procesamiento de medios</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Tiempo de ejecución para integración con yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Bibliotecas y marcos</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>Marco GUI</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Almohada</a></td>
|
||||
<td>Procesamiento de imágenes</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">solicitudes</a></td>
|
||||
<td>Solicitudes HTTP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">embalaje</a></td>
|
||||
<td>Manejo de versiones y paquetes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">rebaja</a></td>
|
||||
<td>Representación de rebajas</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Registro</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Activos y contribuyentes</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nueva Notificación 09 por Universfield</a></td>
|
||||
<td>Sonido de notificación</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Colaborador de código</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Descargo de responsabilidad
|
||||
|
||||
Esta herramienta es sólo para uso personal. Respete los términos de servicio de YouTube y los derechos de los creadores de contenido.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Hecho con ❤️ por [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Un téléchargeur YouTube moderne avec une interface PySide6 épurée.**
|
||||
Téléchargez des vidéos dans n'importe quelle qualité, extrayez l'audio, récupérez des sous-titres, et bien plus encore.
|
||||
|
||||
### 🌍 Langues README
|
||||
|
||||
Anglais : [EN](../README.md)
|
||||
| Titre : [AR](README.ar.md)
|
||||
| Allemand : [DE](README.de.md)
|
||||
| Espagnol : [ES](README.es.md)
|
||||
| Anglais: [FR](README.fr.md)
|
||||
| Nom : [HI](README.hi.md)
|
||||
| Bahasa Indonésie : [ID](README.id.md)
|
||||
| Italien : [IT](README.it.md)
|
||||
| Nom : [JA](README.ja.md)
|
||||
| Polski : [PL](README.pl.md)
|
||||
| Portugais : [PT](README.pt.md)
|
||||
| Russe : [RU](README.ru.md)
|
||||
| Turc : [TR](README.tr.md)
|
||||
| Nom : [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Installation</a> •
|
||||
<a href="#features">Caractéristiques</a> •
|
||||
<a href="#usage">Utilisation</a> •
|
||||
<a href="#screenshots">Captures d'écran</a> •
|
||||
<a href="#troubleshooting">Dépannage</a> •
|
||||
<a href="#sponsor">Commanditaire</a> •
|
||||
<a href="#contributing">Contribuer</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓Pourquoi YTSage ?
|
||||
|
||||
YTSage est conçu pour les utilisateurs qui souhaitent un **téléchargeur YouTube simple mais puissant**. Contrairement à d’autres outils, il propose :
|
||||
|
||||
- Une interface PySide6 propre et moderne
|
||||
- Téléchargements en un clic pour la vidéo, l'audio et les sous-titres
|
||||
- Fonctionnalités avancées telles que SponsorBlock, la fusion de sous-titres et la sélection de listes de lecture
|
||||
- Mode générique en option pour les sites pris en charge par yt-dlp au-delà de YouTube
|
||||
- Prise en charge multiplateforme et installation facile
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Caractéristiques
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Fonctionnalités principales | Fonctionnalités avancées | Fonctionnalités supplémentaires |
|
||||
|--------------------------------------------------|-----------------------------------------|--------------------------------------------------|
|
||||
| 🎥 Formater le tableau | 🚫 Intégration SponsorBlock | 🎞️ Affichage FPS/HDR |
|
||||
| 🎵 Extraction audio | 📝 Sélection et fusion de sous-titres multiples | 🔄 Mise à jour automatique yt-dlp |
|
||||
| ✨ Interface utilisateur simple | 💾 Enregistrer la description et la vignette | 🛠️ Détection FFmpeg/yt-dlp/Deno |
|
||||
| 📋 Prise en charge et sélecteur de playlist | 🚀 Limiteur de vitesse | ⚙️ Commandes personnalisées |
|
||||
| 📑 Intégrer les chapitres | ✂️ Couper les sections vidéo | 🍪 Connectez-vous avec les cookies |
|
||||
| 📜 Historique des téléchargements | 🔄 Sélection des chaînes de sortie | 🌐 Assistance proxy |
|
||||
| 🎚️ Conversion de formats audio | 🎬 Paramètres de format vidéo | 🆙 Onglet de mise à jour intégré |
|
||||
| 🌍 Mode générique | 🔊 Normalisation audio (EBU R128) | 🌍 Localisation en 14 langues |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀Installation
|
||||
|
||||
### ⚡ Installation rapide (recommandé)
|
||||
|
||||
Installez YTSage depuis PyPI :
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Mettre à jour une installation existante</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Lancez ensuite l'application :
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Exécutables prédéfinis
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟Fenêtres
|
||||
|
||||
| Formater | Descriptif |
|
||||
|--------|-------------|
|
||||
|  | Installateur standard |
|
||||
|  | Avec FFmpeg fourni |
|
||||
|  | Version portable, aucune installation requise |
|
||||
|  | Portable avec FFmpeg, zippé |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Étapes d'installation</summary>
|
||||
|
||||
1. **EXE Installer (`.exe`)** : Double-cliquez sur le fichier et suivez l'assistant d'installation.
|
||||
2. **Version portable (`.zip`)** : Extrayez l'archive à l'emplacement souhaité et exécutez `ytsage.exe`.
|
||||
3. **FFmpeg Bundled** : Choisissez les versions groupées de FFmpeg si FFmpeg n'est pas installé sur votre système.
|
||||
</details>
|
||||
|
||||
#### 🐧Linux
|
||||
|
||||
| Formater | Descriptif |
|
||||
|--------|-------------|
|
||||
|  | Paquet Debian |
|
||||
|  | AppImage, portable |
|
||||
|  | Paquet RPM |
|
||||
|  | Paquet Flatpak |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Étapes d'installation</summary>
|
||||
|
||||
- **DEB (`.deb`)** :
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)** :
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **AppImage (`.AppImage`)** :
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak** : suivez les instructions sur Flathub ou exécutez :
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎macOS
|
||||
|
||||
| Formater | Descriptif |
|
||||
|--------|-------------|
|
||||
|  | Application zippée pour Apple Silicon |
|
||||
|  | Programme d’installation d’image disque pour Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Étapes d'installation</summary>
|
||||
|
||||
- **DMG Installer (`.dmg`)** : Double-cliquez pour monter, puis faites glisser `YTSage.app` dans votre dossier Applications.
|
||||
- **App Archive (`.zip`)** : Extrayez le zip et déplacez `YTSage.app` vers votre dossier Applications.
|
||||
|
||||
*Remarque : si vous rencontrez une erreur « L'application est endommagée », consultez le [macOS troubleshooting section](#troubleshooting) ci-dessous.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Installation manuelle à partir de la source</summary>
|
||||
|
||||
### 1. Cloner le référentiel
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Installer les dépendances
|
||||
|
||||
#### ⚡Avec uv
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Ou avec pip standard
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Exécutez l'application
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Captures d'écran
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Paramètres de téléchargement</em></td>
|
||||
<td align="center"><em>Téléchargement de la liste de lecture</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Format audio</em></td>
|
||||
<td align="center"><em>Options personnalisées</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Utilisation
|
||||
|
||||
<details>
|
||||
<summary>🎯 Utilisation de base</summary>
|
||||
|
||||
1. **Lancer YTSage**
|
||||
2. **Collez l'URL YouTube** (ou utilisez le bouton « Coller l'URL »)
|
||||
3. **Cliquez sur « Analyser »**
|
||||
4. **Sélectionnez le format :**
|
||||
- `Video` pour les téléchargements de vidéos
|
||||
- `Audio Only` pour l'extraction audio
|
||||
5. **Choisissez les options :**
|
||||
- Activer les sous-titres et sélectionner la langue
|
||||
- Activer la fusion des sous-titres
|
||||
- Enregistrer la vignette
|
||||
- Supprimer les segments de sponsors
|
||||
- Enregistrer la description
|
||||
- Intégrer des chapitres
|
||||
6. **Sélectionnez le répertoire de sortie**
|
||||
7. **Cliquez sur "Télécharger"**
|
||||
|
||||
> 💡 Le répertoire de téléchargement par défaut est le dossier « Téléchargements » de l'utilisateur.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Téléchargement de la liste de lecture</summary>
|
||||
|
||||
1. **Coller l'URL de la liste de lecture**
|
||||
2. **Cliquez sur « Analyser »**
|
||||
3. ** Sélectionnez des vidéos dans le sélecteur de playlist (facultatif, par défaut : toutes) **
|
||||
4. **Choisissez le format/qualité souhaité**
|
||||
5. **Cliquez sur "Télécharger"**
|
||||
|
||||
> 💡 L'application gère automatiquement la file d'attente de téléchargement
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Mode générique pour les sites non YouTube</summary>
|
||||
|
||||
Utilisez le mode générique lorsque vous souhaitez que YTSage accepte les URL de sites pris en charge par yt-dlp, tels que Dailymotion, CBC Gem, TikTok et autres.
|
||||
|
||||
Comment l'utiliser :
|
||||
|
||||
1. Ouvrez `Download Settings`.
|
||||
2. Activez `Generic Mode`.
|
||||
3. Collez une URL de vidéo ou de playlist non YouTube prise en charge.
|
||||
4. Cliquez sur `Analyze`.
|
||||
5. Choisissez un format et téléchargez comme d'habitude.
|
||||
|
||||
Remarques :
|
||||
|
||||
- Le mode générique modifie uniquement la validation de l'URL dans YTSage. Le site cible doit toujours être pris en charge par votre version yt-dlp installée.
|
||||
- Certains sites nécessitent des cookies, une session de connexion, un proxy ou des arguments yt-dlp supplémentaires selon l'extracteur.
|
||||
- Si un site échoue, mettez d'abord à jour yt-dlp à partir de l'onglet de mise à jour intégré avant de signaler le problème.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Options multimédia et de téléchargement</summary>
|
||||
|
||||
- **Options de sous-titres :** Filtrez les langues et intégrez des sous-titres dans le fichier vidéo
|
||||
- **Fusion des sous-titres :** Fusionnez les sous-titres dans le fichier vidéo pour les sous-titres codés en dur
|
||||
- **Enregistrer la description :** Enregistrez la description de la vidéo sous forme de fichier texte
|
||||
- **Enregistrer la vignette :** Enregistrez la vignette de la vidéo en tant que fichier image
|
||||
- **Intégrer les chapitres :** Intégrer des marqueurs de chapitre en tant que métadonnées pour les lecteurs vidéo compatibles
|
||||
- **Supprimer les segments de sponsor :** Supprimez les segments de sponsor de la vidéo à l'aide de SponsorBlock
|
||||
- **Découper la vidéo :** Téléchargez uniquement des parties spécifiques d'une vidéo en spécifiant des plages de temps au format `HH:MM:SS`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Paramètres de sortie et de fichier</summary>
|
||||
|
||||
- **Speed Limiter :** Limitez la vitesse de téléchargement, par exemple `500K` à 500 Ko/s
|
||||
- **Enregistrer le chemin de téléchargement :** Enregistrez le chemin de téléchargement par défaut pour les prochains téléchargements. Disponible dans **Paramètres de téléchargement → Chemin de téléchargement**.
|
||||
- **Format du nom de fichier de sortie :** Personnalisez le format du nom de fichier de sortie à l'aide de variables telles que `%(title)s`, `%(uploader)s` et `%(resolution)s`. Disponible dans **Paramètres de téléchargement → Format du nom de fichier**.
|
||||
- **Forcer le format de sortie :** Forcer les téléchargements de vidéos dans un format de conteneur spécifique tel que `mp4`, `webm` ou `mkv`. Disponible dans **Paramètres de téléchargement → Paramètres du format de sortie**.
|
||||
- **Conversion de format audio :** Convertissez les téléchargements audio uniquement vers les formats préférés tels que `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, ou `Best`. Disponible dans **Paramètres de téléchargement → Paramètres de format audio**.
|
||||
- **Normalisation audio :** Standardisez le volume pour les téléchargements audio uniquement à l'aide de l'EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Accès et réseau</summary>
|
||||
|
||||
- **Connexion avec des cookies :** Connectez-vous à YouTube en utilisant des cookies pour accéder au contenu privé.
|
||||
Comment l'utiliser :
|
||||
1. **Recommandé :** Utilisez l'option intégrée `Extract cookies from browser` dans l'application, puis sélectionnez votre navigateur et éventuellement un profil.
|
||||
2. Vous pouvez également extraire les cookies manuellement :
|
||||
une. Exportez les cookies de votre navigateur en utilisant une extension comme [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
b. Copiez les cookies au format Netscape
|
||||
c. Créez un fichier nommé `cookies.txt` et collez-y les cookies
|
||||
d. Sélectionnez le fichier `cookies.txt` dans l'application
|
||||
- **Prise en charge du proxy :** Utilisez un serveur proxy pour les téléchargements, par exemple `http://<proxy-server>:<port>`
|
||||
- **Mode générique :** Autorisez YTSage à analyser et à télécharger à partir de sites non YouTube pris en charge par yt-dlp. Activez-le depuis **Paramètres de téléchargement → Mode générique**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Outils et entretien</summary>
|
||||
|
||||
- **Commandes personnalisées :** Accédez aux fonctionnalités avancées de yt-dlp via des arguments de ligne de commande
|
||||
- **Onglet Mise à jour :** Gérez les outils de mise à jour intégrés à partir d'un seul endroit dans les options personnalisées :
|
||||
- **Mises à jour yt-dlp :** Vérifiez les mises à jour et basculez entre les versions stables et nocturnes
|
||||
- **FFmpeg Version Checker :** Vérifiez votre version de FFmpeg et ouvrez les guides d'installation
|
||||
- **Mises à jour Deno :** Vérifiez et mettez à jour le runtime Deno
|
||||
- **Détection FFmpeg/yt-dlp/Deno :** Détecte automatiquement les chemins et versions FFmpeg, yt-dlp et Deno à partir de la boîte de dialogue À propos.
|
||||
- **Historique des téléchargements :** affichez les téléchargements passés avec des vignettes et des statuts à partir du bouton **Historique**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Localisation</summary>
|
||||
|
||||
YTSage prend en charge **14 langues** pour une accessibilité mondiale. Sélectionnez votre langue préférée dans **Options personnalisées → Langue**.
|
||||
|
||||
### Langues prises en charge
|
||||
|
||||
| Langue | Codes | Langue | Codes |
|
||||
|--------------|------|--------------|------|
|
||||
| 🇺🇸 Anglais | `en` | Espagnol | `es` |
|
||||
| 🇸🇦 Arabe | `ar` | 🇫🇷 Français | `fr` |
|
||||
| 🇩🇪 Allemand | `de` | 🇮🇳 Hindi | `hi` |
|
||||
| 🇮🇩 Indonésien | `id` | 🇮🇹 Italien | `it` |
|
||||
| 🇯🇵 Japonais | `ja` | 🇵🇱 Polonais | `pl` |
|
||||
| 🇧🇷 Portugais | `pt` | 🇷🇺 Russe | `ru` |
|
||||
| 🇹🇷 Turc | `tr` | 🇨🇳 Chinois | `zh` |
|
||||
|
||||
### Traductions README
|
||||
|
||||
| Langue | Fichier | Langue | Fichier |
|
||||
|--------------|------|--------------|------|
|
||||
| 🇺🇸 Anglais | [README.md](../README.md) | Espagnol | [README.es.md](README.es.md)
|
||||
| 🇸🇦 Arabe | [README.ar.md](README.ar.md) | 🇫🇷 Français | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 Allemand | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Indonésien | [README.id.md](README.id.md) | 🇮🇹 Italien | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 Japonais | [README.ja.md](README.ja.md) | 🇵🇱 Polonais | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Portugais | [README.pt.md](README.pt.md) | 🇷🇺 Russe | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Turc | [README.tr.md](README.tr.md) | 🇨🇳 Chinois | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Vous voulez contribuer à une traduction ?** Consultez la section [Contributing](#contributing) pour nous aider à ajouter plus de langues !
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Dépannage
|
||||
|
||||
<details>
|
||||
<summary>Cliquez pour afficher les problèmes courants et les solutions</summary>
|
||||
|
||||
- **Le tableau de format ne s'affiche pas :** Mettez à jour yt-dlp vers la dernière version et passez à yt-dlp tous les soirs.
|
||||
- **Échec du téléchargement :** Vérifiez votre connexion Internet et assurez-vous que la vidéo est disponible.
|
||||
- **Erreurs de téléchargement spécifiques :**
|
||||
- **Vidéos privées :** Utilisez l'authentification par cookie pour accéder au contenu privé.
|
||||
- **Contenu soumis à une limite d'âge :** Connectez-vous à votre compte YouTube pour visionner des vidéos soumises à une limite d'âge.
|
||||
- **Vidéos géo-bloquées :** Pensez à utiliser un VPN pour contourner les restrictions régionales.
|
||||
- **Vidéos supprimées/supprimées :** La vidéo n'est plus disponible sur YouTube.
|
||||
- **Diffusions en direct :** Les diffusions en direct ne peuvent pas être téléchargées ; attendez la fin du flux.
|
||||
- **Erreurs réseau :** Vérifiez votre connexion Internet et réessayez.
|
||||
- **URL invalides :** Assurez-vous que l'URL est correcte et qu'elle provient d'une plate-forme prise en charge.
|
||||
- **Contenu Premium :** Nécessite un abonnement YouTube Premium.
|
||||
- **Blocs de droits d'auteur :** Le contenu est bloqué en raison de restrictions de droits d'auteur.
|
||||
- **Séparez les fichiers vidéo et audio après le téléchargement :** Cela se produit lorsque FFmpeg est manquant ou n'est pas détecté. YTSage nécessite FFmpeg pour fusionner des flux vidéo et audio de haute qualité.
|
||||
- **Solution :** Assurez-vous que FFmpeg est installé et accessible dans le PATH de votre système. Pour les utilisateurs Windows, l'option la plus simple consiste à télécharger le fichier `YTSage-v<version>-ffmpeg.exe`, fourni avec FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Avertissement Windows Defender / Antivirus
|
||||
|
||||
Certains logiciels antivirus peuvent signaler les fichiers `.exe` comme de faux positifs. Il s'agit d'une **limitation connue** des applications packagées.
|
||||
|
||||
**Pourquoi cela se produit :**
|
||||
- L'heuristique antivirus peut identifier à tort les exécutables compressés comme suspects
|
||||
|
||||
**Alternatives sûres :**
|
||||
- ✅ **Utiliser l'installation pip :** `pip install ytsage` (recommandé)
|
||||
- ✅ **Construire à partir des sources** : en suivant ceci [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Liste blanche de l'application** dans votre logiciel antivirus
|
||||
|
||||
#### 🍎 macOS : "L'application est endommagée et ne peut pas être ouverte"
|
||||
Si vous voyez cette erreur sur macOS Sonoma ou version ultérieure, vous devez supprimer l'attribut de quarantaine.
|
||||
|
||||
1. **Ouvrez le terminal** (vous pouvez le trouver en utilisant Spotlight).
|
||||
2. **Tapez la commande suivante** mais **n'appuyez pas** encore sur Entrée. Assurez-vous d'inclure l'espace à la fin :
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Faites glisser le fichier `YTSage.app`** depuis votre fenêtre du Finder et déposez-le directement dans la fenêtre du Terminal. Cela collera automatiquement le chemin de fichier correct.
|
||||
4. **Appuyez sur Entrée** pour exécuter la commande.
|
||||
5. **Essayez d'ouvrir à nouveau YTSage.app.** Il devrait maintenant se lancer correctement.
|
||||
|
||||
---
|
||||
|
||||
#### **Emplacements de configuration (avancé)**
|
||||
- **Windows :** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS :** `~/Library/Application Support/YTSage`
|
||||
- **Linux :** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Parrainer
|
||||
|
||||
Si YTSage vous fait gagner du temps, envisagez de parrainer le projet. Le parrainage permet de couvrir le temps de développement, les tests sur toutes les plateformes et les améliorations futures.
|
||||
|
||||
- Commanditaires GitHub : https://github.com/sponsors/oop7
|
||||
- Le lien du sponsor est également disponible directement dans l'application à partir de la boîte de dialogue À propos.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Contribuer
|
||||
|
||||
Nous apprécions les contributions ! Voici comment vous pouvez aider :
|
||||
|
||||
1. 🍴 Forkez le référentiel
|
||||
2. 🌿 Créez votre branche de fonctionnalités :
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Validez vos modifications :
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Push vers l'agence :
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Ouvrir une Pull Request
|
||||
|
||||
### 🌍 Contribuer aux traductions
|
||||
|
||||
- Mettez à jour le fichier README localisé correspondant (par exemple `README.es.md`)
|
||||
- Gardez les chaînes de l'application synchronisées en éditant `ytsage/languages/<code>.json`
|
||||
- Si votre langue est manquante, partez de `README.md` et créez `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Structure du projet</summary>
|
||||
|
||||
## YTSage – Structure du projet
|
||||
|
||||
Ce document décrit la structure des dossiers organisés de YTSage.
|
||||
|
||||
### 📁 Structure du projet
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Histoire des étoiles
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Historique des étoiles
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Licence
|
||||
|
||||
Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus de détails.
|
||||
|
||||
## 🙏 Remerciements
|
||||
|
||||
<details>
|
||||
<summary>Afficher les remerciements</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Un merci sincère à tous ceux qui ont contribué à ce projet en ouvrant un ticket pour suggérer une amélioration ou signaler un bug.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Composants de base</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Moteur de téléchargement</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Traitement multimédia</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Déno</a></td>
|
||||
<td>Runtime pour l'intégration avec yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Bibliothèques et frameworks</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>Cadre GUI</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Oreiller</a></td>
|
||||
<td>Traitement d'images</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">demandes</a></td>
|
||||
<td>Demandes HTTP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">emballage</a></td>
|
||||
<td>Version et gestion des packages</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||
<td>Rendu Markdown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Journalisation</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Actifs et contributeurs</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nouvelle notification 09 par Universfield</a></td>
|
||||
<td>Son de notification</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Contributeur de code</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Avis de non-responsabilité
|
||||
|
||||
Cet outil est destiné à un usage personnel uniquement. Veuillez respecter les conditions d'utilisation de YouTube et les droits des créateurs de contenu.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Réalisé avec ❤️ par [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,617 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**स्वच्छ PySide6 इंटरफ़ेस वाला एक आधुनिक YouTube डाउनलोडर।**
|
||||
किसी भी गुणवत्ता में वीडियो डाउनलोड करें, ऑडियो निकालें, उपशीर्षक प्राप्त करें और बहुत कुछ करें।
|
||||
|
||||
### 🌍 रीडमी भाषाएँ
|
||||
|
||||
अंग्रेज़ी: [EN](../README.md)
|
||||
| उत्तर: [AR](README.ar.md)
|
||||
| जर्मन: [DE](README.de.md)
|
||||
| Español: [ES](README.es.md)
|
||||
| फ़्रेंच: [FR](README.fr.md)
|
||||
| हिन्दी: [HI](README.hi.md)
|
||||
| बहासा इंडोनेशिया: [ID](README.id.md)
|
||||
| इटालियनो: [IT](README.it.md)
|
||||
| उत्तर: [JA](README.ja.md)
|
||||
| पोल्स्की: [PL](README.pl.md)
|
||||
| पुर्तगाली: [PT](README.pt.md)
|
||||
| Русский: [RU](README.ru.md)
|
||||
| तुर्की: [TR](README.tr.md)
|
||||
| उत्तर: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">स्थापना</a> •
|
||||
<a href="#features">विशेषताएं</a> •
|
||||
<a href="#usage">उपयोग</a> •
|
||||
<a href="#screenshots">स्क्रीनशॉट</a> •
|
||||
<a href="#troubleshooting">समस्या निवारण</a> •
|
||||
<a href="#sponsor">प्रायोजक</a> •
|
||||
<a href="#contributing">योगदान</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ YTSage क्यों?
|
||||
|
||||
YTSage उन उपयोगकर्ताओं के लिए डिज़ाइन किया गया है जो **सरल लेकिन शक्तिशाली YouTube डाउनलोडर** चाहते हैं। अन्य उपकरणों के विपरीत, यह प्रदान करता है:
|
||||
|
||||
- एक साफ़, आधुनिक PySide6 इंटरफ़ेस
|
||||
- वीडियो, ऑडियो और उपशीर्षक के लिए एक-क्लिक डाउनलोड
|
||||
- स्पॉन्सरब्लॉक, उपशीर्षक विलय और प्लेलिस्ट चयन जैसी उन्नत सुविधाएँ
|
||||
- YouTube से परे yt-dlp-समर्थित साइटों के लिए वैकल्पिक जेनेरिक मोड
|
||||
- क्रॉस-प्लेटफ़ॉर्म समर्थन और आसान स्थापना
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ विशेषताएँ
|
||||
|
||||
<div align="center">
|
||||
|
||||
| मुख्य विशेषताएं | उन्नत सुविधाएँ | अतिरिक्त सुविधाएँ |
|
||||
|------------------------------------------------|------------------------------------------------|------------------------------------------------|
|
||||
| 🎥 प्रारूप तालिका | 🚫प्रायोजकब्लॉक एकीकरण | 🎞️ एफपीएस/एचडीआर डिस्प्ले |
|
||||
| 🎵 ऑडियो निष्कर्षण | 📝 बहु-उपशीर्षक चुनें और मर्ज करें | 🔄 ऑटो-अपडेट yt-dlp |
|
||||
| ✨ सरल यूआई | 💾 विवरण और थंबनेल सहेजें | 🛠️ FFmpeg/yt-dlp/Deno डिटेक्शन |
|
||||
| 📋 प्लेलिस्ट समर्थन और चयनकर्ता | 🚀 गति सीमक | ⚙️ कस्टम कमांड |
|
||||
| 📑 अध्याय एम्बेड करें | ✂️ वीडियो अनुभाग ट्रिम करें | 🍪 कुकीज़ के साथ लॉगिन करें |
|
||||
| 📜इतिहास डाउनलोड करें | 🔄रिलीज़ चैनल चयन | 🌐 प्रॉक्सी सपोर्ट |
|
||||
| 🎚️ ऑडियो प्रारूप रूपांतरण | 🎬 वीडियो प्रारूप सेटिंग्स | 🆙 बिल्ट-इन अपडेटर टैब |
|
||||
| 🌍 जेनेरिक मोड | 🔊 ऑडियो सामान्यीकरण (EBU R128) | 🌍14 भाषाओं में स्थानीयकरण |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 स्थापना
|
||||
|
||||
### ⚡ त्वरित इंस्टाल (अनुशंसित)
|
||||
|
||||
PyPI से YTSage इंस्टॉल करें:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄मौजूदा इंस्टॉलेशन को अपडेट करें</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
फिर ऐप लॉन्च करें:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 पूर्व-निर्मित निष्पादनयोग्य
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 खिड़कियाँ
|
||||
|
||||
| प्रारूप | विवरण |
|
||||
|-------|----|
|
||||
|  | मानक इंस्टॉलर |
|
||||
|  | FFmpeg बंडल के साथ |
|
||||
|  | पोर्टेबल संस्करण, किसी इंस्टॉलेशन की आवश्यकता नहीं |
|
||||
|  | FFmpeg के साथ पोर्टेबल, ज़िपित |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ इंस्टालेशन चरण</summary>
|
||||
|
||||
1. **EXE इंस्टॉलर (`.exe`)**: फ़ाइल पर डबल-क्लिक करें और सेटअप विज़ार्ड का पालन करें।
|
||||
2. **पोर्टेबल संस्करण (`.zip`)**: संग्रह को अपने इच्छित स्थान पर निकालें और `ytsage.exe` चलाएँ।
|
||||
3. **एफएफएमपीईजी बंडल**: यदि आपके सिस्टम पर एफएफएमपीईजी स्थापित नहीं है तो एफएफएमपीईजी बंडल संस्करण चुनें।
|
||||
</details>
|
||||
|
||||
#### 🐧 लिनक्स
|
||||
|
||||
| प्रारूप | विवरण |
|
||||
|-------|----|
|
||||
|  | डेबियन पैकेज |
|
||||
|  | ऐपइमेज, पोर्टेबल |
|
||||
|  | आरपीएम पैकेज |
|
||||
|  | फ़्लैटपैक बंडल |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ इंस्टालेशन चरण</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **आरपीएम (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **ऐपइमेज (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **फ्लैटपैक**: फ़्लैटहब पर निर्देशों का पालन करें या चलाएँ:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 मैकओएस
|
||||
|
||||
| प्रारूप | विवरण |
|
||||
|-------|----|
|
||||
|  | एप्पल सिलिकॉन के लिए ज़िप्ड एप्लिकेशन |
|
||||
|  | एप्पल सिलिकॉन के लिए डिस्क छवि इंस्टॉलर |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ इंस्टालेशन चरण</summary>
|
||||
|
||||
- **डीएमजी इंस्टॉलर (`.dmg`)**: माउंट करने के लिए डबल-क्लिक करें, फिर `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में खींचें।
|
||||
- **ऐप आर्काइव (`.zip`)**: ज़िप निकालें और `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में ले जाएं।
|
||||
|
||||
*ध्यान दें: यदि आपको "ऐप क्षतिग्रस्त है" त्रुटि आती है, तो नीचे [macOS troubleshooting section](#troubleshooting) देखें।*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 स्रोत से मैन्युअल इंस्टालेशन</summary>
|
||||
|
||||
### 1. रिपॉजिटरी को क्लोन करें
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. निर्भरताएँ स्थापित करें
|
||||
|
||||
#### ⚡ यूवी के साथ
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 या मानक पाइप के साथ
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. एप्लिकेशन चलाएँ
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 स्क्रीनशॉट
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>डाउनलोड सेटिंग्स</em></td>
|
||||
<td align="center"><em>प्लेलिस्ट डाउनलोड</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>ऑडियो फॉर्मेट</em></td>
|
||||
<td align="center"><em>कस्टम विकल्प</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 प्रयोग
|
||||
|
||||
<details>
|
||||
<summary>🎯 मूल उपयोग</summary>
|
||||
|
||||
1. **YTSage लॉन्च करें**
|
||||
2. **यूट्यूब यूआरएल चिपकाएँ** (या "यूआरएल चिपकाएँ" बटन का उपयोग करें)
|
||||
3. **"विश्लेषण करें" पर क्लिक करें**
|
||||
4. **प्रारूप चुनें:**
|
||||
- वीडियो डाउनलोड के लिए `Video`
|
||||
- ऑडियो निष्कर्षण के लिए `Audio Only`
|
||||
5. **विकल्प चुनें:**
|
||||
- उपशीर्षक सक्षम करें और भाषा चुनें
|
||||
- उपशीर्षक मर्ज सक्षम करें
|
||||
- थंबनेल सहेजें
|
||||
- प्रायोजक खंड हटाएँ
|
||||
- विवरण सहेजें
|
||||
- अध्याय एम्बेड करें
|
||||
6. **आउटपुट डायरेक्टरी चुनें**
|
||||
7. **"डाउनलोड" पर क्लिक करें**
|
||||
|
||||
> 💡 डिफ़ॉल्ट डाउनलोड निर्देशिका उपयोगकर्ता का "डाउनलोड" फ़ोल्डर है।
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 प्लेलिस्ट डाउनलोड</summary>
|
||||
|
||||
1. **प्लेलिस्ट यूआरएल चिपकाएँ**
|
||||
2. **"विश्लेषण करें" पर क्लिक करें**
|
||||
3. **प्लेलिस्ट चयनकर्ता से वीडियो चुनें (वैकल्पिक, सभी के लिए डिफ़ॉल्ट)**
|
||||
4. **वांछित प्रारूप/गुणवत्ता चुनें**
|
||||
5. **"डाउनलोड" पर क्लिक करें**
|
||||
|
||||
> 💡 एप्लिकेशन स्वचालित रूप से डाउनलोड कतार को संभालता है
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 गैर-यूट्यूब साइटों के लिए जेनेरिक मोड</summary>
|
||||
|
||||
जब आप चाहते हैं कि YTSage, yt-dlp द्वारा समर्थित साइटों, जैसे कि डेलीमोशन, CBC जेम, टिकटॉक और अन्य से यूआरएल स्वीकार करे, तो जेनेरिक मोड का उपयोग करें।
|
||||
|
||||
इसका उपयोग कैसे करें:
|
||||
|
||||
1. `Download Settings` खोलें।
|
||||
2. `Generic Mode` सक्षम करें।
|
||||
3. एक समर्थित गैर-यूट्यूब वीडियो या प्लेलिस्ट यूआरएल चिपकाएँ।
|
||||
4. `Analyze` पर क्लिक करें।
|
||||
5. एक प्रारूप चुनें और हमेशा की तरह डाउनलोड करें।
|
||||
|
||||
टिप्पणियाँ:
|
||||
|
||||
- जेनेरिक मोड केवल YTSage के अंदर URL सत्यापन को बदलता है। लक्ष्य साइट को अभी भी आपके स्थापित yt-dlp संस्करण द्वारा समर्थित होना चाहिए।
|
||||
- कुछ साइटों को एक्सट्रैक्टर के आधार पर कुकीज़, एक लॉगिन सत्र, एक प्रॉक्सी, या अतिरिक्त yt-dlp तर्क की आवश्यकता होती है।
|
||||
- यदि कोई साइट विफल हो जाती है, तो समस्या की रिपोर्ट करने से पहले अंतर्निहित अपडेटर टैब से yt-dlp को अपडेट करें।
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰मीडिया और डाउनलोड विकल्प</summary>
|
||||
|
||||
- **उपशीर्षक विकल्प:** भाषाओं को फ़िल्टर करें और वीडियो फ़ाइल में उपशीर्षक एम्बेड करें
|
||||
- **उपशीर्षक मर्ज:** हार्डकोडेड उपशीर्षक के लिए उपशीर्षक को वीडियो फ़ाइल में मर्ज करें
|
||||
- **विवरण सहेजें:** वीडियो विवरण को टेक्स्ट फ़ाइल के रूप में सहेजें
|
||||
- **थंबनेल सहेजें:** वीडियो थंबनेल को एक छवि फ़ाइल के रूप में सहेजें
|
||||
- **अध्याय एम्बेड करें:**संगत वीडियो प्लेयर के लिए मेटाडेटा के रूप में अध्याय मार्कर एम्बेड करें
|
||||
- **प्रायोजक खंड हटाएं:** SponsorBlock का उपयोग करके वीडियो से प्रायोजक खंड हटाएं
|
||||
- **वीडियो ट्रिम करें:** `HH:MM:SS` प्रारूप में समय सीमा निर्दिष्ट करके वीडियो के केवल विशिष्ट भागों को डाउनलोड करें
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ आउटपुट और फ़ाइल सेटिंग्स</summary>
|
||||
|
||||
- **स्पीड लिमिटर:** डाउनलोड स्पीड सीमित करें, उदाहरण के लिए `500K` 500 KB/s के लिए
|
||||
- **डाउनलोड पथ सहेजें:** भविष्य के डाउनलोड के लिए डिफ़ॉल्ट डाउनलोड पथ सहेजें। **डाउनलोड सेटिंग → डाउनलोड पथ** में उपलब्ध है।
|
||||
- **आउटपुट फ़ाइल नाम प्रारूप:** `%(title)s`, `%(uploader)s`, और `%(resolution)s` जैसे वेरिएबल का उपयोग करके आउटपुट फ़ाइल नाम प्रारूप को अनुकूलित करें। **डाउनलोड सेटिंग्स → फ़ाइल नाम प्रारूप** में उपलब्ध है।- **फोर्स आउटपुट फॉर्मेट:** वीडियो डाउनलोड को एक विशिष्ट कंटेनर फॉर्मेट जैसे `mp4`, `webm`, या `mkv` में फोर्स करें। **डाउनलोड सेटिंग्स → आउटपुट फॉर्मेट सेटिंग्स** में उपलब्ध है।
|
||||
- **ऑडियो प्रारूप रूपांतरण:** केवल-ऑडियो डाउनलोड को पसंदीदा प्रारूपों में परिवर्तित करें जैसे `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, या `Best`. **डाउनलोड सेटिंग्स → ऑडियो फॉर्मेट सेटिंग्स** में उपलब्ध है।
|
||||
- **ऑडियो सामान्यीकरण:** EBU R128 का उपयोग करके केवल-ऑडियो डाउनलोड के लिए वॉल्यूम को मानकीकृत करें।
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 पहुंच और नेटवर्क</summary>
|
||||
|
||||
- **कुकीज़ के साथ लॉगिन करें:** निजी सामग्री तक पहुंचने के लिए कुकीज़ का उपयोग करके यूट्यूब पर लॉगिन करें।
|
||||
इसका उपयोग कैसे करें:
|
||||
1. **अनुशंसित:** ऐप में अंतर्निहित `Extract cookies from browser` विकल्प का उपयोग करें, फिर अपना ब्राउज़र और वैकल्पिक रूप से एक प्रोफ़ाइल चुनें।
|
||||
2. वैकल्पिक रूप से, कुकीज़ को मैन्युअल रूप से निकालें:
|
||||
ए. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) जैसे एक्सटेंशन का उपयोग करके अपने ब्राउज़र से कुकीज़ निर्यात करें
|
||||
बी. कुकीज़ को नेटस्केप प्रारूप में कॉपी करें
|
||||
सी. `cookies.txt` नाम की एक फ़ाइल बनाएं और उसमें कुकीज़ पेस्ट करें
|
||||
घ. ऐप में `cookies.txt` फ़ाइल चुनें
|
||||
- **प्रॉक्सी समर्थन:** डाउनलोड के लिए प्रॉक्सी सर्वर का उपयोग करें, उदाहरण के लिए `http://<proxy-server>:<port>`
|
||||
- **जेनेरिक मोड:** YTSage को yt-dlp द्वारा समर्थित गैर-यूट्यूब साइटों से विश्लेषण और डाउनलोड करने की अनुमति दें। इसे **डाउनलोड सेटिंग्स → जेनेरिक मोड** से सक्षम करें।
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ उपकरण और रखरखाव</summary>
|
||||
|
||||
- **कस्टम कमांड:** कमांड लाइन तर्कों के माध्यम से उन्नत yt-dlp सुविधाओं तक पहुंचें
|
||||
- **अपडेटर टैब:** कस्टम विकल्पों में एक ही स्थान से अंतर्निहित अपडेट टूल प्रबंधित करें:
|
||||
- **yt-dlp अपडेट:** अपडेट की जांच करें और स्थिर और रात्रिकालीन रिलीज़ चैनलों के बीच स्विच करें
|
||||
- **एफएफएमपीईजी संस्करण जांचकर्ता:** अपना एफएफएमपीईजी संस्करण जांचें और इंस्टॉलेशन गाइड खोलें
|
||||
- **डेनो अपडेट:** डेनो रनटाइम की जांच करें और अपडेट करें
|
||||
- **FFmpeg/yt-dlp/Deno डिटेक्शन:** अबाउट डायलॉग से FFmpeg, yt-dlp, और Deno पथ और संस्करणों का स्वचालित रूप से पता लगाएं।
|
||||
- **डाउनलोड इतिहास:** **इतिहास** बटन से थंबनेल और स्थितियों के साथ पिछले डाउनलोड देखें।
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 स्थानीयकरण</summary>
|
||||
|
||||
YTSage दुनिया भर में पहुंच के लिए **14 भाषाओं** का समर्थन करता है। **कस्टम विकल्प → भाषा** से अपनी पसंदीदा भाषा चुनें।
|
||||
|
||||
### समर्थित भाषाएँ
|
||||
|
||||
| भाषा | कोड | भाषा | कोड |
|
||||
|-------|------|-------|------|
|
||||
| 🇺🇸 अंग्रेजी | `en` | 🇪🇸स्पेनिश | `es` |
|
||||
| 🇸🇦 अरबी | `ar` | 🇫🇷 फ्रेंच | `fr` |
|
||||
| 🇩🇪 जर्मन | `de` | 🇮🇳 हिंदी | `hi` |
|
||||
| 🇮🇩 इंडोनेशियाई | `id` | 🇮🇹इतालवी | `it` |
|
||||
| 🇯🇵 जापानी | `ja` | 🇵🇱 पोलिश | `pl` |
|
||||
| 🇧🇷 पुर्तगाली | `pt` | 🇷🇺 रूसी | `ru` |
|
||||
| 🇹🇷तुर्की | `tr` | 🇨🇳 चीनी | `zh` |
|
||||
|
||||
### README अनुवाद
|
||||
|
||||
| भाषा | फ़ाइल | भाषा | फ़ाइल |
|
||||
|-------|------|-------|------|
|
||||
| 🇺🇸 अंग्रेजी | [README.md](../README.md) | 🇪🇸स्पेनिश | [README.es.md](README.es.md)
|
||||
| 🇸🇦 अरबी | [README.ar.md](README.ar.md) | 🇫🇷 फ्रेंच | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 जर्मन | [README.de.md](README.de.md) | 🇮🇳 हिंदी | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 इंडोनेशियाई | [README.id.md](README.id.md) | 🇮🇹इतालवी | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 जापानी | [README.ja.md](README.ja.md) | 🇵🇱 पोलिश | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 पुर्तगाली | [README.pt.md](README.pt.md) | 🇷🇺 रूसी | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷तुर्की | [README.tr.md](README.tr.md) | 🇨🇳 चीनी | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **अनुवाद में योगदान देना चाहते हैं?** अधिक भाषाएँ जोड़ने में हमारी सहायता के लिए [Contributing](#contributing) अनुभाग देखें!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️समस्या निवारण
|
||||
|
||||
<details>
|
||||
<summary>सामान्य समस्याएं और समाधान देखने के लिए क्लिक करें</summary>
|
||||
|
||||
- **प्रारूप तालिका प्रदर्शित नहीं हो रही है:** yt-dlp को नवीनतम संस्करण में अपडेट करें, और रात में yt-dlp पर स्विच करें।
|
||||
- **डाउनलोड विफल:** अपना इंटरनेट कनेक्शन जांचें और सुनिश्चित करें कि वीडियो उपलब्ध है।
|
||||
- **विशिष्ट डाउनलोड त्रुटियाँ:**
|
||||
- **निजी वीडियो:** निजी सामग्री तक पहुंचने के लिए कुकी प्रमाणीकरण का उपयोग करें।
|
||||
- **आयु-प्रतिबंधित सामग्री:** आयु-प्रतिबंधित वीडियो देखने के लिए YouTube खाते में लॉगिन करें।
|
||||
- **जियो-अवरुद्ध वीडियो:** क्षेत्रीय प्रतिबंधों को बायपास करने के लिए वीपीएन का उपयोग करने पर विचार करें।
|
||||
- **हटाए गए/हटाए गए वीडियो:** वीडियो अब YouTube पर उपलब्ध नहीं है।
|
||||
- **लाइव स्ट्रीम:** लाइव स्ट्रीम डाउनलोड नहीं की जा सकतीं; स्ट्रीम समाप्त होने की प्रतीक्षा करें.
|
||||
- **नेटवर्क त्रुटियां:** अपना इंटरनेट कनेक्शन जांचें और पुनः प्रयास करें।
|
||||
- **अमान्य यूआरएल:** सुनिश्चित करें कि यूआरएल सही है और समर्थित प्लेटफॉर्म से है।
|
||||
- **प्रीमियम सामग्री:** YouTube प्रीमियम सदस्यता की आवश्यकता है।
|
||||
- **कॉपीराइट ब्लॉक:** कॉपीराइट प्रतिबंधों के कारण सामग्री अवरुद्ध है।
|
||||
- **डाउनलोड के बाद वीडियो और ऑडियो फ़ाइलों को अलग करें:** ऐसा तब होता है जब FFmpeg गायब है या पता नहीं चला है। उच्च गुणवत्ता वाले वीडियो और ऑडियो स्ट्रीम को मर्ज करने के लिए YTSage को FFmpeg की आवश्यकता होती है।
|
||||
- **समाधान:** सुनिश्चित करें कि FFmpeg आपके सिस्टम के PATH में स्थापित और पहुंच योग्य है। विंडोज़ उपयोगकर्ताओं के लिए, सबसे आसान विकल्प `YTSage-v<version>-ffmpeg.exe` फ़ाइल डाउनलोड करना है, जो FFmpeg के साथ बंडल में आती है।
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ विंडोज डिफेंडर / एंटीवायरस चेतावनी
|
||||
|
||||
कुछ एंटीवायरस सॉफ़्टवेयर `.exe` फ़ाइलों को गलत सकारात्मक के रूप में चिह्नित कर सकते हैं। यह पैकेज्ड एप्लिकेशन की **ज्ञात सीमा** है।
|
||||
|
||||
**ऐसा क्यों होता है:**
|
||||
- एंटीवायरस अनुमान पैक किए गए निष्पादन योग्य को संदिग्ध के रूप में गलत पहचान सकता है
|
||||
|
||||
**सुरक्षित विकल्प:**
|
||||
- ✅ **पाइप इंस्टॉलेशन का उपयोग करें:** `pip install ytsage` (अनुशंसित)
|
||||
- ✅ **स्रोत से निर्माण**: इसका पालन करके [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **एप्लिकेशन को अपने एंटीवायरस सॉफ़्टवेयर में श्वेतसूची में डालें**
|
||||
|
||||
#### 🍎 macOS: "ऐप क्षतिग्रस्त है और खोला नहीं जा सकता"
|
||||
यदि आपको यह त्रुटि macOS सोनोमा या नए पर दिखाई देती है, तो आपको संगरोध विशेषता को हटाना होगा।
|
||||
|
||||
1. **टर्मिनल खोलें** (आप इसे स्पॉटलाइट का उपयोग करके पा सकते हैं)।
|
||||
2. **निम्न आदेश टाइप करें** लेकिन **अभी तक Enter न दबाएँ। अंत में स्थान शामिल करना सुनिश्चित करें:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. ** `YTSage.app` फ़ाइल** को अपनी फाइंडर विंडो से खींचें और इसे सीधे टर्मिनल विंडो में छोड़ें। इससे स्वचालित रूप से सही फ़ाइल पथ पेस्ट हो जाएगा.
|
||||
4. कमांड चलाने के लिए **एंटर** दबाएं।
|
||||
5. **YTSage.app को दोबारा खोलने का प्रयास करें।** इसे अब सही ढंग से लॉन्च होना चाहिए।
|
||||
|
||||
---
|
||||
|
||||
#### **कॉन्फ़िगरेशन स्थान (उन्नत)**
|
||||
- **विंडोज़:** `%LOCALAPPDATA%\YTSage`
|
||||
- **मैकओएस:** `~/Library/Application Support/YTSage`
|
||||
- **लिनक्स:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 प्रायोजक
|
||||
|
||||
यदि YTSage आपका समय बचाता है, तो परियोजना को प्रायोजित करने पर विचार करें। प्रायोजन विकास के समय, सभी प्लेटफार्मों पर परीक्षण और भविष्य में सुधारों को कवर करने में मदद करता है।
|
||||
|
||||
- GitHub प्रायोजक: https://github.com/sponsors/oop7
|
||||
- प्रायोजक लिंक सीधे ऐप के अंदर अबाउट डायलॉग से भी उपलब्ध है।
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 योगदान दे रहे हैं
|
||||
|
||||
हम योगदान का स्वागत करते हैं! यहां बताया गया है कि आप कैसे मदद कर सकते हैं:
|
||||
|
||||
1. 🍴 रिपॉजिटरी को फोर्क करें
|
||||
2. 🌿 अपनी फीचर शाखा बनाएं:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 अपने परिवर्तन प्रतिबद्ध करें:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 शाखा को धक्का:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 एक पुल अनुरोध खोलें
|
||||
|
||||
### 🌍 अनुवाद में योगदान
|
||||
|
||||
- मिलान वाली स्थानीयकृत README फ़ाइल को अपडेट करें (उदाहरण के लिए `README.es.md`)
|
||||
- `ytsage/languages/<code>.json` को संपादित करके ऐप स्ट्रिंग्स को सिंक में रखें
|
||||
- यदि आपकी भाषा गायब है, तो `README.md` से शुरू करें और `README.<code>.md` बनाएं
|
||||
|
||||
<details>
|
||||
<summary>📂 परियोजना संरचना</summary>
|
||||
|
||||
## YTSage - परियोजना संरचना
|
||||
|
||||
यह दस्तावेज़ YTSage की संगठित फ़ोल्डर संरचना का वर्णन करता है।
|
||||
|
||||
### 📁परियोजना संरचना
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ सितारा इतिहास
|
||||
|
||||
<div align="center">
|
||||
|
||||
## सितारा इतिहास
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 लाइसेंस
|
||||
|
||||
यह प्रोजेक्ट एमआईटी लाइसेंस के तहत लाइसेंस प्राप्त है - विवरण के लिए [LICENSE](../LICENSE) फ़ाइल देखें।
|
||||
|
||||
## 🙏 आभार
|
||||
|
||||
<details>
|
||||
<summary> आभार दिखाएं</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>सुधार का सुझाव देने या बग की रिपोर्ट करने के लिए एक मुद्दा खोलकर इस परियोजना में योगदान देने वाले सभी लोगों को हार्दिक धन्यवाद।</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">मुख्य घटक</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>डाउनलोड इंजन</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>मीडिया प्रोसेसिंग</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>yt-dlp के साथ एकीकरण के लिए रनटाइम</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">लाइब्रेरी और फ्रेमवर्क</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>GUI फ्रेमवर्क</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">तकिया</a></td>
|
||||
<td>इमेज प्रोसेसिंग</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">अनुरोध</a></td>
|
||||
<td>HTTP अनुरोध</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">पैकेजिंग</a></td>
|
||||
<td>संस्करण और पैकेज हैंडलिंग</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">मार्कडाउन</a></td>
|
||||
<td>मार्कडाउन रेंडरिंग</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>लॉगिंग</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">संपत्ति और योगदानकर्ता</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">यूनिवर्सफील्ड द्वारा नई अधिसूचना 09</a></td>
|
||||
<td>अधिसूचना ध्वनि</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>कोड योगदानकर्ता</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ अस्वीकरण
|
||||
|
||||
यह उपकरण केवल व्यक्तिगत उपयोग के लिए है. कृपया YouTube की सेवा की शर्तों और सामग्री निर्माताओं के अधिकारों का सम्मान करें।
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
❤️ के साथ [oop7](https://github.com/oop7) द्वारा बनाया गया
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Pengunduh YouTube modern dengan antarmuka PySide6 yang bersih.**
|
||||
Unduh video dalam kualitas apa pun, ekstrak audio, ambil subtitle, dan banyak lagi.
|
||||
|
||||
### 🌍 README Bahasa
|
||||
|
||||
Bahasa Inggris: [EN](../README.md)
|
||||
| Nilai: [AR](README.ar.md)
|
||||
| Jerman: [DE](README.de.md)
|
||||
| Spanyol: [ES](README.es.md)
|
||||
| Perancis: [FR](README.fr.md)
|
||||
| nilai: [HI](README.hi.md)
|
||||
| Bahasa Indonesia: [ID](README.id.md)
|
||||
| Italia: [IT](README.it.md)
|
||||
| Nilai: [JA](README.ja.md)
|
||||
| Polski: [PL](README.pl.md)
|
||||
| Portugis: [PT](README.pt.md)
|
||||
| Jawaban: [RU](README.ru.md)
|
||||
| Turki: [TR](README.tr.md)
|
||||
| nama: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Instalasi</a> •
|
||||
<a href="#features">Fitur</a> •
|
||||
<a href="#usage">Penggunaan</a> •
|
||||
<a href="#screenshots">Tangkapan Layar</a> •
|
||||
<a href="#troubleshooting">Pemecahan Masalah</a> •
|
||||
<a href="#sponsor">Sponsor</a> •
|
||||
<a href="#contributing">Berkontribusi</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ Mengapa YTSage?
|
||||
|
||||
YTSage dirancang untuk pengguna yang menginginkan **pengunduh YouTube yang sederhana namun kuat**. Tidak seperti alat lainnya, alat ini menawarkan:
|
||||
|
||||
- Antarmuka PySide6 yang bersih dan modern
|
||||
- Unduhan sekali klik untuk video, audio, dan subtitle
|
||||
- Fitur lanjutan seperti SponsorBlock, penggabungan subtitle, dan pemilihan playlist
|
||||
- Mode Generik Opsional untuk situs yang didukung yt-dlp di luar YouTube
|
||||
- Dukungan lintas platform dan instalasi mudah
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Fitur
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Fitur Inti | Fitur Lanjutan | Fitur Ekstra |
|
||||
|----------------------------------||-----------------------------------------|------------------------------------|
|
||||
| 🎥 Format Tabel | 🚫 Integrasi Blok Sponsor | 🎞️ Tampilan FPS/HDR |
|
||||
| 🎵 Ekstraksi Audio | 📝 Pilih & Gabungkan Multi-Subjudul | 🔄 Perbarui Otomatis yt-dlp |
|
||||
| ✨ UI Sederhana | 💾 Simpan Deskripsi & Gambar Kecil | 🛠️ Deteksi FFmpeg/yt-dlp/Deno |
|
||||
| 📋 Dukungan & Pemilih Daftar Putar | 🚀 Pembatas Kecepatan | ⚙️ Perintah Khusus |
|
||||
| 📑 Sematkan Bab | ✂️ Pangkas Bagian Video | 🍪 Masuk dengan Cookie |
|
||||
| 📜 Unduh Riwayat | 🔄 Rilis Pilihan Saluran | 🌐 Dukungan Proksi |
|
||||
| 🎚️ Konversi Format Audio | 🎬 Pengaturan Format Video | 🆙 Tab Pembaruan Bawaan |
|
||||
| 🌍 Mode Generik | 🔊 Normalisasi Audio (EBU R128) | 🌍 Lokalisasi dalam 14 Bahasa |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Instalasi
|
||||
|
||||
### ⚡ Instal Cepat (Disarankan)
|
||||
|
||||
Instal YTSage dari PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Perbarui instalasi yang ada</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Kemudian luncurkan aplikasi:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Executable yang sudah dibuat sebelumnya
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Jendela
|
||||
|
||||
| Format | Deskripsi |
|
||||
|--------|-------------|
|
||||
|  | Pemasang standar |
|
||||
|  | Dengan FFmpeg dibundel |
|
||||
|  | Versi portabel, tidak perlu instalasi |
|
||||
|  | Portabel dengan FFmpeg, zip |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Langkah Instalasi</summary>
|
||||
|
||||
1. **EXE Installer (`.exe`)**: Klik dua kali file tersebut dan ikuti panduan pengaturan.
|
||||
2. **Versi Portabel (`.zip`)**: Ekstrak arsip ke lokasi yang Anda inginkan dan jalankan `ytsage.exe`.
|
||||
3. **FFmpeg Bundled**: Pilih versi paket FFmpeg jika Anda belum menginstal FFmpeg di sistem Anda.
|
||||
</details>
|
||||
|
||||
#### 🐧 Linux
|
||||
|
||||
| Format | Deskripsi |
|
||||
|--------|-------------|
|
||||
|  | Paket Debian |
|
||||
|  | AppImage, portabel |
|
||||
|  | Paket RPM |
|
||||
|  | Paket Flatpak |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Langkah Instalasi</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **Gambar Aplikasi (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: Ikuti instruksi di Flathub atau jalankan:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
| Format | Deskripsi |
|
||||
|--------|-------------|
|
||||
|  | Aplikasi zip untuk Apple Silicon |
|
||||
|  | Penginstal gambar disk untuk Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Langkah Instalasi</summary>
|
||||
|
||||
- **Pemasang DMG (`.dmg`)**: Klik dua kali untuk memasang, lalu seret `YTSage.app` ke dalam folder Aplikasi Anda.
|
||||
- **Arsip Aplikasi (`.zip`)**: Ekstrak zip dan pindahkan `YTSage.app` ke folder Aplikasi Anda.
|
||||
|
||||
*Catatan: Jika Anda mengalami kesalahan "Aplikasi rusak", lihat [macOS troubleshooting section](#troubleshooting) di bawah.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Instalasi Manual dari Sumber</summary>
|
||||
|
||||
### 1. Kloning Repositori
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Instal Dependensi
|
||||
|
||||
#### ⚡ Dengan UV
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Atau dengan pip standar
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Jalankan Aplikasi
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Tangkapan layar
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Pengaturan Unduhan</em></td>
|
||||
<td align="center"><em>Unduh Daftar Putar</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Format Audio</em></td>
|
||||
<td align="center"><em>Opsi Khusus</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Penggunaan
|
||||
|
||||
<details>
|
||||
<summary>🎯 Penggunaan Dasar</summary>
|
||||
|
||||
1. **Luncurkan YTSage**
|
||||
2. **Tempel URL YouTube** (atau gunakan tombol "Tempel URL")
|
||||
3. **Klik "Analisis"**
|
||||
4. **Pilih Format:**
|
||||
- `Video` untuk mengunduh video
|
||||
- `Audio Only` untuk ekstraksi audio
|
||||
5. **Pilih Opsi:**
|
||||
- Aktifkan subtitle & pilih bahasa
|
||||
- Aktifkan penggabungan subtitle
|
||||
- Simpan gambar kecil
|
||||
- Hapus segmen sponsor
|
||||
- Simpan deskripsi
|
||||
- Sematkan bab
|
||||
6. **Pilih Direktori Keluaran**
|
||||
7. **Klik "Unduh"**
|
||||
|
||||
> 💡 Direktori unduhan default adalah folder "Unduhan" milik pengguna.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Unduh Daftar Putar</summary>
|
||||
|
||||
1. **Tempel URL Daftar Putar**
|
||||
2. **Klik "Analisis"**
|
||||
3. **Pilih video dari pemilih daftar putar (opsional, default untuk semua)**
|
||||
4. **Pilih format/kualitas yang diinginkan**
|
||||
5. **Klik "Unduh"**
|
||||
|
||||
> 💡 Aplikasi secara otomatis menangani antrian unduhan
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Mode Generik untuk situs non-YouTube</summary>
|
||||
|
||||
Gunakan Mode Generik bila Anda ingin YTSage menerima URL dari situs yang didukung oleh yt-dlp, seperti Dailymotion, CBC Gem, TikTok, dan lainnya.
|
||||
|
||||
Cara menggunakannya:
|
||||
|
||||
1. Buka `Download Settings`.
|
||||
2. Aktifkan `Generic Mode`.
|
||||
3. Tempelkan URL video atau playlist non-YouTube yang didukung.
|
||||
4. Klik `Analyze`.
|
||||
5. Pilih format dan unduh seperti biasa.
|
||||
|
||||
Catatan:
|
||||
|
||||
- Mode Generik hanya mengubah validasi URL di dalam YTSage. Situs target harus tetap didukung oleh versi yt-dlp yang Anda instal.
|
||||
- Beberapa situs memerlukan cookie, sesi login, proxy, atau argumen yt-dlp tambahan tergantung pada ekstraktornya.
|
||||
- Jika situs gagal, perbarui yt-dlp terlebih dahulu dari tab pembaru bawaan sebelum melaporkan masalah tersebut.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Opsi Media dan Unduhan</summary>
|
||||
|
||||
- **Opsi Subtitle:** Filter bahasa dan sematkan subtitle ke dalam file video
|
||||
- **Penggabungan Subtitle:** Menggabungkan subtitle ke dalam file video untuk subtitle hardcode
|
||||
- **Simpan Deskripsi:** Simpan deskripsi video sebagai file teks
|
||||
- **Simpan Gambar Kecil:** Menyimpan gambar kecil video sebagai file gambar
|
||||
- **Sematkan Bab:** Sematkan penanda bab sebagai metadata untuk pemutar video yang kompatibel
|
||||
- **Hapus Segmen Sponsor:** Hapus segmen sponsor dari video menggunakan SponsorBlock
|
||||
- **Pangkas Video:** Unduh hanya bagian tertentu dari video dengan menentukan rentang waktu dalam format `HH:MM:SS`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Pengaturan Output dan File</summary>
|
||||
|
||||
- **Pembatas Kecepatan:** Batasi kecepatan unduh, misalnya `500K` sebesar 500 KB/dtk
|
||||
- **Simpan Jalur Unduhan:** Simpan jalur unduhan default untuk unduhan berikutnya. Tersedia di **Pengaturan Unduhan → Jalur Unduhan**.
|
||||
- **Format Nama File Keluaran:** Sesuaikan format nama file keluaran menggunakan variabel seperti `%(title)s`, `%(uploader)s`, dan `%(resolution)s`. Tersedia di **Pengaturan Unduhan → Format Nama File**.
|
||||
- **Format Output Paksa:** Paksa pengunduhan video ke dalam format wadah tertentu seperti `mp4`, `webm`, atau `mkv`. Tersedia di **Pengaturan Unduhan → Pengaturan Format Output**.
|
||||
- **Konversi Format Audio:** Konversi unduhan audio saja ke format pilihan seperti `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, atau `Best`. Tersedia di **Pengaturan Unduhan → Pengaturan Format Audio**.
|
||||
- **Normalisasi Audio:** Standarkan volume untuk unduhan audio saja menggunakan EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Akses dan Jaringan</summary>
|
||||
|
||||
- **Masuk dengan Cookie:** Masuk ke YouTube menggunakan cookie untuk mengakses konten pribadi.
|
||||
Cara menggunakannya:
|
||||
1. **Disarankan:** Gunakan opsi `Extract cookies from browser` bawaan di aplikasi, lalu pilih browser Anda dan opsional profil.
|
||||
2. Alternatifnya, ekstrak cookie secara manual:
|
||||
sebuah. Ekspor cookie dari browser Anda menggunakan ekstensi seperti [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
b. Salin cookie dalam format Netscape
|
||||
c. Buat file bernama `cookies.txt` dan tempel cookie ke dalamnya
|
||||
d. Pilih file `cookies.txt` di aplikasi
|
||||
- **Dukungan Proxy:** Gunakan server proxy untuk mendownload, misalnya `http://<proxy-server>:<port>`
|
||||
- **Mode Generik:** Izinkan YTSage menganalisis dan mengunduh dari situs non-YouTube yang didukung oleh yt-dlp. Aktifkan dari **Pengaturan Unduhan → Mode Generik**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Alat dan Perawatan</summary>
|
||||
|
||||
- **Perintah Khusus:** Akses fitur yt-dlp tingkat lanjut melalui argumen baris perintah
|
||||
- **Tab Pembaruan:** Kelola alat pembaruan bawaan dari satu tempat di Opsi Kustom:
|
||||
- **Pembaruan yt-dlp:** Periksa pembaruan dan beralih antara saluran rilis Stabil dan Malam
|
||||
- **Pemeriksa Versi FFmpeg:** Periksa versi FFmpeg Anda dan buka panduan instalasi
|
||||
- **Pembaruan Deno:** Periksa dan perbarui runtime Deno
|
||||
- **Deteksi FFmpeg/yt-dlp/Deno:** Secara otomatis mendeteksi jalur dan versi FFmpeg, yt-dlp, dan Deno dari dialog Tentang.
|
||||
- **Riwayat Unduhan:** Lihat unduhan sebelumnya dengan thumbnail dan status dari tombol **Riwayat**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Lokalisasi</summary>
|
||||
|
||||
YTSage mendukung **14 bahasa** untuk aksesibilitas di seluruh dunia. Pilih bahasa pilihan Anda dari **Opsi Kustom → Bahasa**.
|
||||
|
||||
### Bahasa yang Didukung
|
||||
|
||||
| Bahasa | Kode | Bahasa | Kode |
|
||||
|----------|------|----------|------|
|
||||
| 🇮🇩 Bahasa Inggris | `en` | 🇪🇪 Spanyol | `es` |
|
||||
| Arab Saudi | `ar` | 🇫🇷 Perancis | `fr` |
|
||||
| 🇩🇪 Jerman | `de` | 🇮🇩 Hindi | `hi` |
|
||||
| 🇮🇩 Bahasa Indonesia | `id` | 🇮🇹 Italia | `it` |
|
||||
| 🇯ppa Jepang | `ja` | 🇱 Polandia | `pl` |
|
||||
| 🇧🇷 Portugis | `pt` | 🇷л Rusia | `ru` |
|
||||
| 🇹🇷 Turki | `tr` | CNY Cina | `zh` |
|
||||
|
||||
### README Terjemahan
|
||||
|
||||
| Bahasa | Berkas | Bahasa | Berkas |
|
||||
|----------|------|----------|------|
|
||||
| 🇮🇩 Bahasa Inggris | [README.md](../README.md) | 🇪🇪 Spanyol | [README.es.md](README.es.md)
|
||||
| Arab Saudi | [README.ar.md](README.ar.md) | 🇫🇷 Perancis | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 Jerman | [README.de.md](README.de.md) | 🇮🇩 Hindi | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Bahasa Indonesia | [README.id.md](README.id.md) | 🇮🇹 Italia | [README.it.md](README.it.md) |
|
||||
| 🇯ppa Jepang | [README.ja.md](README.ja.md) | 🇱 Polandia | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Portugis | [README.pt.md](README.pt.md) | 🇷л Rusia | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Turki | [README.tr.md](README.tr.md) | CNY Cina | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Ingin berkontribusi terjemahan?** Lihat bagian [Contributing](#contributing) untuk membantu kami menambahkan lebih banyak bahasa!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Pemecahan masalah
|
||||
|
||||
<details>
|
||||
<summary>Klik untuk melihat masalah umum dan solusinya</summary>
|
||||
|
||||
- **Format tabel tidak ditampilkan:** Perbarui yt-dlp ke versi terbaru, dan beralih ke yt-dlp setiap malam.
|
||||
- **Pengunduhan gagal:** Periksa koneksi internet Anda dan pastikan video tersedia.
|
||||
- **Kesalahan pengunduhan tertentu:**
|
||||
- **Video pribadi:** Gunakan autentikasi cookie untuk mengakses konten pribadi.
|
||||
- **Konten dengan batasan usia:** Masuk ke akun YouTube untuk melihat video dengan batasan usia.
|
||||
- **Video yang diblokir secara geografis:** Pertimbangkan untuk menggunakan VPN untuk melewati batasan regional.
|
||||
- **Video yang dihapus/dihapus:** Video tidak lagi tersedia di YouTube.
|
||||
- **Streaming langsung:** Streaming langsung tidak dapat diunduh; tunggu hingga streaming berakhir.
|
||||
- **Kesalahan jaringan:** Periksa koneksi internet Anda dan coba lagi.
|
||||
- **URL tidak valid:** Pastikan URL benar dan berasal dari platform yang didukung.
|
||||
- **Konten premium:** Memerlukan keanggotaan YouTube Premium.
|
||||
- **Pemblokiran hak cipta:** Konten diblokir karena pembatasan hak cipta.
|
||||
- **Pisahkan file video dan audio setelah diunduh:** Ini terjadi jika FFmpeg hilang atau tidak terdeteksi. YTSage memerlukan FFmpeg untuk menggabungkan aliran video dan audio berkualitas tinggi.
|
||||
- **Solusi:** Pastikan FFmpeg diinstal dan dapat diakses di PATH sistem Anda. Untuk pengguna Windows, opsi termudah adalah mengunduh file `YTSage-v<version>-ffmpeg.exe`, yang disertakan dengan FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Peringatan Windows Defender / Antivirus
|
||||
|
||||
Beberapa perangkat lunak antivirus mungkin menandai file `.exe` sebagai positif palsu. Ini adalah **batasan umum** pada aplikasi paket.
|
||||
|
||||
**Mengapa ini terjadi:**
|
||||
- Heuristik antivirus dapat salah mengidentifikasi executable yang dikemas sebagai sesuatu yang mencurigakan
|
||||
|
||||
**Alternatif yang aman:**
|
||||
- ✅ **Gunakan instalasi pip:** `pip install ytsage` (disarankan)
|
||||
- ✅ **Bangun dari sumber**: dengan mengikuti [guide](../.github/CI_CD_README.md) ini
|
||||
- ✅ **Masukkan aplikasi ke daftar putih** di perangkat lunak antivirus Anda
|
||||
|
||||
#### 🍎 macOS: "Aplikasi rusak dan tidak dapat dibuka"
|
||||
Jika Anda melihat kesalahan ini di macOS Sonoma atau lebih baru, Anda harus menghapus atribut karantina.
|
||||
|
||||
1. **Buka Terminal** (Anda dapat menemukannya menggunakan Spotlight).
|
||||
2. **Ketik perintah berikut** tetapi **jangan** tekan Enter dulu. Pastikan untuk menyertakan spasi di akhir:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Seret file `YTSage.app`** dari jendela Finder Anda dan letakkan langsung ke jendela Terminal. Ini secara otomatis akan menempelkan jalur file yang benar.
|
||||
4. **Tekan Enter** untuk menjalankan perintah.
|
||||
5. **Coba buka YTSage.app lagi.** Sekarang seharusnya sudah diluncurkan dengan benar.
|
||||
|
||||
---
|
||||
|
||||
#### **Lokasi Konfigurasi (Lanjutan)**
|
||||
- **Jendela:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Sponsor
|
||||
|
||||
Jika YTSage menghemat waktu Anda, pertimbangkan untuk mensponsori proyek tersebut. Sponsor membantu menutupi waktu pengembangan, pengujian lintas platform, dan peningkatan di masa depan.
|
||||
|
||||
- Sponsor GitHub: https://github.com/sponsors/oop7
|
||||
- Tautan sponsor juga tersedia langsung di dalam aplikasi dari dialog Tentang.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Berkontribusi
|
||||
|
||||
Kami menyambut kontribusi! Inilah cara Anda dapat membantu:
|
||||
|
||||
1. 🍴 Cabangkan repositori
|
||||
2. 🌿 Buat cabang fitur Anda:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Komit perubahan Anda:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Dorong ke cabang:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Buka Permintaan Tarik
|
||||
|
||||
### 🌍 Berkontribusi pada Terjemahan
|
||||
|
||||
- Perbarui file README lokal yang cocok (misalnya `README.es.md`)
|
||||
- Jaga agar string aplikasi tetap sinkron dengan mengedit `ytsage/languages/<code>.json`
|
||||
- Jika bahasa Anda hilang, mulai dari `README.md` dan buat `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Struktur Proyek</summary>
|
||||
|
||||
## YTSage - Struktur Proyek
|
||||
|
||||
Dokumen ini menjelaskan struktur folder YTSage yang terorganisir.
|
||||
|
||||
### 📁 Struktur Proyek
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Sejarah Bintang
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Sejarah Bintang
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Lisensi
|
||||
|
||||
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file [LICENSE](../LICENSE) untuk detailnya.
|
||||
|
||||
## 🙏 Ucapan Terima Kasih
|
||||
|
||||
<details>
|
||||
<summary>Tampilkan Ucapan Terima Kasih</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Terima kasih yang sebesar-besarnya kepada semua orang yang telah berkontribusi pada proyek ini dengan membuka terbitan untuk menyarankan perbaikan atau melaporkan bug.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Komponen Inti</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Mesin Unduh</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Pemrosesan Media</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Waktu proses untuk integrasi dengan yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Perpustakaan & Kerangka Kerja</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>Kerangka GUI</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Bantal</a></td>
|
||||
<td>Pemrosesan Gambar</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">permintaan</a></td>
|
||||
<td>Permintaan HTTP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">kemasan</a></td>
|
||||
<td>Penanganan Versi & Paket</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">penurunan harga</a></td>
|
||||
<td>Render Penurunan Harga</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">logguru</a></td>
|
||||
<td>Pencatatan</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Aset & Kontributor</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Pemberitahuan Baru 09 oleh Universfield</a></td>
|
||||
<td>Suara Notifikasi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">virus185</a></td>
|
||||
<td>Kontributor Kode</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Penafian
|
||||
|
||||
Alat ini hanya untuk penggunaan pribadi. Harap hormati persyaratan layanan YouTube dan hak pembuat konten.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Dibuat dengan ❤️ oleh [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Un moderno downloader da YouTube con un'interfaccia PySide6 pulita.**
|
||||
Scarica video di qualsiasi qualità, estrai audio, recupera sottotitoli e altro ancora.
|
||||
|
||||
### 🌍 README Lingue
|
||||
|
||||
Inglese: [EN](../README.md)
|
||||
| Indirizzo: [AR](README.ar.md)
|
||||
| Tedesco: [DE](README.de.md)
|
||||
| Español: [ES](README.es.md)
|
||||
| Francese: [FR](README.fr.md)
|
||||
| Nome: [HI](README.hi.md)
|
||||
| Bahasa Indonesia: [ID](README.id.md)
|
||||
| Italiano: [IT](README.it.md)
|
||||
| 日本語: [JA](README.ja.md)
|
||||
| Polacco: [PL](README.pl.md)
|
||||
| Portoghese: [PT](README.pt.md)
|
||||
| Russo: [RU](README.ru.md)
|
||||
| Turchia: [TR](README.tr.md)
|
||||
| Nome: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Installazione</a> •
|
||||
<a href="#features">Caratteristiche</a> •
|
||||
<a href="#usage">Utilizzo</a> •
|
||||
<a href="#screenshots">Screenshot</a> •
|
||||
<a href="#troubleshooting">Risoluzione dei problemi</a> •
|
||||
<a href="#sponsor">Sponsor</a> •
|
||||
<a href="#contributing">Contribuendo</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓Perché YTSage?
|
||||
|
||||
YTSage è progettato per gli utenti che desiderano un **downloader YouTube semplice ma potente**. A differenza di altri strumenti, offre:
|
||||
|
||||
- Un'interfaccia PySide6 pulita e moderna
|
||||
- Download con un clic per video, audio e sottotitoli
|
||||
- Funzionalità avanzate come SponsorBlock, fusione dei sottotitoli e selezione della playlist
|
||||
- Modalità generica opzionale per i siti supportati da yt-dlp oltre YouTube
|
||||
- Supporto multipiattaforma e facilità di installazione
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨Caratteristiche
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Caratteristiche principali | Funzionalità avanzate | Funzionalità extra |
|
||||
|------------------------------------|----------------------------------------------|------------------------------------|
|
||||
| 🎥 Tabella dei formati | 🚫Integrazione SponsorBlock | 🎞️ Visualizzazione FPS/HDR |
|
||||
| 🎵Estrazione audio | 📝 Seleziona e unisci più sottotitoli | 🔄 Aggiornamento automatico yt-dlp |
|
||||
| ✨Interfaccia utente semplice | 💾 Salva descrizione e miniatura | 🛠️ Rilevamento FFmpeg/yt-dlp/Deno |
|
||||
| 📋 Supporto e selettore playlist | 🚀Limitatore di velocità | ⚙️ Comandi personalizzati |
|
||||
| 📑 Incorpora capitoli | ✂️ Taglia le sezioni video | 🍪 Accedi con i cookie |
|
||||
| 📜 Scarica Cronologia | 🔄 Rilascio Selezione canale | 🌐Supporto proxy |
|
||||
| 🎚️ Conversione del formato audio | 🎬 Impostazioni formato video | 🆙 Scheda Aggiornamento integrata |
|
||||
| 🌍 Modalità generica | 🔊 Normalizzazione audio (EBU R128) | 🌍 Localizzazione in 14 lingue |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Installazione
|
||||
|
||||
### ⚡ Installazione rapida (consigliata)
|
||||
|
||||
Installa YTSage da PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Aggiorna un'installazione esistente</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Quindi avvia l'app:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Eseguibili predefiniti
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Finestre
|
||||
|
||||
| Formato | Descrizione |
|
||||
|--------|-------------|
|
||||
|  | Programma di installazione standard |
|
||||
|  | Con FFmpeg in bundle |
|
||||
|  | Versione portatile, nessuna installazione richiesta |
|
||||
|  | Portatile con FFmpeg, zippato |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Passaggi di installazione</summary>
|
||||
|
||||
1. **Programma di installazione EXE (`.exe`)**: fare doppio clic sul file e seguire la procedura guidata di installazione.
|
||||
2. **Versione portatile (`.zip`)**: estrai l'archivio nella posizione desiderata ed esegui `ytsage.exe`.
|
||||
3. **FFmpeg in bundle**: scegli le versioni in bundle di FFmpeg se non hai FFmpeg installato sul tuo sistema.
|
||||
</details>
|
||||
|
||||
#### 🐧Linux
|
||||
|
||||
| Formato | Descrizione |
|
||||
|--------|-------------|
|
||||
|  | Pacchetto Debian |
|
||||
|  | AppImage, portatile |
|
||||
|  | Pacchetto RPM |
|
||||
|  | Pacchetto Flatpack |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Passaggi di installazione</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **Giri/min (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **AppImage (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: segui le istruzioni su Flathub o esegui:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
| Formato | Descrizione |
|
||||
|--------|-------------|
|
||||
|  | Applicazione zippata per Apple Silicon |
|
||||
|  | Programma di installazione dell'immagine disco per Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Passaggi di installazione</summary>
|
||||
|
||||
- **DMG Installer (`.dmg`)**: fai doppio clic per montare, quindi trascina `YTSage.app` nella cartella Applicazioni.
|
||||
- **Archivio app (`.zip`)**: estrai il file zip e sposta `YTSage.app` nella cartella Applicazioni.
|
||||
|
||||
*Nota: se riscontri l'errore "L'app è danneggiata", consulta [macOS troubleshooting section](#troubleshooting) di seguito.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Installazione manuale dalla fonte</summary>
|
||||
|
||||
### 1. Clonare il repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Installa le dipendenze
|
||||
|
||||
#### ⚡ Con uv
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Oppure con pip standard
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Eseguire l'applicazione
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Schermate
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Scarica impostazioni</em></td>
|
||||
<td align="center"><em>Scarica playlist</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Formato audio</em></td>
|
||||
<td align="center"><em>Opzioni personalizzate</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Utilizzo
|
||||
|
||||
<details>
|
||||
<summary>🎯 Utilizzo di base</summary>
|
||||
|
||||
1. **Avvia YTSage**
|
||||
2. **Incolla l'URL di YouTube** (o utilizza il pulsante "Incolla URL")
|
||||
3. **Fai clic su "Analizza"**
|
||||
4. **Seleziona formato:**
|
||||
- `Video` per i download di video
|
||||
- `Audio Only` per l'estrazione audio
|
||||
5. **Scegli le opzioni:**
|
||||
- Abilita i sottotitoli e seleziona la lingua
|
||||
- Abilita l'unione dei sottotitoli
|
||||
- Salva miniatura
|
||||
- Rimuovere i segmenti dello sponsor
|
||||
- Salva descrizione
|
||||
- Incorpora capitoli
|
||||
6. **Seleziona directory di output**
|
||||
7. **Fai clic su "Scarica"**
|
||||
|
||||
> 💡 La directory di download predefinita è la cartella "Download" dell'utente.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Download della playlist</summary>
|
||||
|
||||
1. **Incolla l'URL della playlist**
|
||||
2. **Fai clic su "Analizza"**
|
||||
3. **Seleziona i video dal selettore della playlist (facoltativo, l'impostazione predefinita è tutti)**
|
||||
4. **Scegli il formato/la qualità desiderata**
|
||||
5. **Fai clic su "Scarica"**
|
||||
|
||||
> 💡 L'applicazione gestisce automaticamente la coda di download
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Modalità generica per siti non YouTube</summary>
|
||||
|
||||
Utilizza la modalità generica quando desideri che YTSage accetti URL da siti supportati da yt-dlp, come Dailymotion, CBC Gem, TikTok e altri.
|
||||
|
||||
Come usarlo:
|
||||
|
||||
1. Apri `Download Settings`.
|
||||
2. Abilita `Generic Mode`.
|
||||
3. Incolla un video o un URL di playlist non YouTube supportato.
|
||||
4. Fare clic su `Analyze`.
|
||||
5. Scegli un formato e scarica come al solito.
|
||||
|
||||
Note:
|
||||
|
||||
- La modalità generica modifica solo la convalida dell'URL all'interno di YTSage. Il sito di destinazione deve essere ancora supportato dalla versione yt-dlp installata.
|
||||
- Alcuni siti richiedono cookie, una sessione di accesso, un proxy o argomenti yt-dlp aggiuntivi a seconda dell'estrattore.
|
||||
- Se un sito non funziona, aggiorna prima yt-dlp dalla scheda di aggiornamento integrata prima di segnalare il problema.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Opzioni multimediali e di download</summary>
|
||||
|
||||
- **Opzioni sottotitoli:** Filtra le lingue e incorpora i sottotitoli nel file video
|
||||
- **Unione sottotitoli:** unisci i sottotitoli nel file video per i sottotitoli hardcoded
|
||||
- **Salva descrizione:** salva la descrizione del video come file di testo
|
||||
- **Salva miniatura:** salva la miniatura del video come file immagine
|
||||
- **Incorpora capitoli:** incorpora indicatori di capitolo come metadati per lettori video compatibili
|
||||
- **Rimuovi segmenti di sponsor:** rimuovi i segmenti di sponsor dal video utilizzando SponsorBlock
|
||||
- **Taglia video:** scarica solo parti specifiche di un video specificando gli intervalli di tempo nel formato `HH:MM:SS`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Impostazioni file e output</summary>
|
||||
|
||||
- **Limitatore di velocità:** Limita la velocità di download, ad esempio `500K` per 500 KB/s
|
||||
- **Salva percorso di download:** salva il percorso di download predefinito per download futuri. Disponibile in **Impostazioni di download → Percorso di download**.
|
||||
- **Formato nome file di output:** Personalizza il formato del nome file di output utilizzando variabili come `%(title)s`, `%(uploader)s` e `%(resolution)s`. Disponibile in **Impostazioni download → Formato nome file**.
|
||||
- **Forza formato output:** forza i download dei video in un formato contenitore specifico come `mp4`, `webm` o `mkv`. Disponibile in **Impostazioni download → Impostazioni formato output**.
|
||||
- **Conversione del formato audio:** Converti i download solo audio nei formati preferiti come `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, o `Best`. Disponibile in **Impostazioni download → Impostazioni formato audio**.
|
||||
- **Normalizzazione audio:** Standardizza il volume per i download solo audio utilizzando EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Accesso e Rete</summary>
|
||||
|
||||
- **Accedi con i cookie:** Accedi a YouTube utilizzando i cookie per accedere ai contenuti privati.
|
||||
Come usarlo:
|
||||
1. **Consigliato:** utilizza l'opzione `Extract cookies from browser` integrata nell'app, quindi seleziona il browser e, facoltativamente, un profilo.
|
||||
2. In alternativa, estrarre manualmente i cookie:
|
||||
un. Esporta i cookie dal tuo browser utilizzando un'estensione come [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
b. Copia i cookie in formato Netscape
|
||||
c. Crea un file denominato `cookies.txt` e incollaci i cookie
|
||||
d. Seleziona il file `cookies.txt` nell'app
|
||||
- **Supporto proxy:** utilizza un server proxy per i download, ad esempio `http://<proxy-server>:<port>`
|
||||
- **Modalità generica:** consente a YTSage di analizzare e scaricare da siti non YouTube supportati da yt-dlp. Abilitalo da **Impostazioni download → Modalità generica**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Attrezzi e Manutenzione</summary>
|
||||
|
||||
- **Comandi personalizzati:** accedi alle funzionalità avanzate di yt-dlp tramite argomenti della riga di comando
|
||||
- **Scheda Aggiornamento:** gestisci gli strumenti di aggiornamento integrati da un'unica posizione in Opzioni personalizzate:
|
||||
- **Aggiornamenti yt-dlp:** controlla gli aggiornamenti e passa tra i canali di rilascio stabile e notturno
|
||||
- **Controllo versione FFmpeg:** controlla la tua versione di FFmpeg e apri le guide di installazione
|
||||
- **Aggiornamenti Deno:** controlla e aggiorna il runtime Deno
|
||||
- **Rilevamento FFmpeg/yt-dlp/Deno:** rileva automaticamente i percorsi e le versioni di FFmpeg, yt-dlp e Deno dalla finestra di dialogo Informazioni.
|
||||
- **Cronologia download:** visualizza i download precedenti con miniature e stati dal pulsante **Cronologia**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Localizzazione</summary>
|
||||
|
||||
YTSage supporta **14 lingue** per l'accessibilità in tutto il mondo. Seleziona la tua lingua preferita da **Opzioni personalizzate → Lingua**.
|
||||
|
||||
### Lingue supportate
|
||||
|
||||
| Lingua | Codice | Lingua | Codice |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Inglese | `en` | 🇪🇸Spagnolo | `es` |
|
||||
| 🇸🇦 Arabo | `ar` | 🇫🇷 Francese | `fr` |
|
||||
| 🇩🇪 Tedesco | `de` | 🇮🇳 Hindi | `hi` |
|
||||
| 🇮🇩 Indonesiano | `id` | 🇮🇹Italiano | `it` |
|
||||
| 🇯🇵Giapponese | `ja` | 🇵🇱 Polacco | `pl` |
|
||||
| 🇧🇷 Portoghese | `pt` | 🇷🇺 Russo | `ru` |
|
||||
| 🇹🇷 Turco | `tr` | 🇨🇳Cinese | `zh` |
|
||||
|
||||
### Traduzioni README
|
||||
|
||||
| Lingua | File | Lingua | File |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Inglese | [README.md](../README.md) | 🇪🇸Spagnolo | [README.es.md](README.es.md)
|
||||
| 🇸🇦 Arabo | [README.ar.md](README.ar.md) | 🇫🇷 Francese | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 Tedesco | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Indonesiano | [README.id.md](README.id.md) | 🇮🇹Italiano | [README.it.md](README.it.md) |
|
||||
| 🇯🇵Giapponese | [README.ja.md](README.ja.md) | 🇵🇱 Polacco | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Portoghese | [README.pt.md](README.pt.md) | 🇷🇺 Russo | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Turco | [README.tr.md](README.tr.md) | 🇨🇳Cinese | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Vuoi contribuire con una traduzione?** Dai un'occhiata alla sezione [Contributing](#contributing) per aiutarci ad aggiungere altre lingue!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Risoluzione dei problemi
|
||||
|
||||
<details>
|
||||
<summary>Fai clic per visualizzare problemi e soluzioni comuni</summary>
|
||||
|
||||
- **La tabella di formato non viene visualizzata:** Aggiorna yt-dlp alla versione più recente e passa a yt-dlp ogni notte.
|
||||
- **Download non riuscito:** controlla la tua connessione Internet e assicurati che il video sia disponibile.
|
||||
- **Errori di download specifici:**
|
||||
- **Video privati:** utilizza l'autenticazione tramite cookie per accedere ai contenuti privati.
|
||||
- **Contenuti soggetti a limiti di età:** accedi all'account YouTube per visualizzare video soggetti a limiti di età.
|
||||
- **Video geo-bloccati:** valuta la possibilità di utilizzare una VPN per aggirare le restrizioni regionali.
|
||||
- **Video rimossi/eliminati:** il video non è più disponibile su YouTube.
|
||||
- **Streaming live:** Gli streaming live non possono essere scaricati; attendere la fine dello streaming.
|
||||
- **Errori di rete:** controlla la connessione Internet e riprova.
|
||||
- **URL non validi:** assicurati che l'URL sia corretto e provenga da una piattaforma supportata.
|
||||
- **Contenuti premium:** richiede l'abbonamento a YouTube Premium.
|
||||
- **Blocchi dovuti al copyright:** Il contenuto è bloccato a causa di restrizioni sul copyright.
|
||||
- **Separare i file video e audio dopo il download:** Ciò accade quando FFmpeg manca o non viene rilevato. YTSage richiede FFmpeg per unire flussi video e audio di alta qualità.
|
||||
- **Soluzione:** assicurati che FFmpeg sia installato e accessibile nel PATH del tuo sistema. Per gli utenti Windows, l'opzione più semplice è scaricare il file `YTSage-v<version>-ffmpeg.exe`, fornito in bundle con FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Avviso Windows Defender/Antivirus
|
||||
|
||||
Alcuni software antivirus potrebbero contrassegnare i file `.exe` come falsi positivi. Questa è una **limitazione nota** delle applicazioni in pacchetto.
|
||||
|
||||
**Perché ciò accade:**
|
||||
- L'euristica dell'antivirus può identificare erroneamente gli eseguibili compressi come sospetti
|
||||
|
||||
**Alternative sicure:**
|
||||
- ✅ **Utilizza installazione pip:** `pip install ytsage` (consigliato)
|
||||
- ✅ **Crea dal codice sorgente**: seguendo questo [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Autorizza l'applicazione** nel tuo software antivirus
|
||||
|
||||
#### 🍎 macOS: "L'app è danneggiata e non può essere aperta"
|
||||
Se visualizzi questo errore su macOS Sonoma o versioni successive, devi rimuovere l'attributo quarantena.
|
||||
|
||||
1. **Apri Terminale** (puoi trovarlo utilizzando Spotlight).
|
||||
2. **Digita il seguente comando** ma **non** premere ancora Invio. Assicurati di includere lo spazio alla fine:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Trascina il file `YTSage.app`** dalla finestra del Finder e rilascialo direttamente nella finestra Terminale. Questo incollerà automaticamente il percorso file corretto.
|
||||
4. **Premere Invio** per eseguire il comando.
|
||||
5. **Prova ad aprire nuovamente YTSage.app.** Ora dovrebbe avviarsi correttamente.
|
||||
|
||||
---
|
||||
|
||||
#### **Posizioni di configurazione (avanzate)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Sponsor
|
||||
|
||||
Se YTSage ti fa risparmiare tempo, valuta la possibilità di sponsorizzare il progetto. La sponsorizzazione aiuta a coprire i tempi di sviluppo, i test su tutte le piattaforme e i miglioramenti futuri.
|
||||
|
||||
- Sponsor GitHub: https://github.com/sponsors/oop7
|
||||
- Il collegamento allo sponsor è disponibile anche direttamente all'interno dell'app dalla finestra di dialogo Informazioni.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Contribuire
|
||||
|
||||
Diamo il benvenuto ai contributi! Ecco come puoi aiutare:
|
||||
|
||||
1. 🍴 Effettua il fork del repository
|
||||
2. 🌿 Crea il tuo ramo di funzionalità:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Applica le tue modifiche:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Spingere verso il ramo:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Apri una richiesta di pull
|
||||
|
||||
### 🌍 Contribuire alle traduzioni
|
||||
|
||||
- Aggiorna il file README localizzato corrispondente (ad esempio `README.es.md`)
|
||||
- Mantieni sincronizzate le stringhe dell'app modificando `ytsage/languages/<code>.json`
|
||||
- Se manca la tua lingua, inizia da `README.md` e crea `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Struttura del progetto</summary>
|
||||
|
||||
## YTSage - Struttura del progetto
|
||||
|
||||
Questo documento descrive la struttura di cartelle organizzata di YTSage.
|
||||
|
||||
### 📁 Struttura del progetto
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Storia delle stelle
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Storia delle stelle
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Licenza
|
||||
|
||||
Questo progetto è concesso in licenza con la licenza MIT: per i dettagli vedere il file [LICENSE](../LICENSE).
|
||||
|
||||
## 🙏Ringraziamenti
|
||||
|
||||
<details>
|
||||
<summary>Mostra Ringraziamenti</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Un sentito ringraziamento a tutti coloro che hanno contribuito a questo progetto aprendo un issue per suggerire un miglioramento o segnalare un bug.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Componenti principali</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Scarica motore</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Elaborazione multimediale</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Runtime per integrazione con yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Librerie e framework</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>Framework GUI</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Cuscino</a></td>
|
||||
<td>Elaborazione immagini</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">richieste</a></td>
|
||||
<td>Richieste HTTP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">imballaggio</a></td>
|
||||
<td>Gestione versioni e pacchetti</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">ribasso</a></td>
|
||||
<td>Rendering riduzione</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Registrazione</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Risorse e contributori</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nuova notifica 09 di Universfield</a></td>
|
||||
<td>Suono di notifica</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Codice Contributore</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Disclaimer
|
||||
|
||||
Questo strumento è solo per uso personale. Rispetta i termini di servizio di YouTube e i diritti dei creatori di contenuti.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Realizzato con ❤️ da [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,617 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**クリーンな PySide6 インターフェイスを備えた最新の YouTube ダウンローダー。**
|
||||
任意の品質でビデオをダウンロードしたり、音声を抽出したり、字幕を取得したりできます。
|
||||
|
||||
### 🌍 README 言語
|
||||
|
||||
英語: [EN](../README.md)
|
||||
|番号: [AR](README.ar.md)
|
||||
|ドイツ語: [DE](README.de.md)
|
||||
|スペイン語: [ES](README.es.md)
|
||||
|フランセ: [FR](README.fr.md)
|
||||
|名前: [HI](README.hi.md)
|
||||
|インドネシア語: [ID](README.id.md)
|
||||
|イタリアーノ: [IT](README.it.md)
|
||||
| 日本語: [JA](README.ja.md)
|
||||
|ポルスキー: [PL](README.pl.md)
|
||||
|ポルトガル語: [PT](README.pt.md)
|
||||
| Русский: [RU](README.ru.md)
|
||||
|テュルクチェ: [TR](README.tr.md)
|
||||
| 中文: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">インストール</a> •
|
||||
<a href="#features">特徴</a> •
|
||||
<a href="#usage">使用方法</a> •
|
||||
<a href="#screenshots">スクリーンショット</a> •
|
||||
<a href="#troubleshooting">トラブルシューティング</a> •
|
||||
<a href="#sponsor">スポンサー</a> •
|
||||
<a href="#contributing">貢献しています</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ なぜ YTSage なのか?
|
||||
|
||||
YTSage は、**シンプルかつ強力な YouTube ダウンローダー**を求めるユーザー向けに設計されています。他のツールとは異なり、次の機能を提供します。
|
||||
|
||||
- クリーンでモダンな PySide6 インターフェイス
|
||||
- ワンクリックでビデオ、オーディオ、字幕をダウンロード
|
||||
- スポンサーブロック、字幕の結合、プレイリストの選択などの高度な機能
|
||||
- YouTube 以外の yt-dlp 対応サイト向けのオプションの汎用モード
|
||||
- クロスプラットフォームのサポートと簡単なインストール
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ 特徴
|
||||
|
||||
<div align="center">
|
||||
|
||||
|コア機能 |高度な機能 |追加機能 |
|
||||
|---------------------------------|-------------------------------------------|-------------------------------------|
|
||||
| 🎥 テーブルのフォーマット | 🚫 スポンサーブロックの統合 | 🎞️ FPS/HDR ディスプレイ |
|
||||
| 🎵 オーディオ抽出 | 📝 複数字幕の選択と結合 | 🔄 yt-dlp を自動更新 |
|
||||
| ✨シンプルなUI | 💾 説明とサムネイルを保存 | 🛠️ FFmpeg/yt-dlp/Deno 検出 |
|
||||
| 📋 プレイリストのサポートとセレクター | 🚀 スピードリミッター | ⚙️ カスタムコマンド |
|
||||
| 📑 章を埋め込む | ✂️ ビデオセクションをトリミング | 🍪 Cookie でログイン |
|
||||
| 📜 ダウンロード履歴 | 🔄 チャンネル選択をリリース | 🌐 プロキシサポート |
|
||||
| 🎚️ オーディオ形式変換 | 🎬 ビデオ形式設定 | 🆙 内蔵アップデータタブ |
|
||||
| 🌍 汎用モード | 🔊 オーディオ正規化 (EBU R128) | 🌍 14 言語のローカリゼーション |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 インストール
|
||||
|
||||
### ⚡ クイックインストール (推奨)
|
||||
|
||||
PyPI から YTSage をインストールします。
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 既存のインストールを更新します</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
次に、アプリを起動します。
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 ビルド済みの実行可能ファイル
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Windows
|
||||
|
||||
|フォーマット |説明 |
|
||||
|----------|---------------|
|
||||
|  |標準インストーラー |
|
||||
|  | FFmpeg がバンドルされている |
|
||||
|  |ポータブル版、インストール不要 |
|
||||
|  | FFmpeg、zip 形式でポータブル |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ インストール手順</summary>
|
||||
|
||||
1. **EXE インストーラー (`.exe`)**: ファイルをダブルクリックし、セットアップ ウィザードに従います。
|
||||
2. **ポータブル バージョン (`.zip`)**: アーカイブを目的の場所に解凍し、`ytsage.exe` を実行します。
|
||||
3. **FFmpeg バンドル**: システムに FFmpeg がインストールされていない場合は、FFmpeg バンドル バージョンを選択します。
|
||||
</details>
|
||||
|
||||
#### 🐧 Linux
|
||||
|
||||
|フォーマット |説明 |
|
||||
|----------|---------------|
|
||||
|  | Debian パッケージ |
|
||||
|  | AppImage、ポータブル |
|
||||
|  | RPM パッケージ |
|
||||
|  |フラットパックバンドル |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ インストール手順</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **アプリ画像 (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: Flathub の指示に従うか、次のコマンドを実行します。
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
|フォーマット |説明 |
|
||||
|----------|---------------|
|
||||
|  | Apple Silicon 用の ZIP アプリケーション |
|
||||
|  | Apple Silicon 用のディスク イメージ インストーラー |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ インストール手順</summary>
|
||||
|
||||
- **DMG インストーラー (`.dmg`)**: ダブルクリックしてマウントし、`YTSage.app` をアプリケーション フォルダーにドラッグします。
|
||||
- **アプリ アーカイブ (`.zip`)**: zip を解凍し、`YTSage.app` をアプリケーション フォルダーに移動します。
|
||||
|
||||
*注意:「アプリが破損しています」エラーが発生した場合は、以下の[macOS troubleshooting section](#troubleshooting)を参照してください。*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 ソースからの手動インストール</summary>
|
||||
|
||||
### 1. リポジトリのクローンを作成します
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. 依存関係をインストールする
|
||||
|
||||
#### ⚡ UV あり
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 または標準の pip を使用
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. アプリケーションを実行する
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 スクリーンショット
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>ダウンロード設定</em></td>
|
||||
<td align="center"><em>プレイリストダウンロード</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>オーディオフォーマット</em></td>
|
||||
<td align="center"><em>カスタム オプション</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 使用法
|
||||
|
||||
<details>
|
||||
<summary>🎯 基本的な使い方</summary>
|
||||
|
||||
1. **YTSage を起動**
|
||||
2. **YouTube URL を貼り付け** (または [URL を貼り付け] ボタンを使用)
|
||||
3. **「分析」をクリックします**
|
||||
4. **形式を選択します:**
|
||||
- `Video` ビデオダウンロード用
|
||||
- `Audio Only` 音声抽出用
|
||||
5. **オプションを選択します:**
|
||||
- 字幕を有効にし、言語を選択します
|
||||
- 字幕のマージを有効にする
|
||||
- サムネイルの保存
|
||||
- スポンサーセグメントの削除
|
||||
- 説明の保存
|
||||
- 章を埋め込む
|
||||
6. **出力ディレクトリを選択**
|
||||
7. **「ダウンロード」をクリックします**
|
||||
|
||||
> 💡 デフォルトのダウンロード ディレクトリは、ユーザーの「ダウンロード」フォルダーです。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 プレイリストのダウンロード</summary>
|
||||
|
||||
1. **プレイリストの URL を貼り付け**
|
||||
2. **「分析」をクリックします**
|
||||
3. **プレイリスト セレクターからビデオを選択します (オプション、デフォルトはすべて)**
|
||||
4. **希望の形式/品質を選択します**
|
||||
5. **「ダウンロード」をクリック**
|
||||
|
||||
> 💡 アプリケーションはダウンロードキューを自動的に処理します
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 YouTube 以外のサイトの汎用モード</summary>
|
||||
|
||||
Dailymotion、CBC Gem、TikTok など、yt-dlp でサポートされているサイトからの URL を YTSage が受け入れるようにする場合は、ジェネリック モードを使用します。
|
||||
|
||||
使用方法:
|
||||
|
||||
1. `Download Settings` を開きます。
|
||||
2. `Generic Mode` を有効にします。
|
||||
3. サポートされている YouTube 以外のビデオまたはプレイリストの URL を貼り付けます。
|
||||
4. 「`Analyze`」をクリックします。
|
||||
5. 形式を選択し、通常どおりダウンロードします。
|
||||
|
||||
注:
|
||||
|
||||
- 汎用モードでは、YTSage 内の URL 検証のみが変更されます。ターゲット サイトは、インストールされている yt-dlp バージョンでサポートされている必要があります。
|
||||
- 一部のサイトでは、エクストラクターに応じて、Cookie、ログイン セッション、プロキシ、または追加の yt-dlp 引数が必要です。
|
||||
- サイトに障害が発生した場合は、問題を報告する前に、まず組み込みのアップデーター タブから yt-dlp を更新してください。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 メディアとダウンロードのオプション</summary>
|
||||
|
||||
- **字幕オプション:** 言語をフィルターし、ビデオ ファイルに字幕を埋め込みます。
|
||||
- **字幕の結合:** ハードコードされた字幕のビデオ ファイルに字幕を結合します。
|
||||
- **説明の保存:** ビデオの説明をテキスト ファイルとして保存します。
|
||||
- **サムネイルの保存:** ビデオのサムネイルを画像ファイルとして保存します。
|
||||
- **チャプターの埋め込み:** 互換性のあるビデオ プレーヤーのメタデータとしてチャプター マーカーを埋め込みます。
|
||||
- **スポンサー セグメントの削除:** SponsorBlock を使用してビデオからスポンサー セグメントを削除します。
|
||||
- **ビデオのトリミング:** `HH:MM:SS` 形式で時間範囲を指定して、ビデオの特定の部分のみをダウンロードします
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ 出力とファイルの設定</summary>
|
||||
|
||||
- **速度リミッター:** ダウンロード速度を制限します (例: `500K` 500 KB/秒)
|
||||
- **ダウンロード パスの保存:** 今後のダウンロードのためにデフォルトのダウンロード パスを保存します。 **[ダウンロード設定] → [ダウンロード パス]** で利用できます。
|
||||
- **出力ファイル名の形式:** `%(title)s`、`%(uploader)s`、`%(resolution)s` などの変数を使用して、出力ファイル名の形式をカスタマイズします。 **ダウンロード設定 → ファイル名形式**で利用できます。- **出力形式を強制:** ビデオを`mp4`、`webm`、`mkv`などの特定のコンテナ形式に強制的にダウンロードします。 **ダウンロード設定 → 出力形式設定**で利用できます。
|
||||
- **オーディオ形式変換:** オーディオのみのダウンロードを、`AAC`、`MP3`、`FLAC`、`WAV`、`Opus`、`M4A`、などの優先形式に変換します。 `Vorbis`、または `Best`。 **ダウンロード設定 → オーディオ形式設定**で利用できます。
|
||||
- **オーディオの正規化:** EBU R128 を使用して、オーディオのみのダウンロードの音量を標準化します。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 アクセスとネットワーク</summary>
|
||||
|
||||
- **Cookie を使用してログイン:** Cookie を使用して YouTube にログインし、プライベート コンテンツにアクセスします。
|
||||
使用方法:
|
||||
1. **推奨:** アプリに組み込まれている `Extract cookies from browser` オプションを使用し、ブラウザーとオプションでプロファイルを選択します。
|
||||
2. または、Cookie を手動で抽出します。
|
||||
a. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) のような拡張子を使用してブラウザから Cookie をエクスポートします。
|
||||
b. Netscape 形式で Cookie をコピーします。
|
||||
c. `cookies.txt` という名前のファイルを作成し、そこに Cookie を貼り付けます。
|
||||
d.アプリで `cookies.txt` ファイルを選択します
|
||||
- **プロキシ サポート:** ダウンロードにはプロキシ サーバーを使用します (例: `http://<proxy-server>:<port>`)
|
||||
- **汎用モード:** YTSage が yt-dlp でサポートされている YouTube 以外のサイトから分析してダウンロードできるようにします。 **[ダウンロード設定] → [汎用モード]** から有効にします。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ ツールとメンテナンス</summary>
|
||||
|
||||
- **カスタム コマンド:** コマンドライン引数を介して高度な yt-dlp 機能にアクセスします
|
||||
- **「アップデータ」タブ:** カスタム オプションの 1 か所から組み込みの更新ツールを管理します。
|
||||
- **yt-dlp アップデート:** アップデートを確認し、安定リリース チャネルと夜間リリース チャネルを切り替えます。
|
||||
- **FFmpeg バージョン チェッカー:** FFmpeg バージョンを確認し、インストール ガイドを開きます
|
||||
- **Deno の更新:** Deno ランタイムを確認して更新します
|
||||
- **FFmpeg/yt-dlp/Deno 検出:** [バージョン情報] ダイアログから FFmpeg、yt-dlp、および Deno のパスとバージョンを自動的に検出します。
|
||||
- **ダウンロード履歴:** **履歴** ボタンから過去のダウンロードをサムネイルとステータスとともに表示します。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 ローカリゼーション</summary>
|
||||
|
||||
YTSage は **14 の言語**をサポートしており、世界中からアクセスできます。 **カスタム オプション → 言語** から希望の言語を選択します。
|
||||
|
||||
### サポートされている言語
|
||||
|
||||
|言語 |コード |言語 |コード |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 英語 | `en` | 🇪🇸 スペイン語 | `es` |
|
||||
| 🇸🇦アラビア語 | `ar` | 🇫🇷 フランス語 | `fr` |
|
||||
| 🇩🇪 ドイツ語 | `de` | 🇮🇳ヒンディー語 | `hi` |
|
||||
| 🇮🇩インドネシア語 | `id` | 🇮🇹イタリア語 | `it` |
|
||||
| 🇯🇵 日本語 | `ja` | 🇵🇱ポーランド語 | `pl` |
|
||||
| 🇧🇷 ポルトガル語 | `pt` | 🇷🇺ロシア語 | `ru` |
|
||||
| 🇹🇷 トルコ語 | `tr` | 🇨🇳中国語 | `zh` |
|
||||
|
||||
### README の翻訳
|
||||
|
||||
|言語 |ファイル |言語 |ファイル |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 英語 | [README.md](../README.md) | 🇪🇸 スペイン語 | [README.es.md](README.es.md)
|
||||
| 🇸🇦アラビア語 | [README.ar.md](README.ar.md) | 🇫🇷 フランス語 | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 ドイツ語 | [README.de.md](README.de.md) | 🇮🇳ヒンディー語 | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩インドネシア語 | [README.id.md](README.id.md) | 🇮🇹イタリア語 | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 日本語 | [README.ja.md](README.ja.md) | 🇵🇱ポーランド語 | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 ポルトガル語 | [README.pt.md](README.pt.md) | 🇷🇺ロシア語 | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 トルコ語 | [README.tr.md](README.tr.md) | 🇨🇳中国語 | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **翻訳に貢献しませんか?** 言語を追加するには、[Contributing](#contributing) セクションをご覧ください。
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ トラブルシューティング
|
||||
|
||||
<details>
|
||||
<summary>クリックすると一般的な問題と解決策が表示されます</summary>
|
||||
|
||||
- **フォーマット テーブルが表示されない:** yt-dlp を最新バージョンに更新し、毎晩 yt-dlp に切り替えます。
|
||||
- **ダウンロードが失敗する:** インターネット接続をチェックし、ビデオが利用可能であることを確認してください。
|
||||
- **特定のダウンロード エラー:**
|
||||
- **プライベート ビデオ:** Cookie 認証を使用してプライベート コンテンツにアクセスします。
|
||||
- **年齢制限のあるコンテンツ:** 年齢制限のある動画を閲覧するには、YouTube アカウントにログインしてください。
|
||||
- **地理的にブロックされたビデオ:** 地域制限を回避するには、VPN の使用を検討してください。
|
||||
- **削除/削除されたビデオ:** このビデオは YouTube で利用できなくなりました。
|
||||
- **ライブ ストリーム:** ライブ ストリームはダウンロードできません。ストリームが終了するまで待ちます。
|
||||
- **ネットワーク エラー:** インターネット接続を確認して、もう一度試してください。
|
||||
- **無効な URL:** URL が正しく、サポートされているプラットフォームからのものであることを確認してください。
|
||||
- **プレミアム コンテンツ:** YouTube プレミアム メンバーシップが必要です。
|
||||
- **著作権ブロック:** コンテンツは著作権制限によりブロックされています。
|
||||
- **ダウンロード後にビデオ ファイルとオーディオ ファイルを分離します:** これは、FFmpeg が見つからない、または検出されない場合に発生します。 YTSage では、高品質のビデオ ストリームとオーディオ ストリームをマージするために FFmpeg が必要です。
|
||||
- **解決策:** FFmpeg がシステムの PATH にインストールされ、アクセスできることを確認してください。 Windows ユーザーの場合、最も簡単なオプションは、FFmpeg にバンドルされている `YTSage-v<version>-ffmpeg.exe` ファイルをダウンロードすることです。
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Windows Defender / ウイルス対策の警告
|
||||
|
||||
一部のウイルス対策ソフトウェアでは、`.exe` ファイルに誤検知のフラグが立てられる場合があります。これは、パッケージ化されたアプリケーションの**既知の制限**です。
|
||||
|
||||
**これが起こる理由:**
|
||||
- ウイルス対策ヒューリスティックにより、パックされた実行可能ファイルが疑わしいものとして誤認識される可能性がある
|
||||
|
||||
**安全な代替品:**
|
||||
- ✅ **pip インストールを使用します:** `pip install ytsage` (推奨)
|
||||
- ✅ **ソースからビルド**: これに従ってください [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **ウイルス対策ソフトウェアでアプリケーションをホワイトリストに登録**
|
||||
|
||||
#### 🍎 macOS: 「アプリが破損しているため開けません」
|
||||
macOS Sonoma 以降でこのエラーが発生した場合は、隔離属性を削除する必要があります。
|
||||
|
||||
1. **ターミナルを開きます** (Spotlight を使用して見つけることができます)。
|
||||
2. **次のコマンドを入力します**。**まだ Enter キーは押さないでください**。必ず末尾にスペースを含めてください。
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **`YTSage.app` ファイル**を Finder ウィンドウからドラッグし、ターミナル ウィンドウに直接ドロップします。これにより、正しいファイル パスが自動的に貼り付けられます。
|
||||
4. **Enter キーを押して**、コマンドを実行します。
|
||||
5. **YTSage.app をもう一度開いてみてください。** これで正しく起動するはずです。
|
||||
|
||||
---
|
||||
|
||||
#### **構成の場所 (詳細)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 スポンサー
|
||||
|
||||
YTSage によって時間を節約できる場合は、プロジェクトのスポンサーになることを検討してください。スポンサーシップは、開発時間、プラットフォーム全体のテスト、将来の改善をカバーするのに役立ちます。
|
||||
|
||||
- GitHub スポンサー: https://github.com/sponsors/oop7
|
||||
- スポンサー リンクは、アプリ内の [バージョン情報] ダイアログから直接利用することもできます。
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 貢献しています
|
||||
|
||||
寄付を歓迎します!お手伝いできる方法は次のとおりです。
|
||||
|
||||
1. 🍴 リポジトリをフォークする
|
||||
2. 🌿 機能ブランチを作成します。
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 変更をコミットします。
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 ブランチにプッシュします。
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 プルリクエストを開く
|
||||
|
||||
### 🌍 翻訳に貢献
|
||||
|
||||
- 一致するローカライズされた README ファイルを更新します (例: `README.es.md`)
|
||||
- `ytsage/languages/<code>.json` を編集してアプリ文字列を同期させます
|
||||
- 言語が見つからない場合は、`README.md` から開始して `README.<code>.md` を作成します
|
||||
|
||||
<details>
|
||||
<summary>📂 プロジェクト構造</summary>
|
||||
|
||||
## YTSage - プロジェクト構造
|
||||
|
||||
このドキュメントでは、YTSage の整理されたフォルダー構造について説明します。
|
||||
|
||||
### 📁 プロジェクトの構造
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️スターの歴史
|
||||
|
||||
<div align="center">
|
||||
|
||||
## スターの歴史
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜ライセンス
|
||||
|
||||
このプロジェクトは MIT ライセンスに基づいてライセンスされています。詳細については、[LICENSE](../LICENSE) ファイルを参照してください。
|
||||
|
||||
## 🙏 謝辞
|
||||
|
||||
<details>
|
||||
<summary>謝辞を表示</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>改善の提案やバグの報告のために問題を開いてこのプロジェクトに貢献してくださった皆様に心から感謝します。</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">コアコンポーネント</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>ダウンロード エンジン</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>メディア処理</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">デノ</a></td>
|
||||
<td>yt-dlp との統合用ランタイム</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">ライブラリとフレームワーク</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>GUI フレームワーク</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">枕</a></td>
|
||||
<td>画像処理</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">リクエスト</a></td>
|
||||
<td>HTTP リクエスト</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">梱包</a></td>
|
||||
<td>バージョンとパッケージの取り扱い</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">値下げ</a></td>
|
||||
<td>マークダウン レンダリング</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">ろぐる</a></td>
|
||||
<td>ロギング</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">アセットと寄稿者</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">ユニバーズフィールドによる新しい通知 09</a></td>
|
||||
<td>通知音</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">ウイルス185</a></td>
|
||||
<td>コード寄稿者</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️免責事項
|
||||
|
||||
このツールは個人使用のみを目的としています。 YouTube の利用規約とコンテンツ作成者の権利を尊重してください。
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
[oop7](https://github.com/oop7) によって ❤️ で作られました
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Nowoczesny downloader YouTube z przejrzystym interfejsem PySide6.**
|
||||
Pobieraj filmy w dowolnej jakości, wyodrębniaj dźwięk, pobieraj napisy i nie tylko.
|
||||
|
||||
### 🌍 PRZECZYTAJ Języki
|
||||
|
||||
Angielski: [EN](../README.md)
|
||||
| Numer telefonu: [AR](README.ar.md)
|
||||
| Niemiecki: [DE](README.de.md)
|
||||
| Hiszpański: [ES](README.es.md)
|
||||
| Français: [FR](README.fr.md)
|
||||
| हिन्दी: [HI](README.hi.md)
|
||||
| Bahasa Indonezja: [ID](README.id.md)
|
||||
| włoski: [IT](README.it.md)
|
||||
| 日本語: [JA](README.ja.md)
|
||||
| Polski: [PL](README.pl.md)
|
||||
| Portugalski: [PT](README.pt.md)
|
||||
| Rosyjski: [RU](README.ru.md)
|
||||
| Turecki: [TR](README.tr.md)
|
||||
| Nazwa: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Instalacja</a> •
|
||||
<a href="#features">Funkcje</a> •
|
||||
<a href="#usage">Użycie</a> •
|
||||
<a href="#screenshots">Zrzuty ekranu</a> •
|
||||
<a href="#troubleshooting">Rozwiązywanie problemów</a> •
|
||||
<a href="#sponsor">Sponsor</a> •
|
||||
<a href="#contributing">Wspieranie</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ Dlaczego YTSage?
|
||||
|
||||
YTSage jest przeznaczony dla użytkowników, którzy chcą **prostego, ale potężnego narzędzia do pobierania YouTube**. W odróżnieniu od innych narzędzi oferuje:
|
||||
|
||||
- Czysty, nowoczesny interfejs PySide6
|
||||
- Pobieranie wideo, audio i napisów jednym kliknięciem
|
||||
- Zaawansowane funkcje, takie jak SponsorBlock, łączenie napisów i wybór listy odtwarzania
|
||||
- Opcjonalny tryb ogólny dla witryn obsługujących yt-dlp poza YouTube
|
||||
- Obsługa wielu platform i łatwa instalacja
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Funkcje
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Podstawowe funkcje | Zaawansowane funkcje | Dodatkowe funkcje |
|
||||
|----------------------------------|------------------------------------------------------|-----------------------------------|
|
||||
| 🎥 Formatuj tabelę | 🚫 Integracja z blokiem sponsorskim | 🎞️ Wyświetlacz FPS/HDR |
|
||||
| 🎵 Ekstrakcja dźwięku | 📝 Wybierz i połącz wiele napisów | 🔄 Automatyczna aktualizacja yt-dlp |
|
||||
| ✨ Prosty interfejs użytkownika | 💾 Zapisz opis i miniaturę | 🛠️ Wykrywanie FFmpeg/yt-dlp/Deno |
|
||||
| 📋 Obsługa i wybór list odtwarzania | 🚀 Ogranicznik prędkości | ⚙️ Polecenia niestandardowe |
|
||||
| 📑 Umieść rozdziały | ✂️ Przytnij sekcje wideo | 🍪 Zaloguj się za pomocą plików cookie |
|
||||
| 📜 Pobierz historię | 🔄 Zwolnij wybór kanału | 🌐 Wsparcie proxy |
|
||||
| 🎚️ Konwersja formatu audio | 🎬 Ustawienia formatu wideo | 🆙 Wbudowana zakładka Aktualizator |
|
||||
| 🌍 Tryb ogólny | 🔊 Normalizacja dźwięku (EBU R128) | 🌍 Lokalizacja w 14 językach |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Instalacja
|
||||
|
||||
### ⚡ Szybka instalacja (zalecane)
|
||||
|
||||
Zainstaluj YTSage z PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Zaktualizuj istniejącą instalację</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Następnie uruchom aplikację:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Gotowe pliki wykonywalne
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Okna
|
||||
|
||||
| Formatuj | Opis |
|
||||
|------------|------------|
|
||||
|  | Standardowy instalator |
|
||||
|  | Z pakietem FFmpeg |
|
||||
|  | Wersja przenośna, nie wymaga instalacji |
|
||||
|  | Przenośny z FFmpeg, spakowany |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Kroki instalacji</summary>
|
||||
|
||||
1. **Instalator EXE (`.exe`)**: Kliknij dwukrotnie plik i postępuj zgodnie z instrukcjami kreatora instalacji.
|
||||
2. **Wersja przenośna (`.zip`)**: Wypakuj archiwum do wybranej lokalizacji i uruchom `ytsage.exe`.
|
||||
3. **FFmpeg w pakiecie**: Wybierz wersję w pakiecie FFmpeg, jeśli nie masz zainstalowanego FFmpeg w swoim systemie.
|
||||
</details>
|
||||
|
||||
#### 🐧 Linux
|
||||
|
||||
| Formatuj | Opis |
|
||||
|------------|------------|
|
||||
|  | Pakiet Debiana |
|
||||
|  | Obraz aplikacji, przenośny |
|
||||
|  | Pakiet RPM |
|
||||
|  | Pakiet Flatpak |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Kroki instalacji</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **Obraz aplikacji (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: Postępuj zgodnie z instrukcjami na Flathubie lub uruchom:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
| Formatuj | Opis |
|
||||
|------------|------------|
|
||||
|  | Spakowana aplikacja dla Apple Silicon |
|
||||
|  | Instalator obrazu dysku dla Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Kroki instalacji</summary>
|
||||
|
||||
- **Instalator DMG (`.dmg`)**: Kliknij dwukrotnie, aby zamontować, a następnie przeciągnij `YTSage.app` do folderu Aplikacje.
|
||||
- **Archiwum aplikacji (`.zip`)**: Wypakuj plik ZIP i przenieś `YTSage.app` do folderu Aplikacje.
|
||||
|
||||
*Uwaga: jeśli napotkasz błąd „Aplikacja jest uszkodzona”, zobacz [macOS troubleshooting section](#troubleshooting) poniżej.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Instalacja ręczna ze źródła</summary>
|
||||
|
||||
### 1. Sklonuj repozytorium
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Zainstaluj zależności
|
||||
|
||||
#### ⚡ Z uv
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Lub ze standardową końcówką
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Uruchom aplikację
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Zrzuty ekranu
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Pobierz ustawienia</em></td>
|
||||
<td align="center"><em>Pobieranie listy odtwarzania</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Format audio</em></td>
|
||||
<td align="center"><em>Opcje niestandardowe</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Użycie
|
||||
|
||||
<details>
|
||||
<summary>🎯 Podstawowe użycie</summary>
|
||||
|
||||
1. **Uruchom YTSage**
|
||||
2. **Wklej adres URL YouTube** (lub użyj przycisku „Wklej adres URL”)
|
||||
3. **Kliknij „Analizuj”**
|
||||
4. **Wybierz format:**
|
||||
- `Video` do pobierania plików wideo
|
||||
- `Audio Only` do ekstrakcji dźwięku
|
||||
5. **Wybierz opcje:**
|
||||
- Włącz napisy i wybierz język
|
||||
- Włącz scalanie napisów
|
||||
- Zapisz miniaturę
|
||||
- Usuń segmenty sponsorów
|
||||
- Zapisz opis
|
||||
- Osadzaj rozdziały
|
||||
6. **Wybierz katalog wyjściowy**
|
||||
7. **Kliknij „Pobierz”**
|
||||
|
||||
> 💡 Domyślnym katalogiem pobierania jest folder „Pobrane” użytkownika.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Pobieranie listy odtwarzania</summary>
|
||||
|
||||
1. **Wklej adres URL listy odtwarzania**
|
||||
2. **Kliknij „Analizuj”**
|
||||
3. **Wybierz filmy z selektora playlist (opcjonalnie, domyślnie wszystkie)**
|
||||
4. **Wybierz żądany format/jakość**
|
||||
5. **Kliknij „Pobierz”**
|
||||
|
||||
> 💡 Aplikacja automatycznie obsługuje kolejkę pobierania
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Tryb ogólny dla witryn innych niż YouTube</summary>
|
||||
|
||||
Użyj trybu ogólnego, jeśli chcesz, aby YTSage akceptował adresy URL z witryn obsługiwanych przez yt-dlp, takich jak Dailymotion, CBC Gem, TikTok i inne.
|
||||
|
||||
Jak z niego korzystać:
|
||||
|
||||
1. Otwórz `Download Settings`.
|
||||
2. Włącz `Generic Mode`.
|
||||
3. Wklej obsługiwany adres URL filmu lub listy odtwarzania spoza YouTube.
|
||||
4. Kliknij `Analyze`.
|
||||
5. Wybierz format i pobierz jak zwykle.
|
||||
|
||||
Uwagi:
|
||||
|
||||
- Tryb ogólny zmienia tylko weryfikację adresu URL w YTSage. Witryna docelowa musi nadal być obsługiwana przez zainstalowaną wersję yt-dlp.
|
||||
- Niektóre witryny wymagają plików cookie, sesji logowania, serwera proxy lub dodatkowych argumentów yt-dlp, w zależności od ekstraktora.
|
||||
- Jeśli witryna ulegnie awarii, przed zgłoszeniem problemu zaktualizuj najpierw yt-dlp z wbudowanej karty aktualizatora.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Opcje multimediów i pobierania</summary>
|
||||
|
||||
- **Opcje napisów:** Filtruj języki i osadzaj napisy w pliku wideo
|
||||
- **Scalanie napisów:** Łączenie napisów z plikiem wideo w celu uzyskania napisów zakodowanych na stałe
|
||||
- **Zapisz opis:** Zapisz opis filmu jako plik tekstowy
|
||||
- **Zapisz miniaturę:** zapisz miniaturę wideo jako plik obrazu
|
||||
- **Osadzanie rozdziałów:** Osadzanie znaczników rozdziałów jako metadanych dla zgodnych odtwarzaczy wideo
|
||||
- **Usuń segmenty sponsora:** Usuń segmenty sponsora z filmu za pomocą funkcji SponsorBlock
|
||||
- **Przytnij wideo:** Pobierz tylko określone fragmenty filmu, określając zakresy czasu w formacie `HH:MM:SS`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Ustawienia wyjściowe i plikowe</summary>
|
||||
|
||||
- **Ogranicznik prędkości:** Ogranicz prędkość pobierania, na przykład `500K` dla 500 KB/s
|
||||
- **Zapisz ścieżkę pobierania:** zapisz domyślną ścieżkę pobierania dla przyszłych pobrań. Dostępne w **Ustawienia pobierania → Ścieżka pobierania**.
|
||||
- **Format nazwy pliku wyjściowego:** Dostosuj format nazwy pliku wyjściowego za pomocą zmiennych takich jak `%(title)s`, `%(uploader)s` i `%(resolution)s`. Dostępne w **Ustawienia pobierania → Format nazwy pliku**.
|
||||
- **Wymuś format wyjściowy:** Wymuś pobieranie plików wideo w określonym formacie kontenera, takim jak `mp4`, `webm` lub `mkv`. Dostępne w **Ustawienia pobierania → Ustawienia formatu wyjściowego**.
|
||||
- **Konwersja formatu audio:** Konwertuj pliki do pobrania zawierające wyłącznie dźwięk do preferowanych formatów, takich jak `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` lub `Best`. Dostępne w **Ustawienia pobierania → Ustawienia formatu audio**.
|
||||
- **Normalizacja dźwięku:** Ujednolicenie głośności pobieranych plików zawierających wyłącznie dźwięk za pomocą EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Dostęp i sieć</summary>
|
||||
|
||||
- **Zaloguj się za pomocą plików cookie:** zaloguj się do YouTube za pomocą plików cookie, aby uzyskać dostęp do prywatnych treści.
|
||||
Jak z niego korzystać:
|
||||
1. **Zalecane:** Skorzystaj z wbudowanej opcji `Extract cookies from browser` w aplikacji, a następnie wybierz przeglądarkę i opcjonalnie profil.
|
||||
2. Alternatywnie wyodrębnij pliki cookie ręcznie:
|
||||
a. Eksportuj pliki cookie ze swojej przeglądarki za pomocą rozszerzenia takiego jak [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
b. Skopiuj pliki cookie w formacie Netscape
|
||||
c. Utwórz plik o nazwie `cookies.txt` i wklej do niego pliki cookie
|
||||
d. Wybierz plik `cookies.txt` w aplikacji
|
||||
- **Obsługa proxy:** Do pobierania używaj serwera proxy, na przykład `http://<proxy-server>:<port>`
|
||||
- **Tryb ogólny:** Zezwól YTSage na analizowanie i pobieranie z witryn innych niż YouTube obsługiwanych przez yt-dlp. Włącz tę opcję w **Ustawienia pobierania → Tryb ogólny**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Narzędzia i konserwacja</summary>
|
||||
|
||||
- **Niestandardowe polecenia:** Dostęp do zaawansowanych funkcji yt-dlp poprzez argumenty wiersza poleceń
|
||||
- **Karta Aktualizator:** Zarządzaj wbudowanymi narzędziami aktualizacji z jednego miejsca w Opcjach niestandardowych:
|
||||
- **Aktualizacje yt-dlp:** sprawdź dostępność aktualizacji i przełączaj się między kanałami wersji stabilnej i nocnej
|
||||
- **Kontrola wersji FFmpeg:** Sprawdź wersję FFmpeg i otwórz przewodniki instalacji
|
||||
- **Aktualizacje Deno:** Sprawdź i zaktualizuj środowisko wykonawcze Deno
|
||||
- **Wykrywanie FFmpeg/yt-dlp/Deno:** Automatycznie wykrywa ścieżki i wersje FFmpeg, yt-dlp i Deno w oknie dialogowym Informacje.
|
||||
- **Historia pobierania:** Przeglądaj wcześniejsze pobrania z miniaturami i statusami za pomocą przycisku **Historia**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Lokalizacja</summary>
|
||||
|
||||
YTSage obsługuje **14 języków**, zapewniając dostępność na całym świecie. Wybierz preferowany język z **Opcje niestandardowe → Język**.
|
||||
|
||||
### Obsługiwane języki
|
||||
|
||||
| Język | Kod | Język | Kod |
|
||||
|---------|------|----------|------|
|
||||
| 🇺🇸 Angielski | `en` | 🇪🇸 Hiszpański | `es` |
|
||||
| 🇸🇦 arabski | `ar` | 🇫🇷 Francuski | `fr` |
|
||||
| 🇩🇪 niemiecki | `de` | 🇮🇳 hindi | `hi` |
|
||||
| 🇮🇩 Indonezyjski | `id` | 🇮🇹 włoski | `it` |
|
||||
| 🇯🇵 Japoński | `ja` | 🇵🇱polski | `pl` |
|
||||
| 🇧🇷 portugalski | `pt` | 🇷🇺 Rosyjski | `ru` |
|
||||
| 🇹🇷 Turecki | `tr` | 🇨🇳 chiński | `zh` |
|
||||
|
||||
### Tłumaczenia README
|
||||
|
||||
| Język | Plik | Język | Plik |
|
||||
|---------|------|----------|------|
|
||||
| 🇺🇸 Angielski | [README.md](../README.md) | 🇪🇸 Hiszpański | [README.es.md](README.es.md)
|
||||
| 🇸🇦 arabski | [README.ar.md](README.ar.md) | 🇫🇷 Francuski | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 niemiecki | [README.de.md](README.de.md) | 🇮🇳 hindi | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Indonezyjski | [README.id.md](README.id.md) | 🇮🇹 włoski | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 Japoński | [README.ja.md](README.ja.md) | 🇵🇱polski | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 portugalski | [README.pt.md](README.pt.md) | 🇷🇺 Rosyjski | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Turecki | [README.tr.md](README.tr.md) | 🇨🇳 chiński | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Chcesz dodać tłumaczenie?** Sprawdź sekcję [Contributing](#contributing), aby pomóc nam dodać więcej języków!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Rozwiązywanie problemów
|
||||
|
||||
<details>
|
||||
<summary>Kliknij, aby wyświetlić typowe problemy i rozwiązania</summary>
|
||||
|
||||
- **Tabela formatów nie wyświetla się:** Aktualizuj yt-dlp do najnowszej wersji i co wieczór przełączaj się na yt-dlp.
|
||||
- **Pobieranie nie powiodło się:** Sprawdź swoje połączenie internetowe i upewnij się, że plik wideo jest dostępny.
|
||||
- **Specyficzne błędy pobierania:**
|
||||
- **Prywatne filmy:** Użyj uwierzytelniania plików cookie, aby uzyskać dostęp do prywatnych treści.
|
||||
- **Treści z ograniczeniami wiekowymi:** Zaloguj się do konta YouTube, aby oglądać filmy z ograniczeniami wiekowymi.
|
||||
- **Filmy z blokadą geograficzną:** rozważ użycie VPN w celu ominięcia ograniczeń regionalnych.
|
||||
- **Usunięte/usunięte filmy:** Film nie jest już dostępny w serwisie YouTube.
|
||||
- **Transmisje na żywo:** Transmisji na żywo nie można pobrać; poczekaj, aż strumień się zakończy.
|
||||
- **Błędy sieciowe:** Sprawdź swoje połączenie internetowe i spróbuj ponownie.
|
||||
- **Nieprawidłowe adresy URL:** Upewnij się, że adres URL jest poprawny i pochodzi z obsługiwanej platformy.
|
||||
– **Treści premium:** wymaga członkostwa YouTube Premium.
|
||||
- **Bloki dotyczące praw autorskich:** Treść jest blokowana ze względu na ograniczenia praw autorskich.
|
||||
- **Oddziel pliki wideo i audio po pobraniu:** Dzieje się tak, gdy brakuje FFmpeg lub nie został on wykryty. YTSage wymaga FFmpeg do łączenia wysokiej jakości strumieni wideo i audio.
|
||||
- **Rozwiązanie:** Upewnij się, że FFmpeg jest zainstalowany i dostępny w PATH twojego systemu. Dla użytkowników systemu Windows najłatwiejszą opcją jest pobranie pliku `YTSage-v<version>-ffmpeg.exe`, który jest dostarczany w pakiecie z FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Ostrzeżenie o programie Windows Defender/antywirusie
|
||||
|
||||
Niektóre programy antywirusowe mogą oznaczać pliki `.exe` jako fałszywe alarmy. Jest to **znane ograniczenie** aplikacji w pakietach.
|
||||
|
||||
**Dlaczego tak się dzieje:**
|
||||
- Heurystyka antywirusowa może błędnie zidentyfikować spakowane pliki wykonywalne jako podejrzane
|
||||
|
||||
**Bezpieczne alternatywy:**
|
||||
- ✅ **Użyj instalacji pip:** `pip install ytsage` (zalecane)
|
||||
- ✅ **Kompiluj ze źródła**: postępując zgodnie z tym [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Dodaj aplikację do białej listy** w swoim oprogramowaniu antywirusowym
|
||||
|
||||
#### 🍎 macOS: „Aplikacja jest uszkodzona i nie można jej otworzyć”
|
||||
Jeśli widzisz ten błąd w systemie macOS Sonoma lub nowszym, musisz usunąć atrybut kwarantanny.
|
||||
|
||||
1. **Otwórz Terminal** (możesz go znaleźć za pomocą Spotlight).
|
||||
2. **Wpisz następujące polecenie**, ale **nie** jeszcze naciskaj Enter. Pamiętaj o dodaniu spacji na końcu:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Przeciągnij plik `YTSage.app`** z okna Findera i upuść go bezpośrednio w oknie Terminala. Spowoduje to automatyczne wklejenie prawidłowej ścieżki pliku.
|
||||
4. **Naciśnij Enter**, aby uruchomić polecenie.
|
||||
5. **Spróbuj ponownie otworzyć YTSage.app.** Powinna teraz uruchomić się poprawnie.
|
||||
|
||||
---
|
||||
|
||||
#### **Lokacje konfiguracji (zaawansowane)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Sponsor
|
||||
|
||||
Jeśli YTSage pozwoli Ci zaoszczędzić czas, rozważ sponsorowanie projektu. Sponsoring pomaga pokryć czas opracowywania, testowania na różnych platformach i przyszłych ulepszeń.
|
||||
|
||||
- Sponsorzy GitHuba: https://github.com/sponsors/oop7
|
||||
- Link sponsora jest również dostępny bezpośrednio w aplikacji, w oknie dialogowym Informacje.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Wkład
|
||||
|
||||
Zapraszamy do wpłat! Oto jak możesz pomóc:
|
||||
|
||||
1. 🍴Rozwidl repozytorium
|
||||
2. 🌿 Utwórz gałąź funkcji:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Zatwierdź zmiany:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Pchnij do oddziału:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Otwórz żądanie ściągnięcia
|
||||
|
||||
### 🌍 Tłumaczenia wspierające
|
||||
|
||||
- Zaktualizuj pasujący zlokalizowany plik README (na przykład `README.es.md`)
|
||||
- Synchronizuj ciągi aplikacji, edytując `ytsage/languages/<code>.json`
|
||||
- Jeśli brakuje Twojego języka, zacznij od `README.md` i utwórz `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Struktura projektu</summary>
|
||||
|
||||
## YTSage – Struktura projektu
|
||||
|
||||
Ten dokument opisuje zorganizowaną strukturę folderów YTSage.
|
||||
|
||||
### 📁 Struktura projektu
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Historia gwiazd
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Historia gwiazd
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜Licencja
|
||||
|
||||
Ten projekt jest objęty licencją MIT — szczegółowe informacje można znaleźć w pliku [LICENSE](../LICENSE).
|
||||
|
||||
## 🙏 Podziękowania
|
||||
|
||||
<details>
|
||||
<summary>Pokaż podziękowania</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Serdecznie dziękujemy wszystkim, którzy przyczynili się do tego projektu, otwierając problem, aby zasugerować ulepszenie lub zgłosić błąd.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Główne komponenty</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Pobierz silnik</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Przetwarzanie multimediów</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Środowisko wykonawcze do integracji z yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Biblioteki i struktury</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>Struktura GUI</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Poduszka</a></td>
|
||||
<td>Przetwarzanie obrazu</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">żądania</a></td>
|
||||
<td>Żądania HTTP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">opakowanie</a></td>
|
||||
<td>Obsługa wersji i pakietów</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">przecena</a></td>
|
||||
<td>Renderowanie Markdown</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Logowanie</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Zasoby i współtwórcy</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nowe powiadomienie 09 od Universfield</a></td>
|
||||
<td>Dźwięk powiadomienia</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Współtwórca kodu</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Zastrzeżenie
|
||||
|
||||
To narzędzie jest przeznaczone wyłącznie do użytku osobistego. Prosimy o przestrzeganie warunków korzystania z usługi YouTube i praw twórców treści.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Wykonane z ❤️ przez [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Um downloader moderno do YouTube com uma interface PySide6 limpa.**
|
||||
Baixe vídeos em qualquer qualidade, extraia áudio, busque legendas e muito mais.
|
||||
|
||||
### 🌍 LEIA-ME Idiomas
|
||||
|
||||
Inglês: [EN](../README.md)
|
||||
| Nome: [AR](README.ar.md)
|
||||
| Alemão: [DE](README.de.md)
|
||||
| Espanhol: [ES](README.es.md)
|
||||
| Francês: [FR](README.fr.md)
|
||||
| Nome: [HI](README.hi.md)
|
||||
| Bahasa Indonésia: [ID](README.id.md)
|
||||
| Italiano: [IT](README.it.md)
|
||||
| Nome do usuário: [JA](README.ja.md)
|
||||
| Polaco: [PL](README.pl.md)
|
||||
| Português: [PT](README.pt.md)
|
||||
| Russo: [RU](README.ru.md)
|
||||
| Turco: [TR](README.tr.md)
|
||||
| 中文: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Instalação</a> •
|
||||
<a href="#features">Recursos</a> •
|
||||
<a href="#usage">Uso</a> •
|
||||
<a href="#screenshots">Capturas de tela</a> •
|
||||
<a href="#troubleshooting">Solução de problemas</a> •
|
||||
<a href="#sponsor">Patrocinador</a> •
|
||||
<a href="#contributing">Contribuindo</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ Por que YTSage?
|
||||
|
||||
YTSage foi projetado para usuários que desejam um **baixador de YouTube simples, mas poderoso**. Ao contrário de outras ferramentas, oferece:
|
||||
|
||||
- Uma interface PySide6 limpa e moderna
|
||||
- Downloads com um clique para vídeo, áudio e legendas
|
||||
- Recursos avançados como SponsorBlock, mesclagem de legendas e seleção de playlist
|
||||
- Modo genérico opcional para sites compatíveis com yt-dlp além do YouTube
|
||||
- Suporte multiplataforma e fácil instalação
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Recursos
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Recursos principais | Recursos Avançados | Recursos extras |
|
||||
|-----------------------------------|---------------------------------------------------|-----------------------------------|
|
||||
| 🎥 Tabela de Formatos | 🚫 Integração SponsorBlock | 🎞️ Tela FPS/HDR |
|
||||
| 🎵 Extração de Áudio | 📝 Seleção e mesclagem de múltiplas legendas | 🔄 Atualização automática do yt-dlp |
|
||||
| ✨ UI simples | 💾 Salvar descrição e miniatura | 🛠️ Detecção de FFmpeg/yt-dlp/Deno |
|
||||
| 📋 Suporte e seletor de lista de reprodução | 🚀 Limitador de velocidade | ⚙️ Comandos personalizados |
|
||||
| 📑 Incorporar capítulos | ✂️ Cortar seções de vídeo | 🍪 Login com Cookies |
|
||||
| 📜 Histórico de downloads | 🔄 Seleção de canal de lançamento | 🌐 Suporte a proxy |
|
||||
| 🎚️ Conversão de formato de áudio | 🎬 Configurações de formato de vídeo | 🆙 Guia Atualizador integrado |
|
||||
| 🌍 Modo Genérico | 🔊 Normalização de Áudio (EBU R128) | 🌍 Localização em 14 idiomas |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Instalação
|
||||
|
||||
### ⚡ Instalação rápida (recomendado)
|
||||
|
||||
Instale YTSage do PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Atualizar uma instalação existente</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Em seguida, inicie o aplicativo:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Executáveis pré-construídos
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Janelas
|
||||
|
||||
| Formato | Descrição |
|
||||
|--------|------------|
|
||||
|  | Instalador padrão |
|
||||
|  | Com FFmpeg incluído |
|
||||
|  | Versão portátil, sem necessidade de instalação |
|
||||
|  | Portátil com FFmpeg, compactado |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Etapas de instalação</summary>
|
||||
|
||||
1. **EXE Installer (`.exe`)**: Clique duas vezes no arquivo e siga o assistente de configuração.
|
||||
2. **Versão portátil (`.zip`)**: Extraia o arquivo para o local desejado e execute `ytsage.exe`.
|
||||
3. **FFmpeg Bundled**: Escolha as versões empacotadas do FFmpeg se você não tiver o FFmpeg instalado em seu sistema.
|
||||
</details>
|
||||
|
||||
#### 🐧Linux
|
||||
|
||||
| Formato | Descrição |
|
||||
|--------|------------|
|
||||
|  | Pacote Debian |
|
||||
|  | AppImage, portátil |
|
||||
|  | Pacote RPM |
|
||||
|  | Pacote Flatpak |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Etapas de instalação</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **AppImage (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: Siga as instruções no Flathub ou execute:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
| Formato | Descrição |
|
||||
|--------|------------|
|
||||
|  | Aplicativo compactado para Apple Silicon |
|
||||
|  | Instalador de imagem de disco para Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Etapas de instalação</summary>
|
||||
|
||||
- **Instalador DMG (`.dmg`)**: Clique duas vezes para montar e arraste `YTSage.app` para a pasta Aplicativos.
|
||||
- **Arquivo de aplicativos (`.zip`)**: Extraia o zip e mova `YTSage.app` para a pasta Aplicativos.
|
||||
|
||||
*Observação: se você encontrar um erro "O aplicativo está danificado", consulte [macOS troubleshooting section](#troubleshooting) abaixo.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Instalação manual da fonte</summary>
|
||||
|
||||
### 1. Clone o repositório
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Instalar dependências
|
||||
|
||||
#### ⚡ Com UV
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Ou com pip padrão
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Execute o aplicativo
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Capturas de tela
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Configurações de download</em></td>
|
||||
<td align="center"><em>Baixar lista de reprodução</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Formato de áudio</em></td>
|
||||
<td align="center"><em>Opções personalizadas</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Uso
|
||||
|
||||
<details>
|
||||
<summary>🎯 Uso Básico</summary>
|
||||
|
||||
1. **Inicie o YTSage**
|
||||
2. **Colar URL do YouTube** (ou usar o botão "Colar URL")
|
||||
3. **Clique em "Analisar"**
|
||||
4. **Selecione Formato:**
|
||||
- `Video` para downloads de vídeos
|
||||
- `Audio Only` para extração de áudio
|
||||
5. **Escolha Opções:**
|
||||
- Ative legendas e selecione o idioma
|
||||
- Ativar mesclagem de legendas
|
||||
- Salvar miniatura
|
||||
- Remover segmentos de patrocinadores
|
||||
- Salvar descrição
|
||||
- Incorporar capítulos
|
||||
6. **Selecione Diretório de Saída**
|
||||
7. **Clique em "Baixar"**
|
||||
|
||||
> 💡 O diretório de download padrão é a pasta "Downloads" do usuário.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Baixar lista de reprodução</summary>
|
||||
|
||||
1. **Colar URL da lista de reprodução**
|
||||
2. **Clique em "Analisar"**
|
||||
3. **Selecione vídeos no seletor de playlist (opcional, o padrão é todos)**
|
||||
4. **Escolha o formato/qualidade desejado**
|
||||
5. **Clique em "Baixar"**
|
||||
|
||||
> 💡 O aplicativo gerencia automaticamente a fila de download
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Modo genérico para sites que não são do YouTube</summary>
|
||||
|
||||
Use o modo genérico quando quiser que o YTSage aceite URLs de sites suportados pelo yt-dlp, como Dailymotion, CBC Gem, TikTok e outros.
|
||||
|
||||
Como usar:
|
||||
|
||||
1. Abra `Download Settings`.
|
||||
2. Ative `Generic Mode`.
|
||||
3. Cole um URL de vídeo ou lista de reprodução compatível que não seja do YouTube.
|
||||
4. Clique em `Analyze`.
|
||||
5. Escolha um formato e baixe normalmente.
|
||||
|
||||
Notas:
|
||||
|
||||
- O Modo Genérico altera apenas a validação de URL dentro do YTSage. O site de destino ainda deve ser compatível com a versão yt-dlp instalada.
|
||||
- Alguns sites exigem cookies, uma sessão de login, um proxy ou argumentos yt-dlp extras, dependendo do extrator.
|
||||
- Se um site falhar, atualize o yt-dlp primeiro na guia do atualizador integrado antes de relatar o problema.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Opções de mídia e download</summary>
|
||||
|
||||
- **Opções de legenda:** Filtre idiomas e incorpore legendas no arquivo de vídeo
|
||||
- **Mesclagem de legendas:** Mesclar legendas no arquivo de vídeo para legendas codificadas
|
||||
- **Salvar descrição:** Salve a descrição do vídeo como um arquivo de texto
|
||||
- **Salvar miniatura:** Salve a miniatura do vídeo como um arquivo de imagem
|
||||
- **Incorporar capítulos:** Incorpore marcadores de capítulo como metadados para players de vídeo compatíveis
|
||||
- **Remover segmentos de patrocinadores:** Remova segmentos de patrocinadores do vídeo usando SponsorBlock
|
||||
- **Cortar vídeo:** baixe apenas partes específicas de um vídeo especificando intervalos de tempo no formato `HH:MM:SS`
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Configurações de saída e arquivo</summary>
|
||||
|
||||
- **Limitador de velocidade:** Limite a velocidade de download, por exemplo `500K` para 500 KB/s
|
||||
- **Salvar caminho de download:** Salve o caminho de download padrão para downloads futuros. Disponível em **Configurações de download → Caminho de download**.
|
||||
- **Formato do nome do arquivo de saída:** Personalize o formato do nome do arquivo de saída usando variáveis como `%(title)s`, `%(uploader)s` e `%(resolution)s`. Disponível em **Configurações de download → Formato do nome do arquivo**.
|
||||
- **Forçar formato de saída:** Força downloads de vídeo em um formato de contêiner específico, como `mp4`, `webm` ou `mkv`. Disponível em **Configurações de download → Configurações de formato de saída**.
|
||||
- **Conversão de formato de áudio:** Converta downloads somente de áudio para formatos preferidos, como `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` ou `Best`. Disponível em **Configurações de download → Configurações de formato de áudio**.
|
||||
- **Normalização de áudio:** Padronize o volume para downloads somente de áudio usando EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Acesso e Rede</summary>
|
||||
|
||||
- **Login com Cookies:** Faça login no YouTube usando cookies para acessar conteúdo privado.
|
||||
Como usar:
|
||||
1. **Recomendado:** Use a opção `Extract cookies from browser` integrada no aplicativo e selecione seu navegador e, opcionalmente, um perfil.
|
||||
2. Como alternativa, extraia os cookies manualmente:
|
||||
uma. Exporte cookies do seu navegador usando uma extensão como [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||
b. Copie os cookies no formato Netscape
|
||||
c. Crie um arquivo chamado `cookies.txt` e cole os cookies nele
|
||||
d. Selecione o arquivo `cookies.txt` no aplicativo
|
||||
- **Suporte a proxy:** Use um servidor proxy para downloads, por exemplo `http://<proxy-server>:<port>`
|
||||
- **Modo genérico:** permite que o YTSage analise e faça download de sites que não sejam do YouTube suportados pelo yt-dlp. Habilite-o em **Configurações de download → Modo genérico**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Ferramentas e Manutenção</summary>
|
||||
|
||||
- **Comandos personalizados:** Acesse recursos avançados do yt-dlp por meio de argumentos de linha de comando
|
||||
- **Guia Atualizador:** Gerencie ferramentas de atualização integradas em um só lugar nas Opções Personalizadas:
|
||||
- **Atualizações do yt-dlp:** verifique se há atualizações e alterne entre canais de lançamento estável e noturno
|
||||
- **Verificador de versão do FFmpeg:** Verifique sua versão do FFmpeg e abra os guias de instalação
|
||||
- **Atualizações do Deno:** Verifique e atualize o tempo de execução do Deno
|
||||
- **Detecção de FFmpeg/yt-dlp/Deno:** Detecta automaticamente caminhos e versões de FFmpeg, yt-dlp e Deno na caixa de diálogo Sobre.
|
||||
- **Histórico de downloads:** Veja downloads anteriores com miniaturas e status no botão **Histórico**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Localização</summary>
|
||||
|
||||
YTSage oferece suporte a **14 idiomas** para acessibilidade mundial. Selecione seu idioma preferido em **Opções personalizadas → Idioma**.
|
||||
|
||||
### Idiomas Suportados
|
||||
|
||||
| Idioma | Código | Idioma | Código |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Inglês | `en` | 🇪🇸 Espanhol | `es` |
|
||||
| 🇸🇦 Árabe | `ar` | 🇫🇷 Francês | `fr` |
|
||||
| 🇩🇪 Alemão | `de` | 🇮🇳 Hindi | `hi` |
|
||||
| 🇮🇩 Indonésio | `id` | 🇮🇹 Italiano | `it` |
|
||||
| 🇯🇵 Japonês | `ja` | 🇵🇱 Polonês | `pl` |
|
||||
| 🇧🇷 Português | `pt` | 🇷🇺 Russo | `ru` |
|
||||
| 🇹🇷 Turco | `tr` | 🇨🇳 Chinês | `zh` |
|
||||
|
||||
### LEIA-ME Traduções
|
||||
|
||||
| Idioma | Arquivo | Idioma | Arquivo |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Inglês | [README.md](../README.md) | 🇪🇸 Espanhol | [README.es.md](README.es.md)
|
||||
| 🇸🇦 Árabe | [README.ar.md](README.ar.md) | 🇫🇷 Francês | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 Alemão | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Indonésio | [README.id.md](README.id.md) | 🇮🇹 Italiano | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 Japonês | [README.ja.md](README.ja.md) | 🇵🇱 Polonês | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Português | [README.pt.md](README.pt.md) | 🇷🇺 Russo | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Turco | [README.tr.md](README.tr.md) | 🇨🇳 Chinês | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Quer contribuir com uma tradução?** Confira a seção [Contributing](#contributing) para nos ajudar a adicionar mais idiomas!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Solução de problemas
|
||||
|
||||
<details>
|
||||
<summary>Clique para ver problemas e soluções comuns</summary>
|
||||
|
||||
- **Tabela de formato não exibida:** Atualize yt-dlp para a versão mais recente e mude para yt-dlp todas as noites.
|
||||
- **Falha no download:** Verifique sua conexão com a Internet e certifique-se de que o vídeo esteja disponível.
|
||||
- **Erros específicos de download:**
|
||||
- **Vídeos privados:** Use autenticação de cookies para acessar conteúdo privado.
|
||||
- **Conteúdo com restrição de idade:** Faça login na conta do YouTube para visualizar vídeos com restrição de idade.
|
||||
- **Vídeos bloqueados geograficamente:** considere usar uma VPN para contornar restrições regionais.
|
||||
- **Vídeos removidos/excluídos:** O vídeo não está mais disponível no YouTube.
|
||||
- **Transmissões ao vivo:** As transmissões ao vivo não podem ser baixadas; espere o fluxo terminar.
|
||||
- **Erros de rede:** Verifique sua conexão com a Internet e tente novamente.
|
||||
- **URLs inválidos:** certifique-se de que o URL esteja correto e seja de uma plataforma compatível.
|
||||
- **Conteúdo Premium:** Requer assinatura do YouTube Premium.
|
||||
- **Bloqueios de direitos autorais:** O conteúdo está bloqueado devido a restrições de direitos autorais.
|
||||
- **Arquivos de vídeo e áudio separados após o download:** Isso acontece quando o FFmpeg está ausente ou não é detectado. YTSage requer FFmpeg para mesclar fluxos de vídeo e áudio de alta qualidade.
|
||||
- **Solução:** Certifique-se de que o FFmpeg esteja instalado e acessível no PATH do seu sistema. Para usuários do Windows, a opção mais fácil é baixar o arquivo `YTSage-v<version>-ffmpeg.exe`, que vem junto com o FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Aviso do Windows Defender / Antivírus
|
||||
|
||||
Alguns softwares antivírus podem sinalizar os arquivos `.exe` como falsos positivos. Esta é uma **limitação conhecida** dos aplicativos empacotados.
|
||||
|
||||
**Por que isso acontece:**
|
||||
- A heurística antivírus pode identificar erroneamente executáveis compactados como suspeitos
|
||||
|
||||
**Alternativas seguras:**
|
||||
- ✅ **Use instalação pip:** `pip install ytsage` (recomendado)
|
||||
- ✅ **Construir a partir da fonte**: seguindo isto [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Coloque o aplicativo na lista de permissões** em seu software antivírus
|
||||
|
||||
#### 🍎 macOS: "O aplicativo está danificado e não pode ser aberto"
|
||||
Se você vir esse erro no macOS Sonoma ou mais recente, será necessário remover o atributo de quarentena.
|
||||
|
||||
1. **Abra o Terminal** (você pode encontrá-lo usando o Spotlight).
|
||||
2. **Digite o seguinte comando** mas **não** pressione Enter ainda. Certifique-se de incluir o espaço no final:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Arraste o arquivo `YTSage.app`** da janela do Finder e solte-o diretamente na janela do Terminal. Isso colará automaticamente o caminho correto do arquivo.
|
||||
4. **Pressione Enter** para executar o comando.
|
||||
5. **Tente abrir YTSage.app novamente.** Agora ele deve iniciar corretamente.
|
||||
|
||||
---
|
||||
|
||||
#### **Locais de configuração (avançado)**
|
||||
- **Janelas:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Patrocinador
|
||||
|
||||
Se o YTSage economizar seu tempo, considere patrocinar o projeto. O patrocínio ajuda a cobrir o tempo de desenvolvimento, testes em plataformas e melhorias futuras.
|
||||
|
||||
- Patrocinadores do GitHub: https://github.com/sponsors/oop7
|
||||
- O link do patrocinador também está disponível diretamente no aplicativo, na caixa de diálogo Sobre.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Contribuindo
|
||||
|
||||
Aceitamos contribuições! Veja como você pode ajudar:
|
||||
|
||||
1. 🍴 Bifurque o repositório
|
||||
2. 🌿 Crie seu branch de recursos:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Confirme suas alterações:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Empurre para o galho:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Abra uma solicitação pull
|
||||
|
||||
### 🌍 Contribuindo com traduções
|
||||
|
||||
- Atualize o arquivo README localizado correspondente (por exemplo `README.es.md`)
|
||||
- Mantenha as strings do aplicativo sincronizadas editando `ytsage/languages/<code>.json`
|
||||
- Se o seu idioma estiver faltando, comece em `README.md` e crie `README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂 Estrutura do Projeto</summary>
|
||||
|
||||
## YTSage - Estrutura do Projeto
|
||||
|
||||
Este documento descreve a estrutura de pastas organizada do YTSage.
|
||||
|
||||
### 📁 Estrutura do Projeto
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ História da estrela
|
||||
|
||||
<div align="center">
|
||||
|
||||
## História da estrela
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Licença
|
||||
|
||||
Este projeto está licenciado sob a licença MIT - consulte o arquivo [LICENSE](../LICENSE) para obter detalhes.
|
||||
|
||||
## 🙏 Agradecimentos
|
||||
|
||||
<details>
|
||||
<summary>Mostrar agradecimentos</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Um sincero obrigado a todos que contribuíram para este projeto abrindo um problema para sugerir uma melhoria ou relatar um bug.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Componentes principais</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Mecanismo de download</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Processamento de mídia</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Tempo de execução para integração com yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Bibliotecas e Estruturas</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>Estrutura GUI</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Travesseiro</a></td>
|
||||
<td>Processamento de imagem</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">solicitações</a></td>
|
||||
<td>Solicitações HTTP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">embalagem</a></td>
|
||||
<td>Manuseio de versões e pacotes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">remarcação</a></td>
|
||||
<td>Renderização de redução</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Registro</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Ativos e Contribuintes</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nova Notificação 09 por Universfield</a></td>
|
||||
<td>Som de notificação</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Colaborador de código</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Isenção de responsabilidade
|
||||
|
||||
Esta ferramenta é apenas para uso pessoal. Respeite os termos de serviço do YouTube e os direitos dos criadores de conteúdo.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Feito com ❤️ por [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,618 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Современный загрузчик YouTube с чистым интерфейсом PySide6.**
|
||||
Скачивайте видео в любом качестве, извлекайте аудио, получайте субтитры и многое другое.
|
||||
|
||||
### 🌍 README Языки
|
||||
|
||||
Английский: [EN](../README.md)
|
||||
| Сообщение: [AR](README.ar.md)
|
||||
| Немецкий: [DE](README.de.md)
|
||||
| Испанский: [ES](README.es.md)
|
||||
| Французский: [FR](README.fr.md)
|
||||
| Ответ: [HI](README.hi.md)
|
||||
| Бахаса Индонезия: [ID](README.id.md)
|
||||
| Итальянский: [IT](README.it.md)
|
||||
| 日本語: [JA](README.ja.md)
|
||||
| Польски: [PL](README.pl.md)
|
||||
| Португальский: [PT](README.pt.md)
|
||||
| Русский: [RU](README.ru.md)
|
||||
| Тюркче: [TR](README.tr.md)
|
||||
| 中文: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Установка</a> •
|
||||
<a href="#features">Функции</a> •
|
||||
<a href="#usage">Использование</a> •
|
||||
<a href="#screenshots">Скриншоты</a> •
|
||||
<a href="#troubleshooting">Устранение неполадок</a> •
|
||||
<a href="#sponsor">Спонсор</a> •
|
||||
<a href="#contributing">Содействие</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ Почему YTSage?
|
||||
|
||||
YTSage предназначен для пользователей, которым нужен **простой, но мощный загрузчик YouTube**. В отличие от других инструментов, он предлагает:
|
||||
|
||||
- Чистый, современный интерфейс PySide6.
|
||||
- Загрузка видео, аудио и субтитров в один клик.
|
||||
- Расширенные функции, такие как SponsorBlock, объединение субтитров и выбор списка воспроизведения.
|
||||
– Дополнительный общий режим для сайтов, поддерживаемых yt-dlp, за пределами YouTube.
|
||||
- Кроссплатформенная поддержка и простота установки.
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Особенности
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Основные возможности | Расширенные возможности | Дополнительные возможности |
|
||||
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||
| 🎥 Формат таблицы | 🚫 Интеграция SponsorBlock | 🎞️ Отображение FPS/HDR |
|
||||
| 🎵 Извлечение аудио | 📝 Выбор и объединение нескольких субтитров | 🔄 Автоматическое обновление yt-dlp |
|
||||
| ✨ Простой интерфейс | 💾 Сохранить описание и миниатюру | 🛠️ Обнаружение FFmpeg/yt-dlp/Deno |
|
||||
| 📋 Поддержка и выбор плейлистов | 🚀 Ограничитель скорости | ⚙️ Пользовательские команды |
|
||||
| 📑 Встроить главы | ✂️ Обрезать разделы видео | 🍪 Вход с помощью файлов cookie |
|
||||
| 📜 История загрузок | 🔄 Выбор канала выпуска | 🌐 Поддержка прокси |
|
||||
| 🎚️ Преобразование аудиоформатов | 🎬 Настройки формата видео | 🆙 Встроенная вкладка «Обновление» |
|
||||
| 🌍 Общий режим | 🔊 Нормализация звука (EBU R128) | 🌍 Локализация на 14 языках |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Установка
|
||||
|
||||
### ⚡ Быстрая установка (рекомендуется)
|
||||
|
||||
Установите YTSage из PyPI:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Обновите существующую установку</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Затем запустите приложение:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Готовые исполняемые файлы
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Окна
|
||||
|
||||
| Формат | Описание |
|
||||
|--------|-------------|
|
||||
|  | Стандартный установщик |
|
||||
|  | В комплекте FFmpeg |
|
||||
|  | Портативная версия, установка не требуется |
|
||||
|  | Портативный с FFmpeg, в архиве |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Этапы установки</summary>
|
||||
|
||||
1. **Установщик EXE (`.exe`)**: дважды щелкните файл и следуйте указаниям мастера установки.
|
||||
2. **Портативная версия (`.zip`)**: распакуйте архив в нужное место и запустите `ytsage.exe`.
|
||||
3. **FFmpeg Bundled**: выберите версии в комплекте FFmpeg, если в вашей системе не установлен FFmpeg.
|
||||
</details>
|
||||
|
||||
#### 🐧 Линукс
|
||||
|
||||
| Формат | Описание |
|
||||
|--------|-------------|
|
||||
|  | Пакет Debian |
|
||||
|  | AppImage, портативный |
|
||||
|  | пакет RPM |
|
||||
|  | Комплект Flatpak |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Этапы установки</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **Об/мин (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **AppImage (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: следуйте инструкциям на Flathub или запустите:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
| Формат | Описание |
|
||||
|--------|-------------|
|
||||
|  | Заархивированное приложение для Apple Silicon |
|
||||
|  | Установщик образа диска для Apple Silicon |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Этапы установки</summary>
|
||||
|
||||
- **Установщик DMG (`.dmg`)**: дважды щелкните, чтобы смонтировать, затем перетащите `YTSage.app` в папку «Приложения».
|
||||
- **Архив приложений (`.zip`)**: распакуйте zip-архив и переместите `YTSage.app` в папку «Приложения».
|
||||
|
||||
*Примечание. Если вы столкнулись с ошибкой «Приложение повреждено», см. [macOS troubleshooting section](#troubleshooting) ниже.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Ручная установка из исходного кода</summary>
|
||||
|
||||
### 1. Клонировать репозиторий
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Установите зависимости
|
||||
|
||||
#### ⚡ С уф
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Или со стандартным пипом
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Запустите приложение
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Скриншоты
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Настройки загрузки</em></td>
|
||||
<td align="center"><em>Скачать плейлист</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Аудиоформат</em></td>
|
||||
<td align="center"><em>Пользовательские параметры</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Использование
|
||||
|
||||
<details>
|
||||
<summary>🎯 Базовое использование</summary>
|
||||
|
||||
1. **Запустите YTSage**
|
||||
2. **Вставьте URL-адрес YouTube** (или нажмите кнопку «Вставить URL-адрес»).
|
||||
3. **Нажмите «Анализ»**.
|
||||
4. **Выберите формат:**
|
||||
- `Video` для загрузки видео.
|
||||
- `Audio Only` для извлечения звука
|
||||
5. **Выберите параметры:**
|
||||
- Включить субтитры и выбрать язык
|
||||
- Включить объединение субтитров
|
||||
- Сохранить миниатюру
|
||||
- Удалить спонсорские сегменты
|
||||
- Сохранить описание
|
||||
- Вставлять главы
|
||||
6. **Выберите выходной каталог**
|
||||
7. **Нажмите «Загрузить»**.
|
||||
|
||||
> 💡 Каталогом загрузки по умолчанию является папка «Загрузки» пользователя.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Скачать плейлист</summary>
|
||||
|
||||
1. **Вставьте URL-адрес плейлиста**
|
||||
2. **Нажмите «Анализ»**.
|
||||
3. **Выберите видео в селекторе плейлиста (необязательно, по умолчанию — все)**
|
||||
4. **Выберите желаемый формат/качество**
|
||||
5. **Нажмите «Загрузить»**.
|
||||
|
||||
> 💡 Приложение автоматически обрабатывает очередь загрузки
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Общий режим для сайтов, не принадлежащих YouTube</summary>
|
||||
|
||||
Используйте общий режим, если хотите, чтобы YTSage принимал URL-адреса с сайтов, поддерживаемых yt-dlp, таких как Dailymotion, CBC Gem, TikTok и других.
|
||||
|
||||
Как его использовать:
|
||||
|
||||
1. Откройте `Download Settings`.
|
||||
2. Включите `Generic Mode`.
|
||||
3. Вставьте поддерживаемый URL-адрес видео или списка воспроизведения, не относящегося к YouTube.
|
||||
4. Нажмите `Analyze`.
|
||||
5. Выберите формат и загрузите как обычно.
|
||||
|
||||
Примечания:
|
||||
|
||||
- Общий режим изменяет только проверку URL-адреса внутри YTSage. Целевой сайт по-прежнему должен поддерживаться установленной версией yt-dlp.
|
||||
– Некоторым сайтам требуются файлы cookie, сеанс входа в систему, прокси-сервер или дополнительные аргументы yt-dlp в зависимости от экстрактора.
|
||||
– Если на сайте произошел сбой, сначала обновите yt-dlp на вкладке встроенного средства обновления, прежде чем сообщать о проблеме.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Параметры мультимедиа и загрузки</summary>
|
||||
|
||||
- **Параметры субтитров:** фильтруйте языки и встраивайте субтитры в видеофайл.
|
||||
- **Объединение субтитров:** объединение субтитров в видеофайл для жестко запрограммированных субтитров.
|
||||
- **Сохранить описание:** сохранить описание видео в виде текстового файла.
|
||||
- **Сохранить миниатюру:** сохраните миниатюру видео как файл изображения.
|
||||
- **Встроить главы.** Встраивайте маркеры глав в качестве метаданных для совместимых видеопроигрывателей.
|
||||
- **Удалить спонсорские сегменты.** Удалите спонсорские сегменты из видео с помощью SponsorBlock.
|
||||
- **Обрезать видео:** загружайте только определенные части видео, указав временные диапазоны в формате `HH:MM:SS`.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Настройки вывода и файла</summary>
|
||||
|
||||
- **Ограничитель скорости:** Ограничьте скорость загрузки, например `500K` до 500 КБ/с.
|
||||
- **Сохранить путь загрузки:** сохраните путь загрузки по умолчанию для будущих загрузок. Доступно в **Настройки загрузки → Путь загрузки**.
|
||||
- **Формат имени выходного файла:** Настройте формат имени выходного файла, используя такие переменные, как `%(title)s`, `%(uploader)s` и `%(resolution)s`. Доступно в **Настройки загрузки → Формат имени файла**.
|
||||
- **Принудительный формат вывода.** Принудительно загружайте видео в определенный формат контейнера, например `mp4`, `webm` или `mkv`. Доступно в **Настройки загрузки → Настройки формата вывода**.
|
||||
- **Преобразование аудиоформата:** конвертируйте загрузки, содержащие только аудио, в предпочтительные форматы, такие как `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` или `Best`. Доступно в **Настройки загрузки → Настройки аудиоформата**.
|
||||
- **Нормализация звука:** Стандартизируйте громкость для загрузок, содержащих только аудио, используя EBU R128.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Доступ и сеть</summary>
|
||||
|
||||
- **Войти с помощью файлов cookie:** войдите на YouTube, используя файлы cookie, чтобы получить доступ к личному контенту.
|
||||
Как его использовать:
|
||||
1. **Рекомендуется**. Используйте встроенную опцию `Extract cookies from browser` в приложении, затем выберите браузер и, при необходимости, профиль.
|
||||
2. Альтернативно извлеките файлы cookie вручную:
|
||||
а. Экспортируйте файлы cookie из вашего браузера, используя расширение, например [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file).
|
||||
б. Скопируйте файлы cookie в формате Netscape.
|
||||
в. Создайте файл с именем `cookies.txt` и вставьте в него файлы cookie.
|
||||
д. Выберите файл `cookies.txt` в приложении.
|
||||
- **Поддержка прокси:** используйте прокси-сервер для загрузки, например `http://<proxy-server>:<port>`
|
||||
- **Общий режим.** Разрешить YTSage анализировать и загружать контент с сайтов, не принадлежащих YouTube, и поддерживаемых yt-dlp. Включите его в разделе **Настройки загрузки → Общий режим**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Инструменты и уход</summary>
|
||||
|
||||
– **Пользовательские команды.** Доступ к расширенным функциям yt-dlp с помощью аргументов командной строки.
|
||||
- **Вкладка «Обновление».** Управляйте встроенными инструментами обновления из одного места в пользовательских настройках:
|
||||
- **Обновления yt-dlp:** проверяйте наличие обновлений и переключайтесь между стабильными и ночными выпусками.
|
||||
- **Проверка версии FFmpeg:** проверьте версию FFmpeg и откройте руководства по установке.
|
||||
- **Обновления Deno:** проверьте и обновите среду выполнения Deno.
|
||||
- **Обнаружение FFmpeg/yt-dlp/Deno:** автоматическое определение путей и версий FFmpeg, yt-dlp и Deno в диалоговом окне «О программе».
|
||||
- **История загрузок.** Просматривайте прошлые загрузки с помощью миниатюр и статусов с помощью кнопки **История**.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Локализация</summary>
|
||||
|
||||
YTSage поддерживает **14 языков**, что обеспечивает доступность по всему миру. Выберите предпочитаемый язык в меню **Пользовательские параметры → Язык**.
|
||||
|
||||
### Поддерживаемые языки
|
||||
|
||||
| Язык | Код | Язык | Код |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Английский | `en` | 🇪🇸 Испанский | `es` |
|
||||
| 🇸🇦 Арабский | `ar` | 🇫🇷 Французский | `fr` |
|
||||
| 🇩🇪 немецкий | `de` | 🇮🇳 Хинди | `hi` |
|
||||
| 🇮🇩 Индонезийский | `id` | 🇮🇹 Итальянский | `it` |
|
||||
| 🇯🇵 Японский | `ja` | 🇵🇱 Польский | `pl` |
|
||||
| 🇧🇷 Португальский | `pt` | 🇷🇺 Русский | `ru` |
|
||||
| 🇹🇷 Турецкий | `tr` | 🇨🇳 Китайский | `zh` |
|
||||
|
||||
### README Переводы
|
||||
|
||||
| Язык | Файл | Язык | Файл |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 Английский | [README.md](../README.md) | 🇪🇸 Испанский | [README.es.md](README.es.md)
|
||||
| 🇸🇦 Арабский | [README.ar.md](README.ar.md) | 🇫🇷 Французский | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 немецкий | [README.de.md](README.de.md) | 🇮🇳 Хинди | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Индонезийский | [README.id.md](README.id.md) | 🇮🇹 Итальянский | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 Японский | [README.ja.md](README.ja.md) | 🇵🇱 Польский | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Португальский | [README.pt.md](README.pt.md) | 🇷🇺 Русский | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Турецкий | [README.tr.md](README.tr.md) | 🇨🇳 Китайский | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Хотите сделать перевод?** Посетите раздел [Contributing](#contributing), чтобы мы могли добавить больше языков!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Устранение неполадок
|
||||
|
||||
<details>
|
||||
<summary>Нажмите, чтобы просмотреть распространенные проблемы и решения</summary>
|
||||
|
||||
– **Таблица формата не отображается.** Обновите yt-dlp до последней версии и переключайтесь на yt-dlp каждую ночь.
|
||||
- **Не удалось загрузить.** Проверьте подключение к Интернету и убедитесь, что видео доступно.
|
||||
- **Конкретные ошибки загрузки:**
|
||||
- **Частные видео.** Используйте аутентификацию с помощью файлов cookie для доступа к частному контенту.
|
||||
- **Контент с возрастными ограничениями.** Войдите в аккаунт YouTube, чтобы просмотреть видео с возрастными ограничениями.
|
||||
– **Видео с геоблокировкой.** Рассмотрите возможность использования VPN, чтобы обойти региональные ограничения.
|
||||
– **Удалены видео:** Видео больше не доступно на YouTube.
|
||||
- **Прямые трансляции:** Прямые трансляции невозможно загрузить; дождитесь окончания потока.
|
||||
- **Ошибки сети.** Проверьте подключение к Интернету и повторите попытку.
|
||||
- **Недопустимые URL-адреса.** Убедитесь, что URL-адрес правильный и принадлежит поддерживаемой платформе.
|
||||
- **Премиум-контент:** требуется подписка YouTube Premium.
|
||||
- **Блокировка авторских прав.** Контент блокируется из-за ограничений авторских прав.
|
||||
- **Разделение видео и аудиофайлов после загрузки.** Это происходит, когда FFmpeg отсутствует или не обнаружен. YTSage требует FFmpeg для объединения высококачественных видео и аудио потоков.
|
||||
- **Решение:** Убедитесь, что FFmpeg установлен и доступен в PATH вашей системы. Для пользователей Windows самый простой вариант — загрузить файл `YTSage-v<version>-ffmpeg.exe`, который поставляется в комплекте с FFmpeg.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Предупреждение Защитника Windows/антивируса
|
||||
|
||||
Некоторые антивирусные программы могут помечать файлы `.exe` как ложные срабатывания. Это **известное ограничение** пакетных приложений.
|
||||
|
||||
**Почему это происходит:**
|
||||
- Антивирусная эвристика может ошибочно идентифицировать упакованные исполняемые файлы как подозрительные.
|
||||
|
||||
**Безопасные альтернативы:**
|
||||
- ✅ **Используйте установку pip:** `pip install ytsage` (рекомендуется)
|
||||
- ✅ **Сборка из исходного кода**: следуя этому [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Внесите приложение в белый список** в антивирусном программном обеспечении.
|
||||
|
||||
#### 🍎 macOS: «Приложение повреждено и его невозможно открыть»
|
||||
Если вы видите эту ошибку в macOS Sonoma или более поздней версии, вам необходимо удалить атрибут карантина.
|
||||
|
||||
1. **Откройте терминал** (его можно найти с помощью Spotlight).
|
||||
2. **Введите следующую команду**, но **не** пока нажимайте Enter. Обязательно добавьте пробел в конце:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **Перетащите файл `YTSage.app`** из окна Finder и поместите его прямо в окно терминала. Это автоматически вставит правильный путь к файлу.
|
||||
4. **Нажмите Enter**, чтобы запустить команду.
|
||||
5. **Попробуйте снова открыть YTSage.app.** Теперь оно должно запуститься правильно.
|
||||
|
||||
---
|
||||
|
||||
#### **Места конфигурации (дополнительно)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Спонсор
|
||||
|
||||
Если YTSage сэкономит вам время, рассмотрите возможность спонсирования проекта. Спонсорство помогает покрыть время разработки, тестирования на разных платформах и будущих улучшений.
|
||||
|
||||
- Спонсоры GitHub: https://github.com/sponsors/oop7
|
||||
- Спонсорская ссылка также доступна непосредственно внутри приложения из диалогового окна «О программе».
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Вклад
|
||||
|
||||
Мы приветствуем вклады! Вот как вы можете помочь:
|
||||
|
||||
1. 🍴 Форкните репозиторий
|
||||
2. 🌿 Создайте свою ветку функций:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Зафиксируйте изменения:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Нажмите на ветку:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Откройте запрос на включение
|
||||
|
||||
### 🌍 Участие в переводах
|
||||
|
||||
- Обновите соответствующий локализованный файл README (например, `README.es.md`).
|
||||
- Синхронизируйте строки приложения, отредактировав `ytsage/languages/<code>.json`.
|
||||
- Если ваш язык отсутствует, начните с `README.md` и создайте `README.<code>.md`.
|
||||
|
||||
<details>
|
||||
<summary>📂 Структура проекта</summary>
|
||||
|
||||
## YTSage — Структура проекта
|
||||
|
||||
В этом документе описывается организованная структура папок YTSage.
|
||||
|
||||
### 📁 Структура проекта
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Звездная история
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Звездная история
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Лицензия
|
||||
|
||||
Этот проект лицензируется по лицензии MIT — подробности см. в файле [LICENSE](../LICENSE).
|
||||
|
||||
## 🙏 Благодарности
|
||||
|
||||
<details>
|
||||
<summary>Показать благодарности</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Сердечное спасибо всем, кто внес свой вклад в этот проект, открыв проблему, чтобы предложить улучшения или сообщить об ошибке.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Основные компоненты</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>Загрузить двигатель</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Обработка мультимедиа</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Среда выполнения для интеграции с yt-dlp</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Библиотеки и платформы</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>GUI Framework</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Подушка</a></td>
|
||||
<td>Обработка изображений</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">запросы</a></td>
|
||||
<td>HTTP-запросы</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">упаковка</a></td>
|
||||
<td>Обработка версий и пакетов</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">уценка</a></td>
|
||||
<td>Рендеринг уценки</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Ведение журнала</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Активы и участники</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Новое уведомление 09 от Universfield</a></td>
|
||||
<td>Звук уведомления</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Соавтор кода</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Отказ от ответственности
|
||||
|
||||
Этот инструмент предназначен только для личного использования. Пожалуйста, соблюдайте условия обслуживания YouTube и права создателей контента.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
Сделано с ❤️ автором [oop7](https://github.com/oop7)
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,617 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**Temiz bir PySide6 arayüzüne sahip modern bir YouTube indiricisi.**
|
||||
Videoları istediğiniz kalitede indirin, ses çıkarın, altyazıları getirin ve daha fazlasını yapın.
|
||||
|
||||
### 🌍 BENİOKU Diller
|
||||
|
||||
İngilizce: [EN](../README.md)
|
||||
| Cevap: [AR](README.ar.md)
|
||||
| Almanca: [DE](README.de.md)
|
||||
| İspanyolca: [ES](README.es.md)
|
||||
| Fransızca: [FR](README.fr.md)
|
||||
| Adres: [HI](README.hi.md)
|
||||
| Bahasa Endonezya: [ID](README.id.md)
|
||||
| İtalyanca: [IT](README.it.md)
|
||||
| Şarkı sözü: [JA](README.ja.md)
|
||||
| Polski: [PL](README.pl.md)
|
||||
| Portekizce: [PT](README.pt.md)
|
||||
| Rusça: [RU](README.ru.md)
|
||||
| Türkçe: [TR](README.tr.md)
|
||||
| Adres: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">Kurulum</a> •
|
||||
<a href="#features">Özellikler</a> •
|
||||
<a href="#usage">Kullanım</a> •
|
||||
<a href="#screenshots">Ekran görüntüleri</a> •
|
||||
<a href="#troubleshooting">Sorun giderme</a> •
|
||||
<a href="#sponsor">Sponsor</a> •
|
||||
<a href="#contributing">Katkıda Bulunuyorum</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ Neden YTSage?
|
||||
|
||||
YTSage, **basit ama güçlü bir YouTube indiricisi** isteyen kullanıcılar için tasarlanmıştır. Diğer araçların aksine şunları sunar:
|
||||
|
||||
- Temiz, modern bir PySide6 arayüzü
|
||||
- Video, ses ve altyazılar için tek tıklamayla indirmeler
|
||||
- SponsorBlock, altyazı birleştirme ve oynatma listesi seçimi gibi gelişmiş özellikler
|
||||
- YouTube'un ötesinde yt-dlp destekli siteler için İsteğe Bağlı Genel Mod
|
||||
- Platformlar arası destek ve kolay kurulum
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ Özellikler
|
||||
|
||||
<div align="center">
|
||||
|
||||
| Temel Özellikler | Gelişmiş Özellikler | Ekstra Özellikler |
|
||||
|-------------------------------------|--------------------------------------------------|
|
||||
| 🎥 Format Tablosu | 🚫 SponsorBlock Entegrasyonu | 🎞️ FPS/HDR Ekran |
|
||||
| 🎵 Ses Çıkarma | 📝 Çoklu Altyazı Seç ve Birleştir | 🔄 yt-dlp'yi Otomatik Güncelle |
|
||||
| ✨ Basit kullanıcı arayüzü | 💾 Açıklamayı ve Küçük Resmi Kaydet | 🛠️ FFmpeg/yt-dlp/Deno Algılama |
|
||||
| 📋 Çalma Listesi Desteği ve Seçici | 🚀 Hız Sınırlayıcı | ⚙️ Özel Komutlar |
|
||||
| 📑 Bölümleri Yerleştir | ✂️ Video Bölümlerini Kırp | 🍪 Çerezlerle Giriş Yapın |
|
||||
| 📜 Geçmişi İndir | 🔄 Kanal Seçimini Serbest Bırak | 🌐 Proxy Desteği |
|
||||
| 🎚️ Ses Formatı Dönüştürme | 🎬 Video Formatı Ayarları | 🆙 Yerleşik Güncelleyici Sekmesi |
|
||||
| 🌍 Genel Mod | 🔊 Ses Normalizasyonu (EBU R128) | 🌍 14 Dilde Yerelleştirme |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 Kurulum
|
||||
|
||||
### ⚡ Hızlı Kurulum (Önerilir)
|
||||
|
||||
YTSage'i PyPI'den yükleyin:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 Mevcut bir kurulumu güncelleyin</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Ardından uygulamayı başlatın:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 Önceden Oluşturulmuş Yürütülebilir Dosyalar
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Windows
|
||||
|
||||
| Biçim | Açıklama |
|
||||
|----------|----------------|
|
||||
|  | Standart yükleyici |
|
||||
|  | FFmpeg paketiyle birlikte |
|
||||
|  | Taşınabilir versiyon, kurulum gerektirmez |
|
||||
|  | FFmpeg ile taşınabilir, sıkıştırılmış |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Kurulum Adımları</summary>
|
||||
|
||||
1. **EXE Yükleyici (`.exe`)**: Dosyaya çift tıklayın ve kurulum sihirbazını izleyin.
|
||||
2. **Taşınabilir Sürüm (`.zip`)**: Arşivi istediğiniz konuma çıkarın ve `ytsage.exe`'i çalıştırın.
|
||||
3. **FFmpeg Paketli**: Sisteminizde FFmpeg yüklü değilse FFmpeg paketli versiyonlarını seçin.
|
||||
</details>
|
||||
|
||||
#### 🐧 Linux
|
||||
|
||||
| Biçim | Açıklama |
|
||||
|----------|----------------|
|
||||
|  | Debian paketi |
|
||||
|  | AppImage, taşınabilir |
|
||||
|  | RPM paketi |
|
||||
|  | Düz Paket Paketi |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Kurulum Adımları</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **RPM (`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **AppImage (`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**: Flathub'daki talimatları izleyin veya şunu çalıştırın:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎macOS
|
||||
|
||||
| Biçim | Açıklama |
|
||||
|----------|----------------|
|
||||
|  | Apple Silicon için sıkıştırılmış uygulama |
|
||||
|  | Apple Silicon için disk görüntüsü yükleyici |
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Kurulum Adımları</summary>
|
||||
|
||||
- **DMG Installer (`.dmg`)**: Bağlamak için çift tıklayın, ardından `YTSage.app`'i Uygulamalar klasörünüze sürükleyin.
|
||||
- **Uygulama Arşivi (`.zip`)**: Zip dosyasını çıkartın ve `YTSage.app`'i Uygulamalar klasörünüze taşıyın.
|
||||
|
||||
*Not: "Uygulama hasar gördü" hatasıyla karşılaşırsanız aşağıdaki [macOS troubleshooting section](#troubleshooting)'e bakın.*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻 Kaynaktan Manuel Kurulum</summary>
|
||||
|
||||
### 1. Depoyu Klonlayın
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2. Bağımlılıkları Kurun
|
||||
|
||||
#### ⚡UV ile
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 Veya standart pip ile
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. Uygulamayı çalıştırın
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 Ekran görüntüleri
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>İndirme Ayarları</em></td>
|
||||
<td align="center"><em>Çalma Listesi İndir</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>Ses Formatı</em></td>
|
||||
<td align="center"><em>Özel Seçenekler</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 Kullanım
|
||||
|
||||
<details>
|
||||
<summary>🎯 Temel Kullanım</summary>
|
||||
|
||||
1. **YTSage'i başlatın**
|
||||
2. **YouTube URL'sini yapıştırın** (veya "URL'yi yapıştır" düğmesini kullanın)
|
||||
3. **"Analiz Et"i tıklayın**
|
||||
4. **Biçim Seçin:**
|
||||
- `Video` video indirmeleri için
|
||||
- `Audio Only` ses çıkarma için
|
||||
5. **Seçenekleri seçin:**
|
||||
- Altyazıları etkinleştirin ve dili seçin
|
||||
- Altyazı birleştirmeyi etkinleştir
|
||||
- Küçük resmi kaydet
|
||||
- Sponsor segmentlerini kaldırın
|
||||
- Açıklamayı kaydet
|
||||
- Bölümleri yerleştir
|
||||
6. **Çıktı Dizinini Seçin**
|
||||
7. **"İndir"e tıklayın**
|
||||
|
||||
> 💡 Varsayılan indirme dizini kullanıcının "İndirilenler" klasörüdür.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋 Çalma Listesi İndir</summary>
|
||||
|
||||
1. **Oynatma Listesi URL'sini yapıştırın**
|
||||
2. **"Analiz Et"i tıklayın**
|
||||
3. **Oynatma seçiciden videoları seçin (isteğe bağlı, varsayılan olarak tümü)**
|
||||
4. **İstediğiniz formatı/kaliteyi seçin**
|
||||
5. **"İndir"e tıklayın**
|
||||
|
||||
> 💡 Uygulama indirme sırasını otomatik olarak yönetir
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 YouTube dışı siteler için Genel Mod</summary>
|
||||
|
||||
YTSage'in Dailymotion, CBC Gem, TikTok ve diğerleri gibi yt-dlp tarafından desteklenen sitelerdeki URL'leri kabul etmesini istiyorsanız Genel Modu kullanın.
|
||||
|
||||
Nasıl kullanılır:
|
||||
|
||||
1. `Download Settings`'i açın.
|
||||
2. `Generic Mode`'ı etkinleştirin.
|
||||
3. Desteklenen YouTube dışı bir video veya oynatma listesi URL'sini yapıştırın.
|
||||
4. `Analyze`'a tıklayın.
|
||||
5. Bir format seçin ve her zamanki gibi indirin.
|
||||
|
||||
Notlar:
|
||||
|
||||
- Genel Mod yalnızca YTSage içindeki URL doğrulamasını değiştirir. Hedef sitenin yüklü yt-dlp sürümünüz tarafından hala desteklenmesi gerekiyor.
|
||||
- Bazı siteler, çıkarıcıya bağlı olarak çerezlere, oturum açma oturumuna, proxy'ye veya ekstra yt-dlp argümanlarına ihtiyaç duyar.
|
||||
- Bir site başarısız olursa, sorunu bildirmeden önce yerleşik güncelleyici sekmesinden yt-dlp'yi güncelleyin.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰 Medya ve İndirme Seçenekleri</summary>
|
||||
|
||||
- **Altyazı Seçenekleri:** Dilleri filtreleyin ve altyazıları video dosyasına ekleyin
|
||||
- **Altyazı Birleştirme:** Sabit kodlanmış altyazılar için altyazıları video dosyasıyla birleştirin
|
||||
- **Açıklamayı Kaydet:** Video açıklamasını bir metin dosyası olarak kaydedin
|
||||
- **Küçük Resmi Kaydet:** Video küçük resmini bir resim dosyası olarak kaydedin
|
||||
- **Bölümleri Göm:** Uyumlu video oynatıcılar için bölüm işaretlerini meta veri olarak gömün
|
||||
- **Sponsor Segmentlerini Kaldır:** SponsorBlock'u kullanarak sponsor segmentlerini videodan kaldırın
|
||||
- **Videoyu Kırp:** `HH:MM:SS` biçiminde zaman aralıklarını belirterek videonun yalnızca belirli bölümlerini indirin
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️ Çıktı ve Dosya Ayarları</summary>
|
||||
|
||||
- **Hız Sınırlayıcı:** İndirme hızını sınırlayın, örneğin 500 KB/s için `500K`
|
||||
- **İndirme Yolunu Kaydet:** Gelecekteki indirmeler için varsayılan indirme yolunu kaydedin. **İndirme Ayarları → İndirme Yolu**'nda mevcuttur.
|
||||
- **Çıktı Dosya Adı Formatı:** `%(title)s`, `%(uploader)s` ve `%(resolution)s` gibi değişkenleri kullanarak çıktı dosya adı formatını özelleştirin. **İndirme Ayarları → Dosya Adı Formatı**'nda mevcuttur.- **Çıktı Formatını Zorla:** Video indirme işlemlerini `mp4`, `webm` veya `mkv` gibi belirli bir kapsayıcı formatına zorlayın. **İndirme Ayarları → Çıktı Formatı Ayarları** bölümünde mevcuttur.
|
||||
- **Ses Formatı Dönüştürme:** Yalnızca ses indirmelerini `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A` gibi tercih edilen formatlara dönüştürün `Vorbis` veya `Best`. **İndirme Ayarları → Ses Formatı Ayarları**'nda mevcuttur.
|
||||
- **Ses Normalizasyonu:** EBU R128 kullanarak yalnızca ses indirmeleri için ses düzeyini standartlaştırın.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐 Erişim ve Ağ</summary>
|
||||
|
||||
- **Çerezler ile Giriş Yapın:** Özel içeriğe erişmek için çerezleri kullanarak YouTube'a giriş yapın.
|
||||
Nasıl kullanılır:
|
||||
1. **Önerilen:** Uygulamadaki yerleşik `Extract cookies from browser` seçeneğini kullanın, ardından tarayıcınızı ve isteğe bağlı olarak bir profili seçin.
|
||||
2. Alternatif olarak çerezleri manuel olarak çıkarın:
|
||||
a. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) gibi bir uzantı kullanarak çerezleri tarayıcınızdan dışa aktarın
|
||||
b. Çerezleri Netscape formatında kopyalayın
|
||||
c. `cookies.txt` adında bir dosya oluşturun ve çerezleri bu dosyaya yapıştırın
|
||||
D. Uygulamada `cookies.txt` dosyasını seçin
|
||||
- **Proxy Desteği:** İndirmeler için bir proxy sunucusu kullanın, örneğin `http://<proxy-server>:<port>`
|
||||
- **Genel Mod:** YTSage'in, yt-dlp tarafından desteklenen YouTube dışı sitelerden analiz yapmasına ve indirme yapmasına izin verin. **İndirme Ayarları → Genel Mod**'dan etkinleştirin.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️ Araçlar ve Bakım</summary>
|
||||
|
||||
- **Özel Komutlar:** Komut satırı bağımsız değişkenleri aracılığıyla gelişmiş yt-dlp özelliklerine erişin
|
||||
- **Güncelleyici Sekmesi:** Özel Seçenekler'de yerleşik güncelleme araçlarını tek yerden yönetin:
|
||||
- **yt-dlp Güncellemeleri:** Güncellemeleri kontrol edin ve Mevcut ve Gecelik sürüm kanalları arasında geçiş yapın
|
||||
- **FFmpeg Sürüm Denetleyicisi:** FFmpeg sürümünüzü kontrol edin ve kurulum kılavuzlarını açın
|
||||
- **Deno Güncellemeleri:** Deno çalışma zamanını kontrol edin ve güncelleyin
|
||||
- **FFmpeg/yt-dlp/Deno Algılama:** Hakkında iletişim kutusundan FFmpeg, yt-dlp ve Deno yollarını ve sürümlerini otomatik olarak algılar.
|
||||
- **İndirme Geçmişi:** **Geçmiş** düğmesinden geçmiş indirmeleri küçük resimler ve durumlarla birlikte görüntüleyin.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍 Yerelleştirme</summary>
|
||||
|
||||
YTSage, dünya çapında erişilebilirlik için **14 dili** destekler. **Özel Seçenekler → Dil**'den tercih ettiğiniz dili seçin.
|
||||
|
||||
### Desteklenen Diller
|
||||
|
||||
| Dil | Kod | Dil | Kod |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 İngilizce | `en` | 🇪🇸 İspanyolca | `es` |
|
||||
| 🇸🇦 Arapça | `ar` | 🇫🇷 Fransızca | `fr` |
|
||||
| 🇩🇪 Almanca | `de` | 🇮🇳 Hintçe | `hi` |
|
||||
| 🇮🇩 Endonezce | `id` | 🇮🇹 İtalyanca | `it` |
|
||||
| 🇯🇵 Japonca | `ja` | 🇵🇱 Lehçe | `pl` |
|
||||
| 🇧🇷 Portekizce | `pt` | 🇷🇺 Rusça | `ru` |
|
||||
| 🇹🇷 Türkçe | `tr` | 🇨🇳 Çince | `zh` |
|
||||
|
||||
### README Çevirileri
|
||||
|
||||
| Dil | Dosya | Dil | Dosya |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 İngilizce | [README.md](../README.md) | 🇪🇸 İspanyolca | [README.es.md](README.es.md)
|
||||
| 🇸🇦 Arapça | [README.ar.md](README.ar.md) | 🇫🇷 Fransızca | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 Almanca | [README.de.md](README.de.md) | 🇮🇳 Hintçe | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 Endonezce | [README.id.md](README.id.md) | 🇮🇹 İtalyanca | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 Japonca | [README.ja.md](README.ja.md) | 🇵🇱 Lehçe | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 Portekizce | [README.pt.md](README.pt.md) | 🇷🇺 Rusça | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 Türkçe | [README.tr.md](README.tr.md) | 🇨🇳 Çince | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **Çeviriye katkıda bulunmak mı istiyorsunuz?** Daha fazla dil eklememize yardımcı olmak için [Contributing](#contributing) bölümüne göz atın!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ Sorun giderme
|
||||
|
||||
<details>
|
||||
<summary>Genel sorunları ve çözümleri görüntülemek için tıklayın</summary>
|
||||
|
||||
- **Biçim tablosu görüntülenmiyor:** yt-dlp'yi en son sürüme güncelleyin ve her gece yt-dlp'ye geçin.
|
||||
- **İndirme başarısız oluyor:** İnternet bağlantınızı kontrol edin ve videonun mevcut olduğundan emin olun.
|
||||
- **Belirli indirme hataları:**
|
||||
- **Özel videolar:** Özel içeriğe erişmek için çerez kimlik doğrulamasını kullanın.
|
||||
- **Yaş kısıtlamalı içerik:** Yaş kısıtlamalı videoları görüntülemek için YouTube hesabına giriş yapın.
|
||||
- **Coğrafi olarak engellenen videolar:** Bölgesel kısıtlamaları aşmak için bir VPN kullanmayı düşünün.
|
||||
- **Kaldırılan/silinen videolar:** Video artık YouTube'da mevcut değil.
|
||||
- **Canlı yayınlar:** Canlı yayınlar indirilemez; akışın bitmesini bekleyin.
|
||||
- **Ağ hataları:** İnternet bağlantınızı kontrol edip tekrar deneyin.
|
||||
- **Geçersiz URL'ler:** URL'nin doğru olduğundan ve desteklenen bir platforma ait olduğundan emin olun.
|
||||
- **Premium içerik:** YouTube Premium üyeliği gerektirir.
|
||||
- **Telif hakkı engellemeleri:** İçerik, telif hakkı kısıtlamaları nedeniyle engellenmiştir.
|
||||
- **İndirmeden sonra video ve ses dosyalarını ayırın:** Bu, FFmpeg eksik olduğunda veya algılanmadığında meydana gelir. YTSage, yüksek kaliteli video ve ses akışlarını birleştirmek için FFmpeg'e ihtiyaç duyar.
|
||||
- **Çözüm:** FFmpeg'in sisteminizin PATH'inde kurulu ve erişilebilir olduğundan emin olun. Windows kullanıcıları için en kolay seçenek, FFmpeg ile birlikte gelen `YTSage-v<version>-ffmpeg.exe` dosyasını indirmektir.
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Windows Defender / Antivirüs Uyarısı
|
||||
|
||||
Bazı antivirüs yazılımları `.exe` dosyalarını yanlış pozitif olarak işaretleyebilir. Bu, paket uygulamaların **bilinen bir sınırlamasıdır**.
|
||||
|
||||
**Bu neden oluyor:**
|
||||
- Antivirüs buluşsal yöntemleri, paketlenmiş yürütülebilir dosyaları şüpheli olarak yanlış tanımlayabilir
|
||||
|
||||
**Güvenli alternatifler:**
|
||||
- ✅ **Pip kurulumunu kullanın:** `pip install ytsage` (önerilir)
|
||||
- ✅ **Kaynaktan oluşturun**: bunu takip ederek [guide](../.github/CI_CD_README.md)
|
||||
- ✅ **Uygulamayı antivirüs yazılımınızda beyaz listeye alın**
|
||||
|
||||
#### 🍎 macOS: "Uygulama hasarlı ve açılamıyor"
|
||||
Bu hatayı macOS Sonoma veya daha yeni bir sürümde görüyorsanız karantina özelliğini kaldırmanız gerekir.
|
||||
|
||||
1. **Terminal'i açın** (Spotlight'ı kullanarak bulabilirsiniz).
|
||||
2. **Aşağıdaki komutu yazın** ancak **henüz Enter'a basmayın**. Sondaki boşluğu eklediğinizden emin olun:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **`YTSage.app` dosyasını Finder pencerenizden sürükleyip doğrudan Terminal penceresine bırakın. Bu, doğru dosya yolunu otomatik olarak yapıştıracaktır.
|
||||
4. **Komutu çalıştırmak için **Enter** tuşuna basın.
|
||||
5. **YTSage.app'i tekrar açmayı deneyin.** Artık doğru şekilde başlatılması gerekir.
|
||||
|
||||
---
|
||||
|
||||
#### **Yapılandırma Konumları (Gelişmiş)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 Sponsor
|
||||
|
||||
YTSage size zaman kazandırıyorsa projeye sponsor olmayı düşünün. Sponsorluk, geliştirme süresinin, platformlar arası testlerin ve gelecekteki iyileştirmelerin karşılanmasına yardımcı olur.
|
||||
|
||||
- GitHub Sponsorları: https://github.com/sponsors/oop7
|
||||
- Sponsor bağlantısına doğrudan uygulamanın içindeki Hakkında iletişim kutusundan da ulaşılabilir.
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 Katkıda Bulunmak
|
||||
|
||||
Katkılarınızı bekliyoruz! İşte nasıl yardımcı olabileceğiniz:
|
||||
|
||||
1. 🍴 Depoyu çatallayın
|
||||
2. 🌿 Özellik dalınızı oluşturun:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 Değişikliklerinizi gerçekleştirin:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤 Şubeye itin:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 Bir Çekme İsteği Açın
|
||||
|
||||
### 🌍 Çevirilere Katkıda Bulunmak
|
||||
|
||||
- Eşleşen yerelleştirilmiş README dosyasını güncelleyin (örneğin `README.es.md`)
|
||||
- `ytsage/languages/<code>.json` düzenleyerek uygulama dizelerini senkronize tutun
|
||||
- Diliniz eksikse `README.md`'den başlayın ve `README.<code>.md`'i oluşturun
|
||||
|
||||
<details>
|
||||
<summary>📂 Proje Yapısı</summary>
|
||||
|
||||
## YTSage - Proje Yapısı
|
||||
|
||||
Bu belge YTSage'in organize klasör yapısını açıklamaktadır.
|
||||
|
||||
### 📁 Proje Yapısı
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ Yıldız Tarihi
|
||||
|
||||
<div align="center">
|
||||
|
||||
## Yıldız Geçmişi
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 Lisans
|
||||
|
||||
Bu proje MIT Lisansı kapsamında lisanslıdır; ayrıntılar için [LICENSE](../LICENSE) dosyasına bakın.
|
||||
|
||||
## 🙏 Teşekkürler
|
||||
|
||||
<details>
|
||||
<summary>Teşekkürleri Göster</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>Bir iyileştirme önermek veya hata bildirmek için konu açarak bu projeye katkıda bulunan herkese yürekten teşekkür ederiz.</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">Temel Bileşenler</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>İndirme Motoru</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>Medya İşleme</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">Deno</a></td>
|
||||
<td>Yt-dlp</td> ile entegrasyon için çalışma zamanı
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Kütüphaneler ve Çerçeveler</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>GUI Çerçevesi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">Yastık</a></td>
|
||||
<td>Görüntü İşleme</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">istekler</a></td>
|
||||
<td>HTTP İstekleri</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">paketleme</a></td>
|
||||
<td>Versiyon ve Paket İşleme</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||
<td>Markdown Oluşturma</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>Günlüğe kaydetme</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">Varlıklar ve Katkıda Bulunanlar</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Universfield'dan Yeni Bildirim 09</a></td>
|
||||
<td>Bildirim Sesi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>Kod Katılımcısı</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ Yasal Uyarı
|
||||
|
||||
Bu araç yalnızca kişisel kullanım içindir. Lütfen YouTube'un hizmet şartlarına ve içerik oluşturucuların haklarına saygı gösterin.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
[oop7](https://github.com/oop7) tarafından ❤️ ile yapılmıştır
|
||||
|
||||
</div>
|
||||
@@ -0,0 +1,617 @@
|
||||
<div align="center">
|
||||
|
||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
||||
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
|
||||
|
||||
[](https://www.python.org/downloads/)
|
||||
[](https://pepy.tech/project/ytsage)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://opensource.org/licenses/MIT)
|
||||
[](https://github.com/oop7/YTSage/releases)
|
||||
[](https://github.com/oop7/YTSage/stargazers)
|
||||
[](https://pypi.org/project/ytsage/)
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
**具有干净 PySide6 界面的现代 YouTube 下载器。**
|
||||
下载任何质量的视频、提取音频、获取字幕等等。
|
||||
|
||||
### 🌍 自述文件语言
|
||||
|
||||
英文:[EN](../README.md)
|
||||
|巴黎: [AR](README.ar.md)
|
||||
|德语:[DE](README.de.md)
|
||||
|西班牙语:[ES](README.es.md)
|
||||
|法语:[FR](README.fr.md)
|
||||
|编号:[HI](README.hi.md)
|
||||
|印度尼西亚语:[ID](README.id.md)
|
||||
|意大利语:[IT](README.it.md)
|
||||
| 日本语:[JA](README.ja.md)
|
||||
|波兰斯基:[PL](README.pl.md)
|
||||
|葡萄牙语:[PT](README.pt.md)
|
||||
| Русский: [RU](README.ru.md)
|
||||
|土耳其:[TR](README.tr.md)
|
||||
| 中文: [ZH](README.zh.md)
|
||||
|
||||
<p align="center">
|
||||
<a href="#installation">安装</a> •
|
||||
<a href="#features">特点</a> •
|
||||
<a href="#usage">使用</a> •
|
||||
<a href="#screenshots">屏幕截图</a> •
|
||||
<a href="#troubleshooting">故障排除</a> •
|
||||
<a href="#sponsor">赞助商</a> •
|
||||
<a href="#contributing">贡献</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
<a id="why-ytsage"></a>
|
||||
## ❓ 为什么选择 YTSage?
|
||||
|
||||
YTSage 专为想要**简单但功能强大的 YouTube 下载器**的用户而设计。与其他工具不同,它提供:
|
||||
|
||||
- 干净、现代的 PySide6 界面
|
||||
- 视频、音频和字幕一键下载
|
||||
- SponsorBlock、字幕合并和播放列表选择等高级功能
|
||||
- 适用于 YouTube 以外支持 yt-dlp 的网站的可选通用模式
|
||||
- 跨平台支持且易于安装
|
||||
|
||||
<a id="features"></a>
|
||||
## ✨ 特点
|
||||
|
||||
<div align="center">
|
||||
|
||||
|核心特点|高级功能 |额外功能 |
|
||||
|------------------------------------------------|--------------------------------------------------------|------------------------------------|
|
||||
| 🎥 格式化表格 | 🚫 SponsorBlock 集成 | 🎞️ FPS/HDR 显示 |
|
||||
| 🎵 音频提取 | 📝 多字幕选择和合并 | 🔄 自动更新 yt-dlp |
|
||||
| ✨ 简单的用户界面 | 💾 保存描述和缩略图 | 🛠️ FFmpeg/yt-dlp/Deno 检测 |
|
||||
| 📋 播放列表支持和选择器 | 🚀 限速器 | ⚙️ 自定义命令 |
|
||||
| 📑 嵌入章节 | ✂️ 修剪视频部分 | 🍪 使用 Cookie 登录 |
|
||||
| 📜 下载历史记录 | 🔄 发布渠道选择 | 🌐 代理支持 |
|
||||
| 🎚️ 音频格式转换 | 🎬 视频格式设置 | 🆙 内置更新程序选项卡 |
|
||||
| 🌍 通用模式 | 🔊 音频标准化 (EBU R128) | 🌍 14 种语言本地化 |
|
||||
</div>
|
||||
|
||||
<a id="installation"></a>
|
||||
## 🚀 安装
|
||||
|
||||
### ⚡ 快速安装(推荐)
|
||||
|
||||
从 PyPI 安装 YTSage:
|
||||
|
||||
```bash
|
||||
pip install ytsage
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>🔄 更新现有安装</summary>
|
||||
|
||||
```bash
|
||||
pip install --upgrade ytsage
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
然后启动应用程序:
|
||||
|
||||
```bash
|
||||
ytsage
|
||||
```
|
||||
|
||||
### 📦 预构建的可执行文件
|
||||
|
||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
||||
|
||||
#### 🪟 Windows
|
||||
|
||||
|格式|描述 |
|
||||
|--------|-------------|
|
||||
|  |标准安装程序 |
|
||||
|  |与 FFmpeg 捆绑 |
|
||||
|  |便携版,无需安装|
|
||||
|  |带有 FFmpeg 的便携式,压缩 |
|
||||
|
||||
<details>
|
||||
<summary>🛠️安装步骤</summary>
|
||||
|
||||
1. **EXE 安装程序 (`.exe`)**:双击该文件并按照安装向导进行操作。
|
||||
2. **便携式版本(`.zip`)**:将存档解压到您所需的位置并运行`ytsage.exe`。
|
||||
3. **FFmpeg Bundled**:如果您的系统上没有安装 FFmpeg,请选择 FFmpeg 捆绑版本。
|
||||
</details>
|
||||
|
||||
#### 🐧 Linux
|
||||
|
||||
|格式|描述 |
|
||||
|--------|-------------|
|
||||
|  | Debian 软件包 |
|
||||
|  | AppImage,便携式|
|
||||
|  |转包 |
|
||||
|  | Flatpak 捆绑包 |
|
||||
|
||||
<details>
|
||||
<summary>🛠️安装步骤</summary>
|
||||
|
||||
- **DEB (`.deb`)**:
|
||||
```bash
|
||||
sudo dpkg -i ytsage_*.deb
|
||||
sudo apt-get install -f # Fix missing dependencies if any
|
||||
```
|
||||
- **转速(`.rpm`)**:
|
||||
```bash
|
||||
sudo rpm -i ytsage-*.rpm
|
||||
```
|
||||
- **应用程序图像(`.AppImage`)**:
|
||||
```bash
|
||||
chmod +x YTSage-*.AppImage
|
||||
./YTSage-*.AppImage
|
||||
```
|
||||
- **Flatpak**:按照 Flathub 上的说明进行操作或运行:
|
||||
```bash
|
||||
flatpak install flathub io.github.oop7.ytsage
|
||||
```
|
||||
</details>
|
||||
|
||||
#### 🍎 macOS
|
||||
|
||||
|格式|描述 |
|
||||
|--------|-------------|
|
||||
|  | Apple Silicon 的压缩应用程序 |
|
||||
|  | Apple Silicon 的磁盘映像安装程序 |
|
||||
|
||||
<details>
|
||||
<summary>🛠️安装步骤</summary>
|
||||
|
||||
- **DMG 安装程序 (`.dmg`)**:双击安装,然后将 `YTSage.app` 拖到您的应用程序文件夹中。
|
||||
- **应用程序存档 (`.zip`)**:解压 zip 并将 `YTSage.app` 移动到您的应用程序文件夹。
|
||||
|
||||
*注意:如果您遇到“应用程序已损坏”错误,请参阅下面的[macOS troubleshooting section](#troubleshooting)。*
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>💻从源手动安装</summary>
|
||||
|
||||
### 1.克隆存储库
|
||||
|
||||
```bash
|
||||
git clone https://github.com/oop7/YTSage.git
|
||||
cd YTSage
|
||||
```
|
||||
|
||||
### 2.安装依赖项
|
||||
|
||||
#### ⚡ 有紫外线
|
||||
|
||||
```bash
|
||||
uv pip install .
|
||||
```
|
||||
|
||||
#### 📦 或使用标准点
|
||||
|
||||
```bash
|
||||
pip install .
|
||||
```
|
||||
|
||||
### 3. 运行应用程序
|
||||
|
||||
```bash
|
||||
python -m ytsage.main
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<a id="screenshots"></a>
|
||||
## 📸 截图
|
||||
|
||||
<div align="center">
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>下载设置</em></td>
|
||||
<td align="center"><em>播放列表下载</em></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="../branding/screenshots/audio_format.png" alt="Audio Format Selection with Save Thumbnail" width="400"/></td>
|
||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center"><em>音频格式</em></td>
|
||||
<td align="center"><em>自定义选项</em></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><a id="usage"></a>
|
||||
|
||||
## 📖 用法
|
||||
|
||||
<details>
|
||||
<summary>🎯基本用法</summary>
|
||||
|
||||
1. **启动 YTSage**
|
||||
2. **粘贴 YouTube URL**(或使用“粘贴 URL”按钮)
|
||||
3. **点击“分析”**
|
||||
4. **选择格式:**
|
||||
- `Video` 用于视频下载
|
||||
- `Audio Only` 用于音频提取
|
||||
5. **选择选项:**
|
||||
- 启用字幕并选择语言
|
||||
- 启用字幕合并
|
||||
- 保存缩略图
|
||||
- 删除赞助商部分
|
||||
- 保存描述
|
||||
- 嵌入章节
|
||||
6. **选择输出目录**
|
||||
7. **点击“下载”**
|
||||
|
||||
> 💡 默认下载目录是用户的“Downloads”文件夹。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>📋播放列表下载</summary>
|
||||
|
||||
1. **粘贴播放列表 URL**
|
||||
2. **点击“分析”**
|
||||
3. **从播放列表选择器中选择视频(可选,默认为全部)**
|
||||
4. **选择所需的格式/质量**
|
||||
5. **点击“下载”**
|
||||
|
||||
> 💡 应用程序自动处理下载队列
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍非 YouTube 网站的通用模式</summary>
|
||||
|
||||
当您希望 YTSage 接受来自 yt-dlp 支持的网站(例如 Dailymotion、CBC Gem、TikTok 等)的 URL 时,请使用通用模式。
|
||||
|
||||
使用方法:
|
||||
|
||||
1. 打开`Download Settings`。
|
||||
2. 启用`Generic Mode`。
|
||||
3. 粘贴受支持的非 YouTube 视频或播放列表 URL。
|
||||
4. 单击`Analyze`。
|
||||
5. 选择格式并照常下载。
|
||||
|
||||
注意事项:
|
||||
|
||||
- 通用模式仅更改 YTSage 内的 URL 验证。您安装的 yt-dlp 版本仍必须支持目标站点。
|
||||
- 某些站点需要 cookie、登录会话、代理或额外的 yt-dlp 参数,具体取决于提取器。
|
||||
- 如果站点出现故障,请先从内置更新程序选项卡更新 yt-dlp,然后再报告问题。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🧰媒体和下载选项</summary>
|
||||
|
||||
- **字幕选项:** 过滤语言并将字幕嵌入到视频文件中
|
||||
- **字幕合并:** 将字幕合并到视频文件中以获取硬编码字幕
|
||||
- **保存描述:** 将视频描述保存为文本文件
|
||||
- **保存缩略图:** 将视频缩略图保存为图像文件
|
||||
- **嵌入章节:** 将章节标记嵌入为兼容视频播放器的元数据
|
||||
- **删除赞助商片段:** 使用 SponsorBlock 从视频中删除赞助商片段
|
||||
- **修剪视频:** 通过以 `HH:MM:SS` 格式指定时间范围,仅下载视频的特定部分
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>⚙️输出和文件设置</summary>
|
||||
|
||||
- **限速器:**限制下载速度,例如`500K`为500 KB/s
|
||||
- **保存下载路径:** 保存默认下载路径以供将来下载。在**下载设置→下载路径**中可用。
|
||||
- **输出文件名格式:** 使用`%(title)s`、`%(uploader)s`和`%(resolution)s`等变量自定义输出文件名格式。在**下载设置 → 文件名格式**中可用。- **强制输出格式:** 强制视频下载为特定容器格式,例如`mp4`、`webm`或`mkv`。在**下载设置 → 输出格式设置**中可用。
|
||||
- **音频格式转换:** 将纯音频下载转换为首选格式,例如 `AAC`、`MP3`、`FLAC`、`WAV`、`Opus`、`M4A`、 `Vorbis`,或`Best`。在**下载设置 → 音频格式设置**中可用。
|
||||
- **音频归一化:** 使用 EBU R128 标准化纯音频下载的音量。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌐接入和网络</summary>
|
||||
|
||||
- **使用 Cookie 登录:** 使用 Cookie 登录 YouTube 以访问私人内容。
|
||||
使用方法:
|
||||
1. **推荐:** 使用应用程序中的内置`Extract cookies from browser`选项,然后选择您的浏览器和可选的配置文件。
|
||||
2. 或者,手动提取 cookie:
|
||||
a.使用类似 [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) 的扩展程序从浏览器导出 cookie
|
||||
b.以 Netscape 格式复制 cookie
|
||||
c.创建一个名为 `cookies.txt` 的文件并将 cookie 粘贴到其中
|
||||
d.在应用程序中选择`cookies.txt`文件
|
||||
- **代理支持:** 使用代理服务器进行下载,例如`http://<proxy-server>:<port>`
|
||||
- **通用模式:** 允许 YTSage 从 yt-dlp 支持的非 YouTube 网站分析和下载。从**下载设置 → 通用模式**启用它。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🛠️工具与维护</summary>
|
||||
|
||||
- **自定义命令:** 通过命令行参数访问高级 yt-dlp 功能
|
||||
- **更新程序选项卡:** 从自定义选项中的一处管理内置更新工具:
|
||||
- **yt-dlp 更新:** 检查更新并在稳定版和夜间发布频道之间切换
|
||||
- **FFmpeg 版本检查器:** 检查您的 FFmpeg 版本并打开安装指南
|
||||
- **Deno 更新:** 检查并更新 Deno 运行时
|
||||
- **FFmpeg/yt-dlp/Deno 检测:** 从“关于”对话框中自动检测 FFmpeg、yt-dlp 和 Deno 路径和版本。
|
||||
- **下载历史记录:** 通过“**历史记录**”按钮查看过去的下载,其中包含缩略图和状态。
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>🌍本地化</summary>
|
||||
|
||||
YTSage 支持**14 种语言**,可在全球范围内访问。从**自定义选项 → 语言**中选择您的首选语言。
|
||||
|
||||
### 支持的语言
|
||||
|
||||
|语言 |代码|语言 |代码|
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 英语 | `en` | 🇪🇸 西班牙语 | `es` |
|
||||
| 🇸🇦 阿拉伯语 | `ar` | 🇫🇷 法语 | `fr` |
|
||||
| 🇩🇪 德语 | `de` | 🇮🇳 印地语 | `hi` |
|
||||
| 🇮🇩 印度尼西亚语 | `id` | 🇮🇹 意大利语 | `it` |
|
||||
| 🇯🇵 日语 | `ja` | 🇵🇱 波兰语 | `pl` |
|
||||
| 🇧🇷 葡萄牙语 | `pt` | 🇷🇺 俄语 | `ru` |
|
||||
| 🇹🇷 土耳其语 | `tr` | 🇨🇳 中文 | `zh` |
|
||||
|
||||
### 自述文件翻译
|
||||
|
||||
|语言 |文件 |语言 |文件 |
|
||||
|----------|------|----------|------|
|
||||
| 🇺🇸 英语 | [README.md](../README.md) | 🇪🇸 西班牙语 | [README.es.md](README.es.md)
|
||||
| 🇸🇦 阿拉伯语 | [README.ar.md](README.ar.md) | 🇫🇷 法语 | [README.fr.md](README.fr.md) |
|
||||
| 🇩🇪 德语 | [README.de.md](README.de.md) | 🇮🇳 印地语 | [README.hi.md](README.hi.md) |
|
||||
| 🇮🇩 印度尼西亚语 | [README.id.md](README.id.md) | 🇮🇹 意大利语 | [README.it.md](README.it.md) |
|
||||
| 🇯🇵 日语 | [README.ja.md](README.ja.md) | 🇵🇱 波兰语 | [README.pl.md](README.pl.md) |
|
||||
| 🇧🇷 葡萄牙语 | [README.pt.md](README.pt.md) | 🇷🇺 俄语 | [README.ru.md](README.ru.md) |
|
||||
| 🇹🇷 土耳其语 | [README.tr.md](README.tr.md) | 🇨🇳 中文 | [README.zh.md](README.zh.md) |
|
||||
|
||||
> 💡 **想要贡献翻译吗?** 查看 [Contributing](#contributing) 部分以帮助我们添加更多语言!
|
||||
|
||||
</details>
|
||||
|
||||
<a id="troubleshooting"></a>
|
||||
## 🛠️ 故障排除
|
||||
|
||||
<details>
|
||||
<summary>点击查看常见问题及解决方案</summary>
|
||||
|
||||
- **格式表不显示:** 将 yt-dlp 更新到最新版本,并切换到 yt-dlp nightly。
|
||||
- **下载失败:** 检查您的互联网连接并确保视频可用。
|
||||
- **具体下载错误:**
|
||||
- **私人视频:** 使用cookie身份验证访问私人内容。
|
||||
- **有年龄限制的内容:** 登录 YouTube 帐户即可观看有年龄限制的视频。
|
||||
- **地理封锁的视频:** 考虑使用 VPN 来绕过区域限制。
|
||||
- **删除/删除的视频:** YouTube 上不再提供视频。
|
||||
- **直播:** 直播无法下载;等待流结束。
|
||||
- **网络错误:** 检查您的互联网连接并重试。
|
||||
- **无效 URL:** 确保 URL 正确且来自受支持的平台。
|
||||
- **高级内容:** 需要 YouTube Premium 会员资格。
|
||||
- **版权封锁:** 由于版权限制,内容被封锁。
|
||||
- **下载后分离视频和音频文件:** 当 FFmpeg 丢失或未检测到时会发生这种情况。 YTSage 需要 FFmpeg 来合并高质量的视频和音频流。
|
||||
- **解决方案:** 确保 FFmpeg 已安装并可在系统路径中访问。对于 Windows 用户,最简单的选择是下载与 FFmpeg 捆绑在一起的 `YTSage-v<version>-ffmpeg.exe` 文件。
|
||||
|
||||
---
|
||||
|
||||
#### 🛡️ Windows Defender / 防病毒警告
|
||||
|
||||
某些防病毒软件可能会将“.exe”文件标记为误报。这是打包应用程序的**已知限制**。
|
||||
|
||||
**为什么会发生这种情况:**
|
||||
- 防病毒启发式可能会将打包的可执行文件误认为可疑
|
||||
|
||||
**安全替代品:**
|
||||
- ✅ **使用pip安装:** `pip install ytsage`(推荐)
|
||||
- ✅ **从源代码构建**:按照此[guide](../.github/CI_CD_README.md)
|
||||
- ✅ **在防病毒软件中将应用程序列入白名单**
|
||||
|
||||
#### 🍎 macOS:“应用程序已损坏且无法打开”
|
||||
如果您在 macOS Sonoma 或更高版本上看到此错误,则需要删除隔离属性。
|
||||
|
||||
1. **打开终端**(您可以使用 Spotlight 找到它)。
|
||||
2. **键入以下命令**,但**不要**按 Enter 键。确保末尾包含空格:
|
||||
```bash
|
||||
xattr -d com.apple.quarantine
|
||||
```
|
||||
3. **将 `YTSage.app` 文件**从 Finder 窗口拖放到终端窗口中。这将自动粘贴正确的文件路径。
|
||||
4. **按 Enter** 运行命令。
|
||||
5. **再次尝试打开 YTSage.app。** 现在它应该可以正确启动。
|
||||
|
||||
---
|
||||
|
||||
#### **配置位置(高级)**
|
||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||
- **macOS:** `~/Library/Application Support/YTSage`
|
||||
- **Linux:** `~/.local/share/YTSage`
|
||||
|
||||
</details>
|
||||
|
||||
<a id="sponsor"></a>
|
||||
## 💖 赞助商
|
||||
|
||||
如果 YTSage 可以节省您的时间,请考虑赞助该项目。赞助有助于涵盖开发时间、跨平台测试以及未来的改进。
|
||||
|
||||
- GitHub 赞助商:https://github.com/sponsors/oop7
|
||||
- 赞助商链接也可以直接在应用程序内的“关于”对话框中找到。
|
||||
|
||||
[](https://github.com/sponsors/oop7)
|
||||
|
||||
<a id="contributing"></a>
|
||||
## 👥 贡献
|
||||
|
||||
我们欢迎贡献!以下是您可以提供帮助的方法:
|
||||
|
||||
1. 🍴 分叉存储库
|
||||
2. 🌿 创建您的功能分支:
|
||||
```bash
|
||||
git checkout -b feature/AmazingFeature
|
||||
```
|
||||
3. 💾 提交您的更改:
|
||||
```bash
|
||||
git commit -m 'Add some AmazingFeature'
|
||||
```
|
||||
4. 📤推送到分支:
|
||||
```bash
|
||||
git push origin feature/AmazingFeature
|
||||
```
|
||||
5. 🔄 打开拉取请求
|
||||
|
||||
### 🌍 贡献翻译
|
||||
|
||||
- 更新匹配的本地化自述文件(例如`README.es.md`)
|
||||
- 通过编辑`ytsage/languages/<code>.json`保持应用程序字符串同步
|
||||
- 如果您的语言缺失,请从`README.md`开始并创建`README.<code>.md`
|
||||
|
||||
<details>
|
||||
<summary>📂项目结构</summary>
|
||||
|
||||
## YTSage - 项目结构
|
||||
|
||||
本文档描述了 YTSage 的组织文件夹结构。
|
||||
|
||||
### 📁 项目结构
|
||||
|
||||
```
|
||||
YTSage/
|
||||
├── 📁 .github/ # GitHub configuration
|
||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
||||
│ │ └── 🐛-bug-report.md # Bug report template
|
||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
||||
│ │ ├── build-linux.yml # Linux build workflow
|
||||
│ │ ├── build-macos.yml # macOS build workflow
|
||||
│ │ │── build-windows.yml # Windows build workflow
|
||||
| | └── release-all.yml # Master release workflow
|
||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||
│ ├── 📁 icons/ # Application icons
|
||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
||||
│ └── 📁 svg/ # SVG assets
|
||||
├── 📄 LICENSE # License file
|
||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||
├── 📄 README.md # Project documentation
|
||||
├── 📄 requirements.txt # Python dependencies (dev)
|
||||
└── 📁 ytsage/ # Source package
|
||||
├── 📁 assets/ # Runtime assets
|
||||
│ ├── 📁 Icon/ # Application icons
|
||||
│ └── 📁 sound/ # Audio files
|
||||
├── 📁 languages/ # Localization files
|
||||
│ ├── 📄 ar.json # Arabic translation
|
||||
│ ├── 📄 de.json # German translation
|
||||
│ ├── 📄 en.json # English translation
|
||||
│ └── ... # Other languages
|
||||
├── 📁 core/ # Core business logic
|
||||
│ ├── 📄 __init__.py # Core package init
|
||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||
├── 📁 gui/ # User interface components
|
||||
│ ├── 📄 __init__.py # GUI package init
|
||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||
├── 📁 utils/ # Utility modules
|
||||
│ ├── 📄 __init__.py # Utils package init
|
||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||
├── 📄 __init__.py # Package entry point
|
||||
└── 📄 main.py # Main execution script
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## ⭐️ 明星历史
|
||||
|
||||
<div align="center">
|
||||
|
||||
## 明星历史
|
||||
|
||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=oop7/YTSage&type=Date" />
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
## 📜 许可证
|
||||
|
||||
该项目已获得 MIT 许可证 - 有关详细信息,请参阅[LICENSE](../LICENSE) 文件。
|
||||
|
||||
## 🙏致谢
|
||||
|
||||
<details>
|
||||
<summary>显示致谢</summary>
|
||||
|
||||
<div align="center">
|
||||
|
||||
<p>衷心感谢所有通过提出改进建议或报告错误为该项目做出贡献的人。</p>
|
||||
|
||||
<table>
|
||||
<tr class="section"><th colspan="2">核心组件</th></tr>
|
||||
<tr>
|
||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||
<td>下载引擎</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||
<td>媒体处理</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://deno.com/">德诺</a></td>
|
||||
<td>与 yt-dlp 集成的运行时</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">库和框架</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||
<td>GUI框架</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-pillow.org/">枕头</a></td>
|
||||
<td>图像处理</td>
|
||||
</tr>
|
||||
<tr><td><a href="https://requests.readthedocs.io/">请求</a></td>
|
||||
<td>HTTP 请求</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://packaging.python.org/">包装</a></td>
|
||||
<td>版本和包处理</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://python-markdown.github.io/">降价</a></td>
|
||||
<td>Markdown 渲染</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||
<td>记录</td>
|
||||
</tr>
|
||||
<tr class="section"><th colspan="2">资产和贡献者</th></tr>
|
||||
<tr>
|
||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Universfield 的新通知 09</a></td>
|
||||
<td>通知声音</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||
<td>代码贡献者</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
</details>
|
||||
|
||||
## ⚠️ 免责声明
|
||||
|
||||
该工具仅供个人使用。请尊重 YouTube 的服务条款和内容创作者的权利。
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
由[oop7](https://github.com/oop7)用❤️制作
|
||||
|
||||
</div>
|
||||
+1
-1
@@ -4,5 +4,5 @@ YTSage - YouTube Video Downloader
|
||||
A modern, user-friendly YouTube video downloader built with PySide6.
|
||||
"""
|
||||
|
||||
__version__ = "5.0.0"
|
||||
__version__ = "5.0.2b"
|
||||
__author__ = "oop7"
|
||||
|
||||
@@ -72,6 +72,7 @@ class DownloadThread(QThread):
|
||||
preferred_output_format="mp4",
|
||||
force_audio_format=False,
|
||||
preferred_audio_format="best",
|
||||
audio_normalization=False,
|
||||
filename_format=None,
|
||||
) -> None:
|
||||
super().__init__()
|
||||
@@ -100,6 +101,7 @@ class DownloadThread(QThread):
|
||||
self.preferred_output_format = preferred_output_format
|
||||
self.force_audio_format = force_audio_format
|
||||
self.preferred_audio_format = preferred_audio_format
|
||||
self.audio_normalization = audio_normalization
|
||||
self.filename_format = filename_format
|
||||
self.paused: bool = False
|
||||
self.cancelled: bool = False
|
||||
@@ -272,6 +274,22 @@ class DownloadThread(QThread):
|
||||
else:
|
||||
logger.debug("Using --extract-audio with best quality (no conversion) for audio-only download")
|
||||
|
||||
# Add Audio Normalization if enabled (only applies to audio-only downloads)
|
||||
if self.audio_normalization and self.is_audio_only:
|
||||
# Normalization using FFmpeg filters requires re-encoding the audio stream.
|
||||
# If the user selected "Best (No conversion)", yt-dlp attempts to stream copy (-c:a copy),
|
||||
# which will cause FFmpeg to crash with "Invalid argument".
|
||||
# We fix this by forcing an explicit actual conversion (mp3) if no format was forced.
|
||||
if not self.force_audio_format or self.preferred_audio_format == "best":
|
||||
if "--extract-audio" not in cmd:
|
||||
cmd.append("--extract-audio")
|
||||
cmd.extend(["--audio-format", "mp3"])
|
||||
logger.debug("Forced audio format to mp3 since normalization requires re-encoding")
|
||||
|
||||
# Scope the argument specifically to ExtractAudio so it doesn't conflict with other PPs
|
||||
cmd.extend(["--postprocessor-args", "ExtractAudio:-af loudnorm=I=-16:LRA=11:TP=-1.5"])
|
||||
logger.debug("Added Audio Normalization (--postprocessor-args ExtractAudio:-af loudnorm=...)")
|
||||
|
||||
# Output template with resolution in filename
|
||||
# Use string concatenation instead of Path.joinpath to avoid Path object issues
|
||||
base_path: str = self.path.as_posix()
|
||||
|
||||
@@ -731,7 +731,7 @@ def parse_yt_dlp_error(error_message: str) -> str:
|
||||
return _("ytdlp_errors.generic_error", error=error_message)
|
||||
|
||||
|
||||
def validate_video_url(url: str) -> tuple[bool, str]:
|
||||
def validate_video_url(url: str, generic_mode: bool = False) -> tuple[bool, str]:
|
||||
"""
|
||||
Validate a video URL for supported platforms.
|
||||
|
||||
@@ -743,6 +743,10 @@ def validate_video_url(url: str) -> tuple[bool, str]:
|
||||
- is_valid: True if URL is valid, False otherwise
|
||||
- error_message: Empty string if valid, error description if invalid
|
||||
|
||||
Args:
|
||||
url: URL entered by the user.
|
||||
generic_mode: When True, allow any http/https URL with a valid domain.
|
||||
|
||||
Example:
|
||||
>>> is_valid, error = validate_video_url("https://youtube.com/watch?v=xxx")
|
||||
>>> if not is_valid:
|
||||
@@ -771,6 +775,10 @@ def validate_video_url(url: str) -> tuple[bool, str]:
|
||||
if not parsed.netloc:
|
||||
return False, _("url_validation.missing_domain")
|
||||
|
||||
if generic_mode:
|
||||
logger.info(f"Generic mode enabled, allowing URL: {url}")
|
||||
return True, ""
|
||||
|
||||
# YTSage focuses on YouTube and YouTube Music only
|
||||
# Supported YouTube domains
|
||||
youtube_domains = [
|
||||
|
||||
@@ -287,7 +287,7 @@ class AnalysisMixin:
|
||||
return
|
||||
|
||||
# Validate URL before processing
|
||||
is_valid, error_message = validate_video_url(url)
|
||||
is_valid, error_message = validate_video_url(url, generic_mode=self.generic_mode_enabled)
|
||||
if not is_valid:
|
||||
QMessageBox.warning(self, _("main_ui.error_title"), error_message)
|
||||
if hasattr(self, "animate_widget_shake"):
|
||||
|
||||
@@ -972,6 +972,11 @@ class CustomOptionsDialog(QDialog):
|
||||
ConfigManager.set("check_beta_updates", beta_enabled)
|
||||
logger.info(f"Saved beta updates setting: {beta_enabled}")
|
||||
|
||||
# Save app update checker setting
|
||||
app_updates_enabled = self.updater_tab.get_app_update_checker_setting()
|
||||
ConfigManager.set("check_app_updates", app_updates_enabled)
|
||||
logger.info(f"Saved app updates checker setting: {app_updates_enabled}")
|
||||
|
||||
except Exception as e:
|
||||
logger.exception(f"Error saving auto-update settings: {e}")
|
||||
|
||||
|
||||
@@ -26,8 +26,10 @@ from PySide6.QtWidgets import (
|
||||
QPushButton,
|
||||
QRadioButton,
|
||||
QVBoxLayout,
|
||||
QWidget,
|
||||
)
|
||||
|
||||
from ..ytsage_smooth_tab_widget import SmoothTabWidget
|
||||
from ...utils.ytsage_logger import logger
|
||||
from ...utils.ytsage_localization import _
|
||||
from ...utils.ytsage_config_manager import ConfigManager
|
||||
@@ -38,7 +40,7 @@ class DownloadSettingsDialog(QDialog):
|
||||
def __init__(self, current_path, current_limit, current_unit_index, parent=None) -> None:
|
||||
super().__init__(parent)
|
||||
self.setWindowTitle(_("settings.title"))
|
||||
self.setMinimumWidth(450)
|
||||
self.setMinimumWidth(550)
|
||||
self.setMinimumHeight(400)
|
||||
self.current_path = current_path
|
||||
self.current_limit = current_limit if current_limit is not None else ""
|
||||
@@ -49,7 +51,25 @@ class DownloadSettingsDialog(QDialog):
|
||||
"""
|
||||
QDialog {
|
||||
background-color: #15181b;
|
||||
}
|
||||
QFrame#tabContent {
|
||||
border: 1px solid #3d3d3d;
|
||||
background-color: #15181b;
|
||||
}
|
||||
QTabBar::tab {
|
||||
background-color: #1d1e22;
|
||||
color: #ffffff;
|
||||
padding: 8px 12px;
|
||||
border: 1px solid #3d3d3d;
|
||||
border-bottom: none;
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
QTabBar::tab:selected {
|
||||
background-color: #c90000;
|
||||
}
|
||||
QTabBar::tab:hover:!selected {
|
||||
background-color: #2a2d36;
|
||||
}
|
||||
QWidget {
|
||||
background-color: #15181b;
|
||||
@@ -59,18 +79,17 @@ class DownloadSettingsDialog(QDialog):
|
||||
color: #ffffff;
|
||||
}
|
||||
QGroupBox {
|
||||
color: #ffffff;
|
||||
border: 2px solid #1b2021;
|
||||
border: 1px solid #3d3d3d;
|
||||
border-radius: 4px;
|
||||
margin-top: 10px;
|
||||
padding-top: 10px;
|
||||
margin-top: 1.5ex;
|
||||
color: #ffffff;
|
||||
padding: 10px;
|
||||
font-weight: bold;
|
||||
background-color: #15181b;
|
||||
}
|
||||
QGroupBox::title {
|
||||
subcontrol-origin: margin;
|
||||
left: 10px;
|
||||
padding: 0 5px 0 5px;
|
||||
subcontrol-position: top left;
|
||||
padding: 0 5px;
|
||||
color: #ffffff;
|
||||
}
|
||||
QLineEdit {
|
||||
@@ -112,11 +131,13 @@ class DownloadSettingsDialog(QDialog):
|
||||
}
|
||||
QCheckBox::indicator:unchecked {
|
||||
border: 2px solid #666666;
|
||||
background: #15181b;
|
||||
background: #1d1e22;
|
||||
border-radius: 9px;
|
||||
}
|
||||
QCheckBox::indicator:checked {
|
||||
border: 2px solid #c90000;
|
||||
background: #c90000;
|
||||
border-radius: 9px;
|
||||
}
|
||||
QRadioButton {
|
||||
spacing: 5px;
|
||||
@@ -129,37 +150,50 @@ class DownloadSettingsDialog(QDialog):
|
||||
}
|
||||
QRadioButton::indicator:unchecked {
|
||||
border: 2px solid #666666;
|
||||
background: #15181b;
|
||||
background: #1d1e22;
|
||||
border-radius: 9px;
|
||||
}
|
||||
QRadioButton::indicator:checked {
|
||||
border: 2px solid #c90000;
|
||||
background: #c90000;
|
||||
border-radius: 9px;
|
||||
}
|
||||
QComboBox {
|
||||
padding: 5px;
|
||||
padding: 8px;
|
||||
border: 2px solid #1b2021;
|
||||
border-radius: 4px;
|
||||
background-color: #1b2021;
|
||||
color: #ffffff;
|
||||
min-height: 20px;
|
||||
min-width: 150px;
|
||||
}
|
||||
QComboBox::drop-down {
|
||||
border: none;
|
||||
width: 20px;
|
||||
}
|
||||
QComboBox::down-arrow {
|
||||
border: none;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
QComboBox QAbstractItemView {
|
||||
border: 2px solid #1b2021;
|
||||
border-radius: 4px;
|
||||
background-color: #15181b;
|
||||
background-color: #1d1e22;
|
||||
color: #ffffff;
|
||||
border: 1px solid #3d3d3d;
|
||||
selection-background-color: #c90000;
|
||||
selection-color: #ffffff;
|
||||
}
|
||||
"""
|
||||
)
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
|
||||
# Create tab widget
|
||||
self.tab_widget = SmoothTabWidget()
|
||||
layout.addWidget(self.tab_widget)
|
||||
|
||||
# === General Tab ===
|
||||
general_tab = QWidget()
|
||||
general_layout = QVBoxLayout(general_tab)
|
||||
|
||||
# --- Download Path Section ---
|
||||
path_group_box = QGroupBox(_("settings.download_path"))
|
||||
path_layout = QVBoxLayout()
|
||||
@@ -177,7 +211,7 @@ class DownloadSettingsDialog(QDialog):
|
||||
path_layout.addWidget(browse_button)
|
||||
|
||||
path_group_box.setLayout(path_layout)
|
||||
layout.addWidget(path_group_box)
|
||||
general_layout.addWidget(path_group_box)
|
||||
|
||||
# --- Speed Limit Section ---
|
||||
speed_group_box = QGroupBox(_("settings.speed_limit"))
|
||||
@@ -193,7 +227,30 @@ class DownloadSettingsDialog(QDialog):
|
||||
speed_layout.addWidget(self.speed_limit_unit)
|
||||
|
||||
speed_group_box.setLayout(speed_layout)
|
||||
layout.addWidget(speed_group_box)
|
||||
general_layout.addWidget(speed_group_box)
|
||||
|
||||
# --- Generic Mode Section ---
|
||||
generic_mode_group_box = QGroupBox(_("settings.generic_mode"))
|
||||
generic_mode_layout = QVBoxLayout()
|
||||
|
||||
self.generic_mode_enabled = ConfigManager.get("generic_mode") or False
|
||||
|
||||
self.generic_mode_checkbox = QCheckBox(_("settings.enable_generic_mode"))
|
||||
self.generic_mode_checkbox.setChecked(self.generic_mode_enabled)
|
||||
generic_mode_layout.addWidget(self.generic_mode_checkbox)
|
||||
|
||||
generic_mode_help_label = QLabel(_("settings.generic_mode_help"))
|
||||
generic_mode_help_label.setWordWrap(True)
|
||||
generic_mode_help_label.setStyleSheet("color: #cccccc; margin: 5px; font-size: 11px;")
|
||||
generic_mode_layout.addWidget(generic_mode_help_label)
|
||||
|
||||
generic_mode_group_box.setLayout(generic_mode_layout)
|
||||
general_layout.addWidget(generic_mode_group_box)
|
||||
general_layout.addStretch()
|
||||
|
||||
# === Format Tab ===
|
||||
format_tab = QWidget()
|
||||
format_layout = QVBoxLayout(format_tab)
|
||||
|
||||
# --- Output Format Settings Section ---
|
||||
output_format_group_box = QGroupBox(_("settings.output_format_settings"))
|
||||
@@ -234,7 +291,7 @@ class DownloadSettingsDialog(QDialog):
|
||||
output_format_layout.addWidget(help_label)
|
||||
|
||||
output_format_group_box.setLayout(output_format_layout)
|
||||
layout.addWidget(output_format_group_box)
|
||||
format_layout.addWidget(output_format_group_box)
|
||||
|
||||
# --- Audio Format Settings Section (for audio-only downloads) ---
|
||||
audio_format_group_box = QGroupBox(_("settings.audio_format_settings"))
|
||||
@@ -243,12 +300,24 @@ class DownloadSettingsDialog(QDialog):
|
||||
# Load current audio format settings from ConfigManager
|
||||
self.force_audio_format_enabled = ConfigManager.get("force_audio_format") or False
|
||||
self.preferred_audio_format_value = ConfigManager.get("preferred_audio_format") or "best"
|
||||
self.audio_normalization_enabled = ConfigManager.get("audio_normalization") or False
|
||||
|
||||
# Enable/Disable force audio format checkbox
|
||||
self.force_audio_format_checkbox = QCheckBox(_("settings.force_audio_format"))
|
||||
self.force_audio_format_checkbox.setChecked(self.force_audio_format_enabled)
|
||||
audio_format_layout.addWidget(self.force_audio_format_checkbox)
|
||||
|
||||
# Enable/Disable audio normalization checkbox
|
||||
self.audio_normalization_checkbox = QCheckBox(_("settings.audio_normalization", default="Audio Normalization"))
|
||||
self.audio_normalization_checkbox.setChecked(self.audio_normalization_enabled)
|
||||
audio_format_layout.addWidget(self.audio_normalization_checkbox)
|
||||
|
||||
# Audio normalization help text
|
||||
audio_norm_help_label = QLabel(_("settings.audio_normalization_help", default="When enabled, audio will be normalized using EBU R128 standard."))
|
||||
audio_norm_help_label.setWordWrap(True)
|
||||
audio_norm_help_label.setStyleSheet("color: #cccccc; margin: 5px; font-size: 11px;")
|
||||
audio_format_layout.addWidget(audio_norm_help_label)
|
||||
|
||||
# Audio format selection layout
|
||||
audio_format_select_layout = QHBoxLayout()
|
||||
audio_format_label = QLabel(_("settings.preferred_audio_format"))
|
||||
@@ -279,8 +348,17 @@ class DownloadSettingsDialog(QDialog):
|
||||
audio_help_label.setStyleSheet("color: #cccccc; margin: 5px; font-size: 11px;")
|
||||
audio_format_layout.addWidget(audio_help_label)
|
||||
|
||||
# Connect signals
|
||||
self.audio_normalization_checkbox.stateChanged.connect(self._on_audio_normalization_toggled)
|
||||
self.force_audio_format_checkbox.stateChanged.connect(self._on_force_audio_format_toggled)
|
||||
|
||||
audio_format_group_box.setLayout(audio_format_layout)
|
||||
layout.addWidget(audio_format_group_box)
|
||||
format_layout.addWidget(audio_format_group_box)
|
||||
format_layout.addStretch()
|
||||
|
||||
# === File Tab ===
|
||||
file_tab = QWidget()
|
||||
file_layout = QVBoxLayout(file_tab)
|
||||
|
||||
# --- Filename Format Section ---
|
||||
filename_format_group_box = QGroupBox(_("settings.filename_format"))
|
||||
@@ -309,7 +387,13 @@ class DownloadSettingsDialog(QDialog):
|
||||
filename_layout.addWidget(filename_help_label)
|
||||
|
||||
filename_format_group_box.setLayout(filename_layout)
|
||||
layout.addWidget(filename_format_group_box)
|
||||
file_layout.addWidget(filename_format_group_box)
|
||||
file_layout.addStretch()
|
||||
|
||||
# Add tabs to tab widget
|
||||
self.tab_widget.addTab(general_tab, _("settings.tab_general", default="General"))
|
||||
self.tab_widget.addTab(format_tab, _("settings.tab_format", default="Format"))
|
||||
self.tab_widget.addTab(file_tab, _("settings.tab_file", default="File"))
|
||||
|
||||
# Dialog buttons (OK/Cancel)
|
||||
button_box = QDialogButtonBox()
|
||||
@@ -317,8 +401,45 @@ class DownloadSettingsDialog(QDialog):
|
||||
cancel_button = button_box.addButton(_("buttons.cancel"), QDialogButtonBox.ButtonRole.RejectRole)
|
||||
button_box.accepted.connect(self.accept)
|
||||
button_box.rejected.connect(self.reject)
|
||||
|
||||
# Style the buttons to look identical to Custom Options dialog
|
||||
for btn in [ok_button, cancel_button]:
|
||||
btn.setMinimumHeight(35)
|
||||
btn.setMinimumWidth(80)
|
||||
btn.setStyleSheet(
|
||||
"""
|
||||
QPushButton {
|
||||
padding: 8px 20px;
|
||||
background-color: #c90000;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: #a50000;
|
||||
}
|
||||
"""
|
||||
)
|
||||
|
||||
layout.addWidget(button_box)
|
||||
|
||||
def _on_audio_normalization_toggled(self, state: int) -> None:
|
||||
"""Handle logic when audio normalization is toggled."""
|
||||
if state == Qt.CheckState.Checked.value:
|
||||
# Normalization requires re-encoding, so we must force an audio format
|
||||
self.force_audio_format_checkbox.setChecked(True)
|
||||
|
||||
# If 'Best (No conversion)' is selected, change it to MP3 to ensure re-encoding
|
||||
if self.audio_format_combo.currentIndex() == 0:
|
||||
self.audio_format_combo.setCurrentIndex(2) # Index 2 is typically MP3
|
||||
|
||||
def _on_force_audio_format_toggled(self, state: int) -> None:
|
||||
"""Handle logic when force audio format is toggled."""
|
||||
if state == Qt.CheckState.Unchecked.value:
|
||||
# If re-encoding is disabled, normalization cannot happen
|
||||
self.audio_normalization_checkbox.setChecked(False)
|
||||
|
||||
def browse_new_path(self) -> None:
|
||||
new_path = QFileDialog.getExistingDirectory(self, _("dialogs.select_folder"), str(self.current_path))
|
||||
if new_path:
|
||||
@@ -349,6 +470,10 @@ class DownloadSettingsDialog(QDialog):
|
||||
"""Returns whether force output format is enabled."""
|
||||
return self.force_format_checkbox.isChecked()
|
||||
|
||||
def get_generic_mode_enabled(self) -> bool:
|
||||
"""Returns whether generic mode is enabled."""
|
||||
return self.generic_mode_checkbox.isChecked()
|
||||
|
||||
def get_preferred_format(self) -> str:
|
||||
"""Returns the selected preferred format (lowercase)."""
|
||||
format_map = {0: "mp4", 1: "webm", 2: "mkv"}
|
||||
@@ -363,6 +488,10 @@ class DownloadSettingsDialog(QDialog):
|
||||
audio_format_map = {0: "best", 1: "aac", 2: "mp3", 3: "flac", 4: "wav", 5: "opus", 6: "m4a", 7: "vorbis"}
|
||||
return audio_format_map.get(self.audio_format_combo.currentIndex(), "best")
|
||||
|
||||
def get_audio_normalization_enabled(self) -> bool:
|
||||
"""Returns whether audio normalization is enabled."""
|
||||
return self.audio_normalization_checkbox.isChecked()
|
||||
|
||||
def get_filename_format(self) -> str:
|
||||
"""Returns the filename format string."""
|
||||
return self.filename_format_input.text().strip()
|
||||
@@ -405,6 +534,8 @@ class DownloadSettingsDialog(QDialog):
|
||||
def accept(self) -> None:
|
||||
"""Override accept to save format settings."""
|
||||
try:
|
||||
ConfigManager.set("generic_mode", self.get_generic_mode_enabled())
|
||||
|
||||
# Save output format settings
|
||||
force_format = self.get_force_format_enabled()
|
||||
preferred_format = self.get_preferred_format()
|
||||
@@ -414,8 +545,10 @@ class DownloadSettingsDialog(QDialog):
|
||||
# Save audio format settings
|
||||
force_audio_format = self.get_force_audio_format_enabled()
|
||||
preferred_audio_format = self.get_preferred_audio_format()
|
||||
audio_normalization = self.get_audio_normalization_enabled()
|
||||
ConfigManager.set("force_audio_format", force_audio_format)
|
||||
ConfigManager.set("preferred_audio_format", preferred_audio_format)
|
||||
ConfigManager.set("audio_normalization", audio_normalization)
|
||||
|
||||
# Save filename format
|
||||
filename_format = self.get_filename_format()
|
||||
|
||||
@@ -446,6 +446,33 @@ class UpdaterTabWidget(QWidget):
|
||||
app_update_group = QGroupBox(_("settings.app_updates_title"))
|
||||
app_update_layout = QVBoxLayout()
|
||||
|
||||
self.app_updates_checkbox = QCheckBox(_("settings.check_app_updates"))
|
||||
self.app_updates_checkbox.setStyleSheet(
|
||||
"""
|
||||
QCheckBox {
|
||||
color: #ffffff;
|
||||
spacing: 5px;
|
||||
padding: 3px;
|
||||
}
|
||||
QCheckBox::indicator {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border-radius: 9px;
|
||||
}
|
||||
QCheckBox::indicator:unchecked {
|
||||
border: 2px solid #666666;
|
||||
background: #1d1e22;
|
||||
border-radius: 9px;
|
||||
}
|
||||
QCheckBox::indicator:checked {
|
||||
border: 2px solid #c90000;
|
||||
background: #c90000;
|
||||
border-radius: 9px;
|
||||
}
|
||||
"""
|
||||
)
|
||||
app_update_layout.addWidget(self.app_updates_checkbox)
|
||||
|
||||
self.beta_updates_checkbox = QCheckBox(_("settings.check_beta_updates"))
|
||||
self.beta_updates_checkbox.setStyleSheet(
|
||||
"""
|
||||
@@ -656,6 +683,10 @@ class UpdaterTabWidget(QWidget):
|
||||
beta_enabled = ConfigManager.get("check_beta_updates") or False
|
||||
self.beta_updates_checkbox.setChecked(beta_enabled)
|
||||
|
||||
# Load app update checker setting (default enabled for older configs)
|
||||
app_updates_enabled = ConfigManager.get("check_app_updates")
|
||||
self.app_updates_checkbox.setChecked(app_updates_enabled is not False)
|
||||
|
||||
# Set current selection based on saved settings
|
||||
current_frequency = auto_settings["frequency"]
|
||||
if current_frequency == "startup":
|
||||
@@ -698,6 +729,10 @@ class UpdaterTabWidget(QWidget):
|
||||
"""Returns the beta update setting from the dialog."""
|
||||
return self.beta_updates_checkbox.isChecked()
|
||||
|
||||
def get_app_update_checker_setting(self) -> bool:
|
||||
"""Returns the app version checker setting from the dialog."""
|
||||
return self.app_updates_checkbox.isChecked()
|
||||
|
||||
def _on_channel_changed(self, checked: bool) -> None:
|
||||
"""Handle channel selection change."""
|
||||
if not checked:
|
||||
|
||||
@@ -207,7 +207,7 @@ class FormatTableMixin:
|
||||
audio_formats = [
|
||||
f
|
||||
for f in self.all_formats
|
||||
if (f.get("vcodec") == "none" or "audio only" in f.get("format_note", "").lower())
|
||||
if (f.get("vcodec") == "none" or "audio only" in str(f.get("format_note") or "").lower())
|
||||
and f.get("acodec") != "none"
|
||||
and f.get("filesize") is not None
|
||||
]
|
||||
@@ -224,7 +224,8 @@ class FormatTableMixin:
|
||||
except (ValueError, IndexError):
|
||||
return 0
|
||||
else:
|
||||
return f.get("abr", 0)
|
||||
abr = f.get("abr") or 0
|
||||
return abr if isinstance(abr, (int, float)) else 0
|
||||
|
||||
video_formats.sort(key=get_quality, reverse=True)
|
||||
audio_formats.sort(key=get_quality, reverse=True)
|
||||
@@ -320,7 +321,9 @@ class FormatTableMixin:
|
||||
self.format_table.setItem(row, 1, quality_item)
|
||||
|
||||
# Resolution
|
||||
resolution = f.get("resolution", "N/A")
|
||||
resolution = f.get("resolution") or "N/A"
|
||||
if not isinstance(resolution, str):
|
||||
resolution = str(resolution)
|
||||
|
||||
if is_playlist_mode:
|
||||
# Column 2 for playlist mode: Resolution
|
||||
@@ -361,7 +364,8 @@ class FormatTableMixin:
|
||||
self.format_table.setItem(row, 4, hdr_item)
|
||||
else:
|
||||
# Extension for normal mode (column 2)
|
||||
self.format_table.setItem(row, 2, QTableWidgetItem(f.get("ext", "").upper()))
|
||||
extension = str(f.get("ext") or "")
|
||||
self.format_table.setItem(row, 2, QTableWidgetItem(extension.upper()))
|
||||
|
||||
# Audio Status column
|
||||
needs_audio = f.get("acodec") == "none" and f.get("vcodec") != "none"
|
||||
@@ -387,11 +391,11 @@ class FormatTableMixin:
|
||||
|
||||
# Column 5: Codec
|
||||
if f.get("vcodec") == "none":
|
||||
codec = f.get("acodec", "N/A")
|
||||
codec = str(f.get("acodec") or "N/A")
|
||||
else:
|
||||
codec = f"{f.get('vcodec', 'N/A')}"
|
||||
codec = str(f.get("vcodec") or "N/A")
|
||||
if f.get("acodec") != "none":
|
||||
codec += f" / {f.get('acodec', 'N/A')}"
|
||||
codec += f" / {str(f.get('acodec') or 'N/A')}"
|
||||
self.format_table.setItem(row, 5, QTableWidgetItem(codec))
|
||||
|
||||
# Column 7: FPS (Frame Rate)
|
||||
@@ -469,7 +473,9 @@ class FormatTableMixin:
|
||||
|
||||
if format_info.get("vcodec") == "none":
|
||||
# Audio quality
|
||||
abr = format_info.get("abr", 0)
|
||||
abr = format_info.get("abr") or 0
|
||||
if not isinstance(abr, (int, float)):
|
||||
abr = 0
|
||||
if abr >= 256:
|
||||
return _("formats.best_audio")
|
||||
elif abr >= 192:
|
||||
|
||||
@@ -257,6 +257,8 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
self.preferred_output_format = ConfigManager.get("preferred_output_format") or "mp4"
|
||||
self.force_audio_format = ConfigManager.get("force_audio_format") or False
|
||||
self.preferred_audio_format = ConfigManager.get("preferred_audio_format") or "best"
|
||||
self.audio_normalization = ConfigManager.get("audio_normalization") or False
|
||||
self.generic_mode_enabled = ConfigManager.get("generic_mode") or False
|
||||
# Track if video analysis is completed
|
||||
self.analysis_completed = False
|
||||
|
||||
@@ -351,7 +353,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
url_layout.setSpacing(10)
|
||||
|
||||
self.url_input = QLineEdit()
|
||||
self.url_input.setPlaceholderText(_("main_ui.url_placeholder"))
|
||||
self._update_url_placeholder()
|
||||
self.url_input.returnPressed.connect(self.analyze_url) # Analyze on Enter key
|
||||
self.url_input.textChanged.connect(self._on_url_text_changed) # Enable/disable analyze button
|
||||
self.url_input.setMinimumHeight(42)
|
||||
@@ -489,13 +491,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
# --- Rename Path Button to Settings Button ---
|
||||
self.settings_button = QPushButton(_("buttons.download_settings")) # Renamed button
|
||||
self.settings_button.clicked.connect(self.show_download_settings_dialog) # Renamed method
|
||||
self.settings_button.setToolTip(
|
||||
_(
|
||||
"main_ui.settings_tooltip",
|
||||
path=self.last_path,
|
||||
speed_limit=_("main_ui.speed_limit_none"),
|
||||
)
|
||||
) # Update initial tooltip
|
||||
self._update_settings_tooltip()
|
||||
# --- End Settings Button ---
|
||||
|
||||
self.download_btn = QPushButton(_("buttons.download"))
|
||||
@@ -581,6 +577,27 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
"""Enable or disable the Analyze button based on URL input content."""
|
||||
self.analyze_button.setEnabled(bool(text.strip()))
|
||||
|
||||
def _get_speed_limit_tooltip_text(self) -> str:
|
||||
"""Return the current speed limit string for the settings tooltip."""
|
||||
if self.speed_limit_value:
|
||||
return f"{self.speed_limit_value} {['KB/s', 'MB/s'][self.speed_limit_unit_index]}"
|
||||
return _("main_ui.speed_limit_none")
|
||||
|
||||
def _update_settings_tooltip(self) -> None:
|
||||
"""Refresh the download settings tooltip text."""
|
||||
self.settings_button.setToolTip(
|
||||
_(
|
||||
"main_ui.settings_tooltip",
|
||||
path=self.last_path,
|
||||
speed_limit=self._get_speed_limit_tooltip_text(),
|
||||
)
|
||||
)
|
||||
|
||||
def _update_url_placeholder(self) -> None:
|
||||
"""Update the URL placeholder based on the selected validation mode."""
|
||||
placeholder_key = "main_ui.url_placeholder_generic" if self.generic_mode_enabled else "main_ui.url_placeholder"
|
||||
self.url_input.setPlaceholderText(_(placeholder_key))
|
||||
|
||||
|
||||
|
||||
def paste_url(self) -> None:
|
||||
@@ -624,25 +641,29 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
# Update Audio Format Settings
|
||||
new_force_audio_format = dialog.get_force_audio_format_enabled()
|
||||
new_preferred_audio_format = dialog.get_preferred_audio_format()
|
||||
new_audio_normalization = dialog.get_audio_normalization_enabled()
|
||||
audio_format_changed = False
|
||||
if new_force_audio_format != self.force_audio_format or new_preferred_audio_format != self.preferred_audio_format:
|
||||
if (new_force_audio_format != self.force_audio_format or
|
||||
new_preferred_audio_format != self.preferred_audio_format or
|
||||
new_audio_normalization != self.audio_normalization):
|
||||
self.force_audio_format = new_force_audio_format
|
||||
self.preferred_audio_format = new_preferred_audio_format
|
||||
self.audio_normalization = new_audio_normalization
|
||||
audio_format_changed = True
|
||||
logger.info(f"Audio format settings updated - Force: {self.force_audio_format}, Preferred: {self.preferred_audio_format}")
|
||||
logger.info(f"Audio format settings updated - Force: {self.force_audio_format}, Preferred: {self.preferred_audio_format}, Norm: {self.audio_normalization}")
|
||||
|
||||
# Update Generic Mode Setting
|
||||
new_generic_mode = dialog.get_generic_mode_enabled()
|
||||
generic_mode_changed = False
|
||||
if new_generic_mode != self.generic_mode_enabled:
|
||||
self.generic_mode_enabled = new_generic_mode
|
||||
generic_mode_changed = True
|
||||
self._update_url_placeholder()
|
||||
logger.info(f"Generic mode updated - Enabled: {self.generic_mode_enabled}")
|
||||
|
||||
# Update Tooltip if anything changed
|
||||
if path_changed or limit_changed or format_changed or audio_format_changed:
|
||||
limit_text = _("main_ui.speed_limit_none")
|
||||
if self.speed_limit_value:
|
||||
limit_text = f"{self.speed_limit_value} {['KB/s', 'MB/s'][self.speed_limit_unit_index]}"
|
||||
self.settings_button.setToolTip(
|
||||
_(
|
||||
"main_ui.settings_tooltip",
|
||||
path=self.last_path,
|
||||
speed_limit=limit_text,
|
||||
)
|
||||
)
|
||||
if path_changed or limit_changed or format_changed or audio_format_changed or generic_mode_changed:
|
||||
self._update_settings_tooltip()
|
||||
|
||||
def start_download(self) -> None:
|
||||
if self.is_updating_ytdlp:
|
||||
@@ -669,7 +690,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
# --- End Path Change ---
|
||||
|
||||
# Validate URL before starting download
|
||||
is_valid, error_message = validate_video_url(url)
|
||||
is_valid, error_message = validate_video_url(url, generic_mode=self.generic_mode_enabled)
|
||||
if not is_valid:
|
||||
QMessageBox.warning(self, _("main_ui.error_title"), error_message)
|
||||
self.animate_widget_shake(self.url_input)
|
||||
@@ -762,6 +783,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
preferred_output_format=self.preferred_output_format, # Pass preferred format
|
||||
force_audio_format=self.force_audio_format, # Pass force audio format setting
|
||||
preferred_audio_format=self.preferred_audio_format, # Pass preferred audio format
|
||||
audio_normalization=self.audio_normalization, # Pass audio normalization setting
|
||||
filename_format=filename_format, # Pass the filename format
|
||||
)
|
||||
|
||||
@@ -942,6 +964,10 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
||||
|
||||
def check_for_updates(self) -> None:
|
||||
"""Starts the update check in a background thread."""
|
||||
if ConfigManager.get("check_app_updates") is False:
|
||||
logger.info("App version checker is disabled in settings.")
|
||||
return
|
||||
|
||||
self.update_thread = UpdateCheckThread(self.version)
|
||||
self.update_thread.update_available.connect(self.show_update_dialog)
|
||||
self.update_thread.start()
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "تصفح...",
|
||||
"speed_limit": "حد السرعة",
|
||||
"speed_limit_placeholder": "بدون",
|
||||
"generic_mode": "الوضع العام",
|
||||
"enable_generic_mode": "تفعيل الوضع العام (دعم المواقع غير التابعة ليوتيوب)",
|
||||
"generic_mode_help": "يسمح بالتنزيل من Dailymotion وCBC Gem ومواقع أخرى يدعمها yt-dlp.",
|
||||
"auto_update_ytdlp": "التحديثات التلقائية لـ yt-dlp",
|
||||
"enable_auto_updates": "تفعيل التحديثات التلقائية لـ yt-dlp",
|
||||
"update_frequency": "تكرار التحديثات:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ فشل تبديل القناة: {error}",
|
||||
"ytdlp_current_channel": "القناة الحالية: {channel}",
|
||||
"app_updates_title": "تحديثات YTSage",
|
||||
"check_app_updates": "التحقق من تحديثات YTSage عند بدء التشغيل",
|
||||
"check_beta_updates": "تلقي تحديثات تجريبية (Beta)",
|
||||
"auto_update_title": "إعدادات التحديثات التلقائية",
|
||||
"auto_update_header": "🔄 إعدادات التحديثات التلقائية",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (غني بالميزات)",
|
||||
"audio_format_settings": "إعدادات تنسيق الصوت",
|
||||
"force_audio_format": "فرض تنسيق الصوت لتنزيلات الصوت فقط",
|
||||
"audio_normalization": "تسوية الصوت (EBU R128)",
|
||||
"audio_normalization_help": "عند التمكين، سيتم تسوية المسارات الصوتية. ملاحظة: هذا يتطلب إعادة الترميز، لذلك يجب فرض تنسيق صوتي محدد (مثل MP3 أو M4A).",
|
||||
"preferred_audio_format": "تنسيق الصوت المفضل:",
|
||||
"force_audio_format_help": "عند التمكين، سيتم تحويل تنزيلات الصوت فقط إلى التنسيق المفضل لديك. هذا ينطبق فقط عند تنزيل تنسيقات الصوت.",
|
||||
"audio_format_best": "الأفضل (بدون تحويل)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (أبل)",
|
||||
"audio_format_vorbis": "Vorbis (مفتوح)",
|
||||
"filename_format": "تنسيق اسم الملف الناتج",
|
||||
"filename_format_help": "المتغيرات المتاحة: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. يتم دعم صيغة قالب إخراج yt-dlp القياسية."
|
||||
"filename_format_help": "المتغيرات المتاحة: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. يتم دعم صيغة قالب إخراج yt-dlp القياسية.",
|
||||
"tab_general": "عام",
|
||||
"tab_format": "تنسيق",
|
||||
"tab_file": "ملف"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "أدخل رابط فيديو يوتيوب أو قائمة تشغيل",
|
||||
"url_placeholder_generic": "أدخل رابط فيديو أو قائمة تشغيل من أي موقع مدعوم",
|
||||
"merge_subtitles": "دمج الترجمات",
|
||||
"save_thumbnail": "حفظ الصورة المصغرة",
|
||||
"save_description": "حفظ الوصف",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "Durchsuchen...",
|
||||
"speed_limit": "Geschwindigkeitsbegrenzung",
|
||||
"speed_limit_placeholder": "Keine",
|
||||
"generic_mode": "Generischer Modus",
|
||||
"enable_generic_mode": "Generischen Modus aktivieren (Unterstützung für Nicht-YouTube-Seiten)",
|
||||
"generic_mode_help": "Ermöglicht Downloads von Dailymotion, CBC Gem und anderen von yt-dlp unterstützten Seiten.",
|
||||
"auto_update_ytdlp": "yt-dlp automatisch aktualisieren",
|
||||
"enable_auto_updates": "Automatische yt-dlp-Updates aktivieren",
|
||||
"update_frequency": "Update-Häufigkeit:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Kanalwechsel fehlgeschlagen: {error}",
|
||||
"ytdlp_current_channel": "Aktueller Kanal: {channel}",
|
||||
"app_updates_title": "YTSage-Updates",
|
||||
"check_app_updates": "Beim Start nach YTSage-Updates suchen",
|
||||
"check_beta_updates": "Beta-Updates erhalten",
|
||||
"auto_update_title": "Auto-Update-Einstellungen",
|
||||
"auto_update_header": "🔄 Auto-Update-Einstellungen",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (Funktionsreich)",
|
||||
"audio_format_settings": "Audioformat-Einstellungen",
|
||||
"force_audio_format": "Audioformat für Nur-Audio-Downloads erzwingen",
|
||||
"audio_normalization": "Audio-Normalisierung (EBU R128)",
|
||||
"audio_normalization_help": "Wenn aktiviert, werden Audiospuren normalisiert. Hinweis: Dies erfordert eine Neukodierung, daher muss ein bestimmtes Audioformat (wie MP3 oder M4A) erzwungen werden.",
|
||||
"preferred_audio_format": "Bevorzugtes Audioformat:",
|
||||
"force_audio_format_help": "Wenn aktiviert, werden Nur-Audio-Downloads in Ihr bevorzugtes Format konvertiert. Dies gilt nur beim Herunterladen von Audioformaten.",
|
||||
"audio_format_best": "Beste (Keine Konvertierung)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Offen)",
|
||||
"filename_format": "Ausgabe-Dateinamenformat",
|
||||
"filename_format_help": "Verfügbare Variablen: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Die Standard-yt-dlp-Ausgabevorlagensyntax wird unterstützt."
|
||||
"filename_format_help": "Verfügbare Variablen: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Die Standard-yt-dlp-Ausgabevorlagensyntax wird unterstützt.",
|
||||
"tab_general": "Allgemein",
|
||||
"tab_format": "Format",
|
||||
"tab_file": "Datei"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "YouTube-Video- oder Playlist-URL eingeben",
|
||||
"url_placeholder_generic": "Video- oder Playlist-URL von jeder unterstützten Seite eingeben",
|
||||
"merge_subtitles": "Untertitel zusammenführen",
|
||||
"save_thumbnail": "Thumbnail speichern",
|
||||
"save_description": "Beschreibung speichern",
|
||||
|
||||
@@ -275,6 +275,9 @@
|
||||
"browse": "Browse...",
|
||||
"speed_limit": "Speed Limit",
|
||||
"speed_limit_placeholder": "None",
|
||||
"generic_mode": "Generic Mode",
|
||||
"enable_generic_mode": "Enable Generic Mode (support non-YouTube sites)",
|
||||
"generic_mode_help": "Allows downloading from Dailymotion, CBC Gem, and other sites supported by yt-dlp.",
|
||||
"auto_update_ytdlp": "Auto-Update yt-dlp",
|
||||
"enable_auto_updates": "Enable automatic yt-dlp updates",
|
||||
"update_frequency": "Update frequency:",
|
||||
@@ -301,6 +304,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Failed to switch channel: {error}",
|
||||
"ytdlp_current_channel": "Current channel: {channel}",
|
||||
"app_updates_title": "YTSage Updates",
|
||||
"check_app_updates": "Check for YTSage updates on startup",
|
||||
"check_beta_updates": "Receive Beta Updates",
|
||||
"auto_update_title": "Auto-Update Settings",
|
||||
"auto_update_header": "🔄 Auto-Update Settings",
|
||||
@@ -323,6 +327,8 @@
|
||||
"format_mkv": "MKV (Feature-rich)",
|
||||
"audio_format_settings": "Audio Format Settings",
|
||||
"force_audio_format": "Force audio format for audio-only downloads",
|
||||
"audio_normalization": "Audio Normalization (EBU R128)",
|
||||
"audio_normalization_help": "When enabled, audio tracks will be normalized. Note: This requires re-encoding, so a specific audio format (like MP3 or M4A) must be forced.",
|
||||
"filename_format": "Output Filename Format",
|
||||
"filename_format_help": "Available variables: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Standard yt-dlp output template syntax is supported.",
|
||||
"preferred_audio_format": "Preferred audio format:",
|
||||
@@ -334,10 +340,14 @@
|
||||
"audio_format_wav": "WAV (Uncompressed)",
|
||||
"audio_format_opus": "Opus (Efficient)",
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Open)"
|
||||
"audio_format_vorbis": "Vorbis (Open)",
|
||||
"tab_general": "General",
|
||||
"tab_format": "Format",
|
||||
"tab_file": "File"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Enter YouTube video or playlist URL",
|
||||
"url_placeholder_generic": "Enter video or playlist URL from any supported site",
|
||||
"merge_subtitles": "Merge Subtitles",
|
||||
"save_thumbnail": "Save Thumbnail",
|
||||
"save_description": "Save Description",
|
||||
|
||||
@@ -257,6 +257,9 @@
|
||||
"browse": "Examinar...",
|
||||
"speed_limit": "Límite de Velocidad",
|
||||
"speed_limit_placeholder": "Ninguno",
|
||||
"generic_mode": "Modo genérico",
|
||||
"enable_generic_mode": "Habilitar modo genérico (compatibilidad con sitios que no son YouTube)",
|
||||
"generic_mode_help": "Permite descargar desde Dailymotion, CBC Gem y otros sitios compatibles con yt-dlp.",
|
||||
"auto_update_ytdlp": "Auto-Actualizar yt-dlp",
|
||||
"enable_auto_updates": "Habilitar actualizaciones automáticas de yt-dlp",
|
||||
"update_frequency": "Frecuencia de actualización:",
|
||||
@@ -283,6 +286,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Error al cambiar de canal: {error}",
|
||||
"ytdlp_current_channel": "Canal actual: {channel}",
|
||||
"app_updates_title": "Actualizaciones de YTSage",
|
||||
"check_app_updates": "Buscar actualizaciones de YTSage al iniciar",
|
||||
"check_beta_updates": "Recibir actualizaciones beta",
|
||||
"auto_update_title": "Configuración de Auto-Actualización",
|
||||
"auto_update_header": "🔄 Configuración de Auto-Actualización",
|
||||
@@ -305,6 +309,8 @@
|
||||
"format_mkv": "MKV (Rico en funciones)",
|
||||
"audio_format_settings": "Configuración de formato de audio",
|
||||
"force_audio_format": "Forzar formato de audio para descargas solo de audio",
|
||||
"audio_normalization": "Normalización de audio (EBU R128)",
|
||||
"audio_normalization_help": "Cuando está activado, las pistas de audio se normalizarán. Nota: esto requiere recodificación, por lo que se debe forzar un formato de audio específico (como MP3 o M4A).",
|
||||
"preferred_audio_format": "Formato de audio preferido:",
|
||||
"force_audio_format_help": "Cuando está habilitado, las descargas solo de audio se convertirán a su formato preferido. Esto solo se aplica al descargar formatos de audio.",
|
||||
"audio_format_best": "Mejor (Sin conversión)",
|
||||
@@ -316,10 +322,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Abierto)",
|
||||
"filename_format": "Formato de nombre de archivo",
|
||||
"filename_format_help": "Variables disponibles: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Se admite la sintaxis estándar de plantilla de salida de yt-dlp."
|
||||
"filename_format_help": "Variables disponibles: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Se admite la sintaxis estándar de plantilla de salida de yt-dlp.",
|
||||
"tab_general": "General",
|
||||
"tab_format": "Formato",
|
||||
"tab_file": "Archivo"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Ingresa URL de video o lista de YouTube",
|
||||
"url_placeholder_generic": "Ingresa la URL de un video o una lista de cualquier sitio compatible",
|
||||
"merge_subtitles": "Combinar Subtítulos",
|
||||
"save_thumbnail": "Guardar Miniatura",
|
||||
"save_description": "Guardar Descripción",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "Parcourir...",
|
||||
"speed_limit": "Limite de vitesse",
|
||||
"speed_limit_placeholder": "Aucune",
|
||||
"generic_mode": "Mode générique",
|
||||
"enable_generic_mode": "Activer le mode générique (prise en charge des sites non-YouTube)",
|
||||
"generic_mode_help": "Permet le téléchargement depuis Dailymotion, CBC Gem et d'autres sites pris en charge par yt-dlp.",
|
||||
"auto_update_ytdlp": "Mise à jour automatique de yt-dlp",
|
||||
"enable_auto_updates": "Activer les mises à jour automatiques de yt-dlp",
|
||||
"update_frequency": "Fréquence de mise à jour :",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Échec du changement de canal : {error}",
|
||||
"ytdlp_current_channel": "Canal actuel : {channel}",
|
||||
"app_updates_title": "Mises à jour YTSage",
|
||||
"check_app_updates": "Vérifier les mises à jour YTSage au démarrage",
|
||||
"check_beta_updates": "Recevoir les mises à jour bêta",
|
||||
"auto_update_title": "Paramètres de mise à jour automatique",
|
||||
"auto_update_header": "🔄 Paramètres de mise à jour automatique",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (Riche en fonctionnalités)",
|
||||
"audio_format_settings": "Paramètres du format audio",
|
||||
"force_audio_format": "Forcer le format audio pour les téléchargements audio uniquement",
|
||||
"audio_normalization": "Normalisation audio (EBU R128)",
|
||||
"audio_normalization_help": "Lorsqu'il est activé, les pistes audio seront normalisées. Remarque : Cela nécessite un réencodage, un format audio spécifique (comme MP3 ou M4A) doit donc être forcé.",
|
||||
"preferred_audio_format": "Format audio préféré :",
|
||||
"force_audio_format_help": "Lorsqu'activé, les téléchargements audio uniquement seront convertis dans votre format préféré. Cela s'applique uniquement lors du téléchargement de formats audio.",
|
||||
"audio_format_best": "Meilleur (Pas de conversion)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Ouvert)",
|
||||
"filename_format": "Format du nom de fichier",
|
||||
"filename_format_help": "Variables disponibles : %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. La syntaxe standard des modèles de sortie yt-dlp est prise en charge."
|
||||
"filename_format_help": "Variables disponibles : %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. La syntaxe standard des modèles de sortie yt-dlp est prise en charge.",
|
||||
"tab_general": "Général",
|
||||
"tab_format": "Format",
|
||||
"tab_file": "Fichier"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Entrer l'URL de la vidéo ou de la playlist YouTube",
|
||||
"url_placeholder_generic": "Entrez l'URL d'une vidéo ou d'une playlist depuis n'importe quel site pris en charge",
|
||||
"merge_subtitles": "Fusionner les sous-titres",
|
||||
"save_thumbnail": "Sauvegarder la miniature",
|
||||
"save_description": "Sauvegarder la description",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "ब्राउज़ करें...",
|
||||
"speed_limit": "गति सीमा",
|
||||
"speed_limit_placeholder": "कोई नहीं",
|
||||
"generic_mode": "जेनेरिक मोड",
|
||||
"enable_generic_mode": "जेनेरिक मोड सक्षम करें (गैर-YouTube साइटों के लिए समर्थन)",
|
||||
"generic_mode_help": "Dailymotion, CBC Gem और yt-dlp द्वारा समर्थित अन्य साइटों से डाउनलोड की अनुमति देता है।",
|
||||
"auto_update_ytdlp": "yt-dlp स्वचालित अपडेट",
|
||||
"enable_auto_updates": "yt-dlp स्वचालित अपडेट सक्षम करें",
|
||||
"update_frequency": "अपडेट आवृत्ति:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ चैनल स्विच करना विफल: {error}",
|
||||
"ytdlp_current_channel": "वर्तमान चैनल: {channel}",
|
||||
"app_updates_title": "YTSage अपडेट",
|
||||
"check_app_updates": "स्टार्टअप पर YTSage अपडेट जांचें",
|
||||
"check_beta_updates": "बीटा अपडेट प्राप्त करें",
|
||||
"auto_update_title": "स्वचालित अपडेट सेटिंग्स",
|
||||
"auto_update_header": "🔄 स्वचालित अपडेट सेटिंग्स",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (सुविधा समृद्ध)",
|
||||
"audio_format_settings": "ऑडियो प्रारूप सेटिंग्स",
|
||||
"force_audio_format": "केवल ऑडियो डाउनलोड के लिए ऑडियो प्रारूप लागू करें",
|
||||
"audio_normalization": "ऑडियो सामान्यीकरण (EBU R128)",
|
||||
"audio_normalization_help": "सक्षम होने पर, ऑडियो ट्रैक सामान्य किए जाएंगे। ध्यान दें: इसके लिए री-एनकोडिंग की आवश्यकता होती है, इसलिए एक विशिष्ट ऑडियो प्रारूप (जैसे MP3 या M4A) को बाध्य किया जाना चाहिए।",
|
||||
"preferred_audio_format": "पसंदीदा ऑडियो प्रारूप:",
|
||||
"force_audio_format_help": "सक्षम होने पर, केवल ऑडियो डाउनलोड आपके पसंदीदा प्रारूप में परिवर्तित हो जाएंगे। यह केवल ऑडियो प्रारूप डाउनलोड करते समय लागू होता है।",
|
||||
"audio_format_best": "सर्वोत्तम (कोई परिवर्तन नहीं)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (खुला)",
|
||||
"filename_format": "आउटपुट फ़ाइलनाम प्रारूप",
|
||||
"filename_format_help": "उपलब्ध चर: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. मानक yt-dlp आउटपुट टेम्प्लेट सिंटैक्स समर्थित है."
|
||||
"filename_format_help": "उपलब्ध चर: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. मानक yt-dlp आउटपुट टेम्प्लेट सिंटैक्स समर्थित है.",
|
||||
"tab_general": "सामान्य",
|
||||
"tab_format": "प्रारूप",
|
||||
"tab_file": "फ़ाइल"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "YouTube वीडियो या प्लेलिस्ट URL दर्ज करें",
|
||||
"url_placeholder_generic": "किसी भी समर्थित साइट से वीडियो या प्लेलिस्ट URL दर्ज करें",
|
||||
"merge_subtitles": "उपशीर्षक मर्ज करें",
|
||||
"save_thumbnail": "थंबनेल सेव करें",
|
||||
"save_description": "विवरण सेव करें",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "Jelajahi...",
|
||||
"speed_limit": "Batas kecepatan",
|
||||
"speed_limit_placeholder": "Tidak ada",
|
||||
"generic_mode": "Mode generik",
|
||||
"enable_generic_mode": "Aktifkan mode generik (mendukung situs non-YouTube)",
|
||||
"generic_mode_help": "Memungkinkan pengunduhan dari Dailymotion, CBC Gem, dan situs lain yang didukung oleh yt-dlp.",
|
||||
"auto_update_ytdlp": "Pembaruan otomatis yt-dlp",
|
||||
"enable_auto_updates": "Aktifkan pembaruan otomatis yt-dlp",
|
||||
"update_frequency": "Frekuensi pembaruan:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Gagal beralih saluran: {error}",
|
||||
"ytdlp_current_channel": "Saluran saat ini: {channel}",
|
||||
"app_updates_title": "Pembaruan YTSage",
|
||||
"check_app_updates": "Periksa pembaruan YTSage saat startup",
|
||||
"check_beta_updates": "Terima Pembaruan Beta",
|
||||
"auto_update_title": "Pengaturan pembaruan otomatis",
|
||||
"auto_update_header": "🔄 Pengaturan pembaruan otomatis",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (Kaya fitur)",
|
||||
"audio_format_settings": "Pengaturan Format Audio",
|
||||
"force_audio_format": "Paksa format audio untuk unduhan khusus audio",
|
||||
"audio_normalization": "Normalisasi Audio (EBU R128)",
|
||||
"audio_normalization_help": "Jika diaktifkan, trek audio akan dinormalisasi. Catatan: Ini memerlukan pengkodean ulang, jadi format audio tertentu (seperti MP3 atau M4A) harus dipaksakan.",
|
||||
"preferred_audio_format": "Format audio pilihan:",
|
||||
"force_audio_format_help": "Saat diaktifkan, unduhan khusus audio akan dikonversi ke format pilihan Anda. Ini hanya berlaku saat mengunduh format audio.",
|
||||
"audio_format_best": "Terbaik (Tanpa konversi)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Terbuka)",
|
||||
"filename_format": "Format Nama File Keluaran",
|
||||
"filename_format_help": "Variabel yang tersedia: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Sintaks templat keluaran standar yt-dlp didukung."
|
||||
"filename_format_help": "Variabel yang tersedia: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Sintaks templat keluaran standar yt-dlp didukung.",
|
||||
"tab_general": "Umum",
|
||||
"tab_format": "Format",
|
||||
"tab_file": "Berkas"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Masukkan URL video atau playlist YouTube",
|
||||
"url_placeholder_generic": "Masukkan URL video atau playlist dari situs apa pun yang didukung",
|
||||
"merge_subtitles": "Gabungkan subtitle",
|
||||
"save_thumbnail": "Simpan thumbnail",
|
||||
"save_description": "Simpan deskripsi",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "Sfoglia...",
|
||||
"speed_limit": "Limite velocità",
|
||||
"speed_limit_placeholder": "Nessuno",
|
||||
"generic_mode": "Modalità generica",
|
||||
"enable_generic_mode": "Abilita modalità generica (supporta siti non YouTube)",
|
||||
"generic_mode_help": "Consente il download da Dailymotion, CBC Gem e altri siti supportati da yt-dlp.",
|
||||
"auto_update_ytdlp": "Aggiornamenti automatici yt-dlp",
|
||||
"enable_auto_updates": "Abilita aggiornamenti automatici yt-dlp",
|
||||
"update_frequency": "Frequenza aggiornamenti:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Impossibile cambiare canale: {error}",
|
||||
"ytdlp_current_channel": "Canale attuale: {channel}",
|
||||
"app_updates_title": "Aggiornamenti YTSage",
|
||||
"check_app_updates": "Controlla aggiornamenti YTSage all'avvio",
|
||||
"check_beta_updates": "Ricevi aggiornamenti beta",
|
||||
"auto_update_title": "Impostazioni aggiornamenti automatici",
|
||||
"auto_update_header": "🔄 Impostazioni aggiornamenti automatici",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (Ricco di funzionalità)",
|
||||
"audio_format_settings": "Impostazioni formato audio",
|
||||
"force_audio_format": "Forza formato audio per download solo audio",
|
||||
"audio_normalization": "Normalizzazione audio (EBU R128)",
|
||||
"audio_normalization_help": "Se abilitato, le tracce audio verranno normalizzate. Nota: ciò richiede la ricodifica, quindi deve essere forzato un formato audio specifico (come MP3 o M4A).",
|
||||
"preferred_audio_format": "Formato audio preferito:",
|
||||
"force_audio_format_help": "Quando abilitato, i download solo audio verranno convertiti nel formato preferito. Questo si applica solo durante il download di formati audio.",
|
||||
"audio_format_best": "Migliore (Nessuna conversione)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Aperto)",
|
||||
"filename_format": "Formato nome file output",
|
||||
"filename_format_help": "Variabili disponibili: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. È supportata la sintassi standard del modello di output di yt-dlp."
|
||||
"filename_format_help": "Variabili disponibili: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. È supportata la sintassi standard del modello di output di yt-dlp.",
|
||||
"tab_general": "Generale",
|
||||
"tab_format": "Formato",
|
||||
"tab_file": "File"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Inserisci URL video YouTube o playlist",
|
||||
"url_placeholder_generic": "Inserisci l'URL di un video o di una playlist da qualsiasi sito supportato",
|
||||
"merge_subtitles": "Unisci sottotitoli",
|
||||
"save_thumbnail": "Salva miniatura",
|
||||
"save_description": "Salva descrizione",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "参照...",
|
||||
"speed_limit": "速度制限",
|
||||
"speed_limit_placeholder": "なし",
|
||||
"generic_mode": "汎用モード",
|
||||
"enable_generic_mode": "汎用モードを有効化(YouTube以外のサイトをサポート)",
|
||||
"generic_mode_help": "Dailymotion、CBC Gem、および yt-dlp が対応する他のサイトからのダウンロードを可能にします。",
|
||||
"auto_update_ytdlp": "yt-dlp自動更新",
|
||||
"enable_auto_updates": "yt-dlp自動更新を有効化",
|
||||
"update_frequency": "更新頻度:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ チャンネルの切り替えに失敗しました: {error}",
|
||||
"ytdlp_current_channel": "現在のチャンネル: {channel}",
|
||||
"app_updates_title": "YTSageの更新",
|
||||
"check_app_updates": "起動時にYTSageの更新を確認する",
|
||||
"check_beta_updates": "ベータ版の更新を受け取る",
|
||||
"auto_update_title": "自動更新設定",
|
||||
"auto_update_header": "🔄 自動更新設定",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV(機能豊富)",
|
||||
"audio_format_settings": "オーディオ形式設定",
|
||||
"force_audio_format": "オーディオのみのダウンロードにオーディオ形式を強制",
|
||||
"audio_normalization": "オーディオ正規化 (EBU R128)",
|
||||
"audio_normalization_help": "有効にすると、オーディオトラックが正規化されます。注:これには再エンコードが必要なため、特定のオーディオ形式(MP3やM4Aなど)を強制する必要があります。",
|
||||
"preferred_audio_format": "優先オーディオ形式:",
|
||||
"force_audio_format_help": "有効にすると、オーディオのみのダウンロードが優先形式に変換されます。これはオーディオ形式をダウンロードする場合にのみ適用されます。",
|
||||
"audio_format_best": "最高(変換なし)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A(Apple)",
|
||||
"audio_format_vorbis": "Vorbis(オープン)",
|
||||
"filename_format": "出力ファイル名の形式",
|
||||
"filename_format_help": "利用可能な変数: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。標準のyt-dlp出力テンプレート構文がサポートされています。"
|
||||
"filename_format_help": "利用可能な変数: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。標準のyt-dlp出力テンプレート構文がサポートされています。",
|
||||
"tab_general": "一般",
|
||||
"tab_format": "フォーマット",
|
||||
"tab_file": "ファイル"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "YouTubeの動画URLまたはプレイリストURLを入力",
|
||||
"url_placeholder_generic": "対応サイトの動画またはプレイリストURLを入力",
|
||||
"merge_subtitles": "字幕を結合",
|
||||
"save_thumbnail": "サムネイルを保存",
|
||||
"save_description": "説明を保存",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "Przeglądaj...",
|
||||
"speed_limit": "Limit prędkości",
|
||||
"speed_limit_placeholder": "Brak",
|
||||
"generic_mode": "Tryb ogólny",
|
||||
"enable_generic_mode": "Włącz tryb ogólny (obsługa stron innych niż YouTube)",
|
||||
"generic_mode_help": "Umożliwia pobieranie z Dailymotion, CBC Gem i innych stron obsługiwanych przez yt-dlp.",
|
||||
"auto_update_ytdlp": "Automatyczne aktualizacje yt-dlp",
|
||||
"enable_auto_updates": "Włącz automatyczne aktualizacje yt-dlp",
|
||||
"update_frequency": "Częstotliwość aktualizacji:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Nie udało się przełączyć kanału: {error}",
|
||||
"ytdlp_current_channel": "Aktualny kanał: {channel}",
|
||||
"app_updates_title": "Aktualizacje YTSage",
|
||||
"check_app_updates": "Sprawdzaj aktualizacje YTSage przy uruchomieniu",
|
||||
"check_beta_updates": "Otrzymuj aktualizacje beta",
|
||||
"auto_update_title": "Ustawienia automatycznych aktualizacji",
|
||||
"auto_update_header": "🔄 Ustawienia automatycznych aktualizacji",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (Bogaty w funkcje)",
|
||||
"audio_format_settings": "Ustawienia formatu audio",
|
||||
"force_audio_format": "Wymuś format audio dla pobierania tylko audio",
|
||||
"audio_normalization": "Normalizacja dźwięku (EBU R128)",
|
||||
"audio_normalization_help": "Po włączeniu ścieżki dźwiękowe zostaną znormalizowane. Uwaga: Wymaga to ponownego kodowania, więc należy wymusić określony format dźwięku (taki jak MP3 lub M4A).",
|
||||
"preferred_audio_format": "Preferowany format audio:",
|
||||
"force_audio_format_help": "Gdy włączone, pobieranie tylko audio zostanie przekonwertowane na preferowany format. Dotyczy to tylko pobierania formatów audio.",
|
||||
"audio_format_best": "Najlepsze (Bez konwersji)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Otwarty)",
|
||||
"filename_format": "Format nazwy pliku",
|
||||
"filename_format_help": "Dostępne zmienne: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Obsługiwana jest standardowa składnia szablonu wyjściowego yt-dlp."
|
||||
"filename_format_help": "Dostępne zmienne: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Obsługiwana jest standardowa składnia szablonu wyjściowego yt-dlp.",
|
||||
"tab_general": "Ogólne",
|
||||
"tab_format": "Format",
|
||||
"tab_file": "Plik"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Wprowadź URL wideo YouTube lub playlisty",
|
||||
"url_placeholder_generic": "Wprowadź URL filmu lub playlisty z dowolnej obsługiwanej strony",
|
||||
"merge_subtitles": "Połącz napisy",
|
||||
"save_thumbnail": "Zapisz miniaturę",
|
||||
"save_description": "Zapisz opis",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "Procurar...",
|
||||
"speed_limit": "Limite de Velocidade",
|
||||
"speed_limit_placeholder": "Nenhum",
|
||||
"generic_mode": "Modo genérico",
|
||||
"enable_generic_mode": "Ativar modo genérico (suporte a sites que não são do YouTube)",
|
||||
"generic_mode_help": "Permite baixar de Dailymotion, CBC Gem e outros sites compatíveis com o yt-dlp.",
|
||||
"auto_update_ytdlp": "Auto-Atualizar yt-dlp",
|
||||
"enable_auto_updates": "Habilitar atualizações automáticas do yt-dlp",
|
||||
"update_frequency": "Frequência de atualização:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Falha ao trocar de canal: {error}",
|
||||
"ytdlp_current_channel": "Canal atual: {channel}",
|
||||
"app_updates_title": "Atualizações do YTSage",
|
||||
"check_app_updates": "Verificar atualizações do YTSage na inicialização",
|
||||
"check_beta_updates": "Receber atualizações beta",
|
||||
"auto_update_title": "Configurações de Auto-Atualização",
|
||||
"auto_update_header": "🔄 Configurações de Auto-Atualização",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (Rico em recursos)",
|
||||
"audio_format_settings": "Configurações de formato de áudio",
|
||||
"force_audio_format": "Forçar formato de áudio para downloads somente de áudio",
|
||||
"audio_normalization": "Normalização de Áudio (EBU R128)",
|
||||
"audio_normalization_help": "Quando ativado, as faixas de áudio serão normalizadas. Nota: isso requer recodificação, portanto, um formato de áudio específico (como MP3 ou M4A) deve ser forçado.",
|
||||
"preferred_audio_format": "Formato de áudio preferido:",
|
||||
"force_audio_format_help": "Quando ativado, downloads somente de áudio serão convertidos para seu formato preferido. Isso se aplica apenas ao baixar formatos de áudio.",
|
||||
"audio_format_best": "Melhor (Sem conversão)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Aberto)",
|
||||
"filename_format": "Formato de nome de arquivo",
|
||||
"filename_format_help": "Variáveis disponíveis: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. A sintaxe padrão de modelo de saída do yt-dlp é suportada."
|
||||
"filename_format_help": "Variáveis disponíveis: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. A sintaxe padrão de modelo de saída do yt-dlp é suportada.",
|
||||
"tab_general": "Geral",
|
||||
"tab_format": "Formato",
|
||||
"tab_file": "Arquivo"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Digite a URL do vídeo ou playlist do YouTube",
|
||||
"url_placeholder_generic": "Digite a URL de um vídeo ou playlist de qualquer site compatível",
|
||||
"merge_subtitles": "Mesclar Legendas",
|
||||
"save_thumbnail": "Salvar Miniatura",
|
||||
"save_description": "Salvar Descrição",
|
||||
|
||||
@@ -274,6 +274,9 @@
|
||||
"browse": "Обзор...",
|
||||
"speed_limit": "Ограничение скорости",
|
||||
"speed_limit_placeholder": "Нет",
|
||||
"generic_mode": "Универсальный режим",
|
||||
"enable_generic_mode": "Включить универсальный режим (поддержка сайтов не только YouTube)",
|
||||
"generic_mode_help": "Позволяет скачивать с Dailymotion, CBC Gem и других сайтов, поддерживаемых yt-dlp.",
|
||||
"auto_update_ytdlp": "Автообновление yt-dlp",
|
||||
"enable_auto_updates": "Включить автоматические обновления yt-dlp",
|
||||
"update_frequency": "Частота обновления:",
|
||||
@@ -300,6 +303,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Не удалось переключить канал: {error}",
|
||||
"ytdlp_current_channel": "Текущий канал: {channel}",
|
||||
"app_updates_title": "Обновления YTSage",
|
||||
"check_app_updates": "Проверять обновления YTSage при запуске",
|
||||
"check_beta_updates": "Получать бета-обновления",
|
||||
"auto_update_title": "Настройки автообновления",
|
||||
"auto_update_header": "🔄 Настройки автообновления",
|
||||
@@ -322,6 +326,8 @@
|
||||
"format_mkv": "MKV (Многофункциональный)",
|
||||
"audio_format_settings": "Настройки формата аудио",
|
||||
"force_audio_format": "Принудительный формат аудио для загрузки только аудио",
|
||||
"audio_normalization": "Нормализация звука (EBU R128)",
|
||||
"audio_normalization_help": "При включении звуковые дорожки будут нормализованы. Примечание: Это требует перекодирования, поэтому необходимо принудительно задать определенный аудиоформат (например, MP3 или M4A).",
|
||||
"preferred_audio_format": "Предпочтительный формат аудио:",
|
||||
"force_audio_format_help": "При включении загрузки только аудио будут конвертированы в ваш предпочтительный формат. Это применяется только при загрузке аудио форматов.",
|
||||
"audio_format_best": "Лучшее (Без конвертации)",
|
||||
@@ -333,10 +339,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Открытый)",
|
||||
"filename_format": "Формат имени файла",
|
||||
"filename_format_help": "Доступные переменные: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Поддерживается стандартный синтаксис шаблона вывода yt-dlp."
|
||||
"filename_format_help": "Доступные переменные: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Поддерживается стандартный синтаксис шаблона вывода yt-dlp.",
|
||||
"tab_general": "Общие",
|
||||
"tab_format": "Формат",
|
||||
"tab_file": "Файл"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Введите URL видео или плейлиста YouTube",
|
||||
"url_placeholder_generic": "Введите URL видео или плейлиста с любого поддерживаемого сайта",
|
||||
"merge_subtitles": "Объединить субтитры",
|
||||
"save_thumbnail": "Сохранить миниатюру",
|
||||
"save_description": "Сохранить описание",
|
||||
|
||||
@@ -272,6 +272,9 @@
|
||||
"browse": "Gözat...",
|
||||
"speed_limit": "Hız sınırı",
|
||||
"speed_limit_placeholder": "Yok",
|
||||
"generic_mode": "Genel mod",
|
||||
"enable_generic_mode": "Genel modu etkinleştir (YouTube dışı siteleri destekle)",
|
||||
"generic_mode_help": "Dailymotion, CBC Gem ve yt-dlp tarafından desteklenen diğer sitelerden indirmeye izin verir.",
|
||||
"auto_update_ytdlp": "yt-dlp otomatik güncelleme",
|
||||
"enable_auto_updates": "yt-dlp otomatik güncellemelerini etkinleştir",
|
||||
"update_frequency": "Güncelleme sıklığı:",
|
||||
@@ -298,6 +301,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ Kanal değiştirilemedi: {error}",
|
||||
"ytdlp_current_channel": "Mevcut kanal: {channel}",
|
||||
"app_updates_title": "YTSage Güncellemeleri",
|
||||
"check_app_updates": "Başlangıçta YTSage güncellemelerini kontrol et",
|
||||
"check_beta_updates": "Beta Güncellemelerini Al",
|
||||
"auto_update_title": "Otomatik güncelleme ayarları",
|
||||
"auto_update_header": "🔄 Otomatik güncelleme ayarları",
|
||||
@@ -320,6 +324,8 @@
|
||||
"format_mkv": "MKV (Özellik açısından zengin)",
|
||||
"audio_format_settings": "Ses Formatı Ayarları",
|
||||
"force_audio_format": "Yalnızca ses indirmeleri için ses formatını zorla",
|
||||
"audio_normalization": "Ses Normalizasyonu (EBU R128)",
|
||||
"audio_normalization_help": "Etkinleştirildiğinde ses parçaları normalleştirilecektir. Not: Bu, yeniden kodlamayı gerektirir, bu nedenle belirli bir ses formatı (MP3 veya M4A gibi) zorunlu kılınmalıdır.",
|
||||
"preferred_audio_format": "Tercih edilen ses formatı:",
|
||||
"force_audio_format_help": "Etkinleştirildiğinde, yalnızca ses indirmeleri tercih ettiğiniz formata dönüştürülecektir. Bu yalnızca ses formatları indirilirken geçerlidir.",
|
||||
"audio_format_best": "En iyi (Dönüştürme yok)",
|
||||
@@ -331,10 +337,14 @@
|
||||
"audio_format_m4a": "M4A (Apple)",
|
||||
"audio_format_vorbis": "Vorbis (Açık)",
|
||||
"filename_format": "Çıktı Dosya Adı Formatı",
|
||||
"filename_format_help": "Kullanılabilir değişkenler: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Standart yt-dlp çıktı şablonu sözdizimi desteklenir."
|
||||
"filename_format_help": "Kullanılabilir değişkenler: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Standart yt-dlp çıktı şablonu sözdizimi desteklenir.",
|
||||
"tab_general": "Genel",
|
||||
"tab_format": "Biçim",
|
||||
"tab_file": "Dosya"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "YouTube video veya oynatma listesi URL'sini girin",
|
||||
"url_placeholder_generic": "Desteklenen herhangi bir siteden video veya oynatma listesi URL'si girin",
|
||||
"merge_subtitles": "Altyazıları birleştir",
|
||||
"save_thumbnail": "Küçük resmi kaydet",
|
||||
"save_description": "Açıklamayı kaydet",
|
||||
|
||||
@@ -262,6 +262,9 @@
|
||||
"browse": "浏览...",
|
||||
"speed_limit": "速度限制",
|
||||
"speed_limit_placeholder": "无",
|
||||
"generic_mode": "通用模式",
|
||||
"enable_generic_mode": "启用通用模式(支持非 YouTube 网站)",
|
||||
"generic_mode_help": "允许从 Dailymotion、CBC Gem 以及其他受 yt-dlp 支持的网站下载。",
|
||||
"auto_update_ytdlp": "自动更新 yt-dlp",
|
||||
"enable_auto_updates": "启用 yt-dlp 自动更新",
|
||||
"update_frequency": "更新频率:",
|
||||
@@ -288,6 +291,7 @@
|
||||
"ytdlp_channel_switch_failed": "❌ 切换渠道失败:{error}",
|
||||
"ytdlp_current_channel": "当前渠道:{channel}",
|
||||
"app_updates_title": "YTSage 更新",
|
||||
"check_app_updates": "启动时检查 YTSage 更新",
|
||||
"check_beta_updates": "接收测试版更新",
|
||||
"auto_update_title": "自动更新设置",
|
||||
"auto_update_header": "🔄 自动更新设置",
|
||||
@@ -310,6 +314,8 @@
|
||||
"format_mkv": "MKV(功能丰富)",
|
||||
"audio_format_settings": "音频格式设置",
|
||||
"force_audio_format": "强制仅音频下载的音频格式",
|
||||
"audio_normalization": "音频标准化 (EBU R128)",
|
||||
"audio_normalization_help": "启用后,音轨将被标准化。 注意:这需要重新编码,因此必须强制使用特定的音频格式(如 MP3 或 M4A)。",
|
||||
"preferred_audio_format": "首选音频格式:",
|
||||
"force_audio_format_help": "启用后,仅音频下载将转换为您的首选格式。这仅在下载音频格式时适用。",
|
||||
"audio_format_best": "最佳(不转换)",
|
||||
@@ -321,10 +327,14 @@
|
||||
"audio_format_m4a": "M4A(Apple)",
|
||||
"audio_format_vorbis": "Vorbis(开放)",
|
||||
"filename_format": "输出文件名格式",
|
||||
"filename_format_help": "可用变量: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。支持标准的 yt-dlp 输出模板语法。"
|
||||
"filename_format_help": "可用变量: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。支持标准的 yt-dlp 输出模板语法。",
|
||||
"tab_general": "一般",
|
||||
"tab_format": "格式",
|
||||
"tab_file": "文件"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "输入 YouTube 视频或播放列表网址",
|
||||
"url_placeholder_generic": "输入任意受支持网站的视频或播放列表网址",
|
||||
"merge_subtitles": "合并字幕",
|
||||
"save_thumbnail": "保存缩略图",
|
||||
"save_description": "保存描述",
|
||||
|
||||
@@ -71,6 +71,7 @@ class ConfigManager:
|
||||
_settings: Dict[str, Any] = {}
|
||||
_default_config: Dict[str, Any] = {
|
||||
"download_path": str(USER_HOME_DIR / "Downloads"),
|
||||
"generic_mode": False,
|
||||
"speed_limit_value": None,
|
||||
"speed_limit_unit_index": 0,
|
||||
"cookie_source": "browser", # "browser" or "file"
|
||||
@@ -83,6 +84,7 @@ class ConfigManager:
|
||||
"geo_proxy_url": None,
|
||||
"auto_update_ytdlp": True,
|
||||
"auto_update_frequency": "daily",
|
||||
"check_app_updates": True,
|
||||
"check_beta_updates": False,
|
||||
"last_update_check": 0,
|
||||
"language": "en",
|
||||
@@ -91,6 +93,7 @@ class ConfigManager:
|
||||
"preferred_output_format": "mp4",
|
||||
"force_audio_format": False,
|
||||
"preferred_audio_format": "best",
|
||||
"audio_normalization": False,
|
||||
"filename_format": "%(title)s_%(resolution)s.%(ext)s",
|
||||
"cached_versions": {
|
||||
"ytdlp": {"version": None, "path": None, "last_check": 0, "path_mtime": 0},
|
||||
|
||||
@@ -70,12 +70,26 @@ class LocalizationManager:
|
||||
"custom_options": "Custom Options",
|
||||
"settings": "Settings"
|
||||
},
|
||||
"settings": {
|
||||
"generic_mode": "Generic Mode",
|
||||
"enable_generic_mode": "Enable Generic Mode (support non-YouTube sites)",
|
||||
"generic_mode_help": "Allows downloading from Dailymotion, CBC Gem, and other sites supported by yt-dlp.",
|
||||
"app_updates_title": "YTSage Updates",
|
||||
"check_app_updates": "Check for YTSage updates on startup",
|
||||
"check_beta_updates": "Receive Beta Updates"
|
||||
},
|
||||
"tabs": {
|
||||
"cookies": "Login with Cookies",
|
||||
"custom_command": "Custom Command",
|
||||
"proxy": "Proxy",
|
||||
"language": "Language"
|
||||
},
|
||||
"main_ui": {
|
||||
"url_placeholder": "Enter YouTube video or playlist URL",
|
||||
"url_placeholder_generic": "Enter video or playlist URL from any supported site",
|
||||
"settings_tooltip": "Current Path: {path}\nSpeed Limit: {speed_limit}",
|
||||
"speed_limit_none": "None"
|
||||
},
|
||||
"language": {
|
||||
"select_language": "Select Language:",
|
||||
"current_language": "Current language: {language}",
|
||||
|
||||
Reference in New Issue
Block a user