Merge branch 'beta'

This commit is contained in:
oop7
2026-05-14 15:52:50 +03:00
39 changed files with 4239 additions and 3619 deletions
+140 -136
View File
@@ -1,7 +1,7 @@
<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"/>
<img src="branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
<img src="branding/screenshots/main.png" width="800" alt="YTSage Interface"/>
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-1f2937?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/downloads/)
[![PyPI Downloads](https://img.shields.io/pepy/dt/ytsage?color=1f2937&style=for-the-badge&label=downloads&logo=python&logoColor=white)](https://pepy.tech/project/ytsage)
@@ -12,25 +12,25 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/oop7)
**A modern YouTube downloader with a clean PySide6 interface.**
**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)
English: [EN](../README.md)
| Arabic: [AR](README.ar.md)
| German: [DE](README.de.md)
| Spanish: [ES](README.es.md)
| French: [FR](README.fr.md)
| Hindi: [HI](README.hi.md)
| Indonesian: [ID](README.id.md)
| Italian: [IT](README.it.md)
| Japanese: [JA](README.ja.md)
| Polish: [PL](README.pl.md)
| Portuguese: [PT](README.pt.md)
| Russian: [RU](README.ru.md)
| Turkish: [TR](README.tr.md)
| Chinese: [ZH](README.zh.md)
<p align="center">
<a href="#installation">Installation</a> •
@@ -51,10 +51,10 @@ English: [EN](README.md)
YTSage is designed for users who want a **simple yet powerful YouTube downloader**. Unlike other tools, it offers:
- A clean, modern PySide6 interface
- A modern and clean 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
- Optional Generic Mode for sites supported by yt-dlp beyond YouTube
- Cross-platform support and easy installation
<a id="features"></a>
@@ -65,13 +65,14 @@ 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 | 📝 Subtitle Selection & Merging | 🔄 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 |
| 📑 Chapter Integration | ✂️ Video Section Trimming | 🍪 Login with Cookies |
| 📜 Download History | 🔄 Version Channel Selection | 🌐 Proxy Support |
| 🎚️ Audio Format Conversion | 🎬 Video Format Settings | 🆙 Built-in Updater Tab |
| 🌍 Generic Mode | 🔊 Audio Normalization (EBU R128) | 🌍 Localization in 14 Languages |
| 🌍 Generic Mode | 🔊 Audio Normalization (EBU R128) | 🌍 Localized in 14 Languages |
| 💾 Playlist Export | ⚙️ Default Quality & Subtitles | |
</div>
<a id="installation"></a>
@@ -79,14 +80,14 @@ YTSage is designed for users who want a **simple yet powerful YouTube downloader
### ⚡ Quick Install (Recommended)
Install YTSage from PyPI:
Install YTSage via PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 Update an existing installation</summary>
<summary>🔄 Update existing installation</summary>
```bash
pip install --upgrade ytsage
@@ -94,7 +95,7 @@ pip install --upgrade ytsage
</details>
Then launch the app:
Then launch the application:
```bash
ytsage
@@ -108,26 +109,26 @@ ytsage
| Format | Description |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standard installer |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | With FFmpeg bundled |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable version, no installation required |
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standard Installer |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | With FFmpeg Included |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable version, no installation needed |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable with FFmpeg, zipped |
<details>
<summary>🛠️ Installation Steps</summary>
1. **EXE Installer (`.exe`)**: Double-click the file and follow the setup wizard.
2. **Portable Version (`.zip`)**: Extract the archive to your desired location and run `ytsage.exe`.
3. **FFmpeg Bundled**: Choose the FFmpeg bundled versions if you don't have FFmpeg installed on your system.
2. **Portable Version (`.zip`)**: Extract the archive to your desired location and launch `ytsage.exe`.
3. **FFmpeg Included**: Choose versions with FFmpeg included if you don't have FFmpeg installed on your system.
</details>
#### 🐧 Linux
| Format | Description |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian package |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portable |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM package |
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian Package |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, Portable |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM Package |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak Bundle |
<details>
@@ -136,7 +137,7 @@ ytsage
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Fix missing dependencies if needed
```
- **RPM (`.rpm`)**:
```bash
@@ -157,45 +158,45 @@ ytsage
| Format | Description |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Zipped application for Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Disk image installer for Apple Silicon |
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Zipped Application for Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Disk Image Installer for Apple Silicon |
<details>
<summary>🛠️ Installation Steps</summary>
- **DMG Installer (`.dmg`)**: Double-click to mount, then drag `YTSage.app` into your Applications folder.
- **App Archive (`.zip`)**: Extract the zip and move `YTSage.app` to your Applications folder.
- **DMG Installer (`.dmg`)**: Double-click to mount, then drag `YTSage.app` to your Applications folder.
- **Application Archive (`.zip`)**: Extract the zip and move `YTSage.app` to your Applications folder.
*Note: If you encounter an "App is damaged" error, see the [macOS troubleshooting section](#troubleshooting) below.*
*Note: If you encounter an "Application is damaged" error, see the macOS troubleshooting section below.*
</details>
---
<details>
<summary>💻 Manual Installation from Source</summary>
<summary>💻 Manual Source Installation</summary>
### 1. Clone the Repository
### 1. Clone the repository
```bash
git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2. Install Dependencies
### 2. Install dependencies
#### ⚡ With uv
#### ⚡ Using uv
```bash
uv pip install .
```
#### 📦 Or with standard pip
#### 📦 Or using standard pip
```bash
pip install .
```
### 3. Run the Application
### 3. Run the application
```bash
python -m ytsage.main
@@ -209,16 +210,16 @@ python -m ytsage.main
<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>
<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 Settings</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>
<td><img src="branding/screenshots/audio_format.png" alt="Audio Format Selection" width="400"/></td>
<td><img src="branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Audio Format</em></td>
@@ -240,16 +241,16 @@ python -m ytsage.main
- `Video` for video downloads
- `Audio Only` for audio extraction
5. **Choose Options:**
- Enable subtitles & select language
- Enable subtitle merge
- Save thumbnail
- Remove sponsor segments
- Save description
- Embed chapters
- Enable Subtitles and select language
- Enable Subtitle Merging
- Save Thumbnail
- Remove Sponsored Segments
- Save Description
- Embed Chapters
6. **Select Output Directory**
7. **Click "Download"**
> 💡 The default download directory is the user's "Downloads" folder.
> 💡 Default download directory is the user's "Downloads" folder.
</details>
@@ -262,81 +263,84 @@ python -m ytsage.main
4. **Choose desired format/quality**
5. **Click "Download"**
> 💡 The application automatically handles the download queue
> 💡 The application automatically handles the download queue, and you can export playlist entries as `.txt`, `.csv`, `.m3u`, or `.json`.
</details>
<details>
<summary>🌍 Generic Mode for non-YouTube sites</summary>
<summary>🌍 Generic Mode for Non-YouTube Sites</summary>
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.
2. Toggle on `Generic Mode`.
3. Paste a supported video or playlist URL that is not from YouTube.
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.
- Generic mode only changes the URL validation inside YTSage. The target site must still be supported by your installed version of yt-dlp.
- Some sites require cookies, login sessions, proxy, or extra yt-dlp arguments depending on the extractor.
- If a site fails, update yt-dlp from the built-in updater tab first before reporting an issue.
</details>
<details>
<summary>🧰 Media and Download Options</summary>
<summary>🧰 Media & 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
- **Trim Video:** Download only specific parts of a video by specifying time ranges in `HH:MM:SS` format
- **Subtitle Options:** Filter languages and embed subtitles into the video file.
- **Subtitle Merging:** Merge subtitles into the video file for hardcoded/burned-in 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 Sponsored Segments:** Remove sponsored segments from the video using SponsorBlock.
- **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>
<summary>⚙️ Output & 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**.
- **Speed Limiter:** Limit download speed, e.g., `500K` for 500 KB/s.
- **Save Download Path:** Saves the default download path for future downloads. Available in **Download Settings → Download Path**.
- **Default Video Resolution:** Set your preferred default video resolution for auto-selection (e.g., 1080p, 720p). Available in **Download Settings → Default Video Resolution**.
- **Default Subtitle Languages:** Set default subtitle languages for auto-selection (comma-separated, e.g., `en,es`). Available in **Download Settings → Default Subtitle Languages**.
- **Output Filename Format:** Customize the output filename format using variables like `%(title)s`, `%(uploader)s`, `%(playlist_index)s`, and `%(resolution)s`. Available in **Download Settings → Filename Format**.
- **Force Output Format:** Force video downloads into a specific container format like `mp4`, `webm`, or `mkv`. Available in **Download Settings → Output Format Settings**.
- **Audio Format Conversion:** Convert audio-only downloads into 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.
- **Concurrent Connections:** Dramatically increase download speed by downloading files in multiple fragments simultaneously. Available in **Download Settings → General → Concurrent Connections** (Default is 1, maximum recommended is 8-10 to avoid IP throttling).
</details>
<details>
<summary>🌐 Access and Network</summary>
<summary>🌐 Access & Network</summary>
- **Login with Cookies:** Log in 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, then select your browser and optionally a profile.
2. Alternatively, extract cookies manually:
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
a. Export browser cookies using an extension like [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
b. Copy cookies in Netscape format
c. Create a file named `cookies.txt` and paste cookies
d. Select the `cookies.txt` file in the app
- **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**.
- **Proxy Support:** Use a proxy server for downloads, e.g., `http://<proxy-server>:<port>`
- **Generic Mode:** Allows YTSage to analyze and download from non-YouTube sites supported by yt-dlp. Enable from **Download Settings → Generic Mode**.
</details>
<details>
<summary>🛠️ Tools and Maintenance</summary>
<summary>🛠️ Tools & Maintenance</summary>
- **Custom Commands:** Access advanced yt-dlp features via command line arguments
- **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.
- **yt-dlp Updates:** Check for updates and toggle 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 detects paths and versions for FFmpeg, yt-dlp, and Deno from the About dialog.
- **Download History:** View past downloads with thumbnails and statuses from the **History** button.
</details>
@@ -344,7 +348,7 @@ Notes:
<details>
<summary>🌍 Localization</summary>
YTSage supports **14 languages** for worldwide accessibility. Select your preferred language from **Custom Options → Language**.
YTSage supports **14 languages** for global accessibility. Select your preferred language in **Custom Options → Language**.
### Supported Languages
@@ -362,13 +366,13 @@ YTSage supports **14 languages** for worldwide accessibility. Select your prefer
| 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) |
| 🇺🇸 English | [README.md](README.md) | 🇪🇸 Spanish | [README.es.md](README.es.md) |
| 🇸🇦 Arabic | [README.ar.md](README.ar.md) | 🇫🇷 French | [README.fr.md](README.fr.md) |
| 🇩🇪 German | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |
| 🇮🇩 Indonesian | [README.id.md](README.id.md) | 🇮🇹 Italian | [README.it.md](README.it.md) |
| 🇯🇵 Japanese | [README.ja.md](README.ja.md) | 🇵🇱 Polish | [README.pl.md](README.pl.md) |
| 🇧🇷 Portuguese | [README.pt.md](README.pt.md) | 🇷🇺 Russian | [README.ru.md](README.ru.md) |
| 🇹🇷 Turkish | [README.tr.md](README.tr.md) | 🇨🇳 Chinese | [README.zh.md](README.zh.md) |
> 💡 **Want to contribute a translation?** Check out the [Contributing](#contributing) section to help us add more languages!
@@ -380,39 +384,39 @@ YTSage supports **14 languages** for worldwide accessibility. Select your prefer
<details>
<summary>Click to view common issues and solutions</summary>
- **Format table not displaying:** Update yt-dlp to the latest version, and switch to yt-dlp nightly.
- **Download fails:** Check your internet connection and ensure the video is available.
- **Specific download errors:**
- **Private videos:** Use cookie authentication to access private content.
- **Age-restricted content:** Login to YouTube account to view age-restricted videos.
- **Geo-blocked videos:** Consider using a VPN to bypass regional restrictions.
- **Removed/deleted videos:** Video is no longer available on YouTube.
- **Live streams:** Live streams cannot be downloaded; wait for the stream to end.
- **Network errors:** Check your internet connection and try again.
- **Format table not appearing:** Update yt-dlp to latest version and switch to nightly yt-dlp.
- **Download failed:** Check your internet connection and ensure the video is available.
- **Specific Download Errors:**
- **Private Videos:** Use cookie authentication to access private content.
- **Age-Restricted Content:** Log in to your YouTube account to view age-restricted videos.
- **Geo-Blocked Videos:** Consider using a VPN to bypass regional restrictions.
- **Deleted Videos:** Video is no longer available on YouTube.
- **Live Streams:** Live streams cannot be downloaded; wait for the broadcast to end.
- **Network Errors:** Check your internet connection and try again.
- **Invalid URLs:** Ensure the URL is correct and from a supported platform.
- **Premium content:** Requires YouTube Premium membership.
- **Copyright blocks:** Content is blocked due to copyright restrictions.
- **Separate video and audio files after download:** This happens when FFmpeg is missing or not detected. YTSage requires FFmpeg to merge high-quality video and audio streams.
- **Premium Content:** Requires a YouTube Premium subscription.
- **Copyright Blocks:** Content is blocked due to copyright restrictions.
- **Video and Audio Files separate after download:** This happens when FFmpeg is missing or not detected. YTSage requires FFmpeg to merge high-quality video and audio streams.
- **Solution:** Ensure FFmpeg is installed and accessible in your system's PATH. For Windows users, the easiest option is to download the `YTSage-v<version>-ffmpeg.exe` file, which comes bundled with FFmpeg.
---
#### 🛡️ Windows Defender / Antivirus Warning
Some antivirus software may flag the `.exe` files as false positives. This is a **known limitation** of packaged applications.
Some antivirus software may flag `.exe` files as false positives. This is a **known limitation** of packaged applications.
**Why this happens:**
- Antivirus heuristics can misidentify packed executables as suspicious
- Antivirus heuristics can mistakenly identify packaged executables as suspicious.
**Safe alternatives:**
- ✅ **Use pip installation:** `pip install ytsage` (recommended)
- ✅ **Build from source**: by following this [guide](.github/CI_CD_README.md)
- ✅ **Whitelist the application** in your antivirus software
**Safe Alternatives:**
- ✅ **Use pip install:** `pip install ytsage` (Recommended)
- ✅ **Build from Source**: by following this [guide](.github/CI_CD_README.md)
- ✅ **Whitelist the app** in your antivirus software.
#### 🍎 macOS: "App is damaged and cant be opened"
#### 🍎 macOS: "Application is damaged and cannot be opened"
If you see this error on macOS Sonoma or newer, you need to remove the quarantine attribute.
1. **Open Terminal** (you can find it using Spotlight).
1. **Open Terminal** (you can find this using Spotlight).
2. **Type the following command** but **do not** press Enter yet. Make sure to include the space at the end:
```bash
xattr -d com.apple.quarantine
@@ -423,7 +427,7 @@ If you see this error on macOS Sonoma or newer, you need to remove the quarantin
---
#### **Configuration Locations (Advanced)**
#### **Config Locations (Advanced)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
@@ -433,17 +437,17 @@ If you see this error on macOS Sonoma or newer, you need to remove the quarantin
<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.
If YTSage saves you time, please consider sponsoring the project. Sponsoring helps cover development time, testing across all 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.
- Sponsorship link is also available directly in the app via the About dialog.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Contributing
We welcome contributions! Here's how you can help:
We welcome contributions! Heres how you can help:
1. 🍴 Fork the repository
2. 🌿 Create your feature branch:
@@ -462,8 +466,8 @@ We welcome contributions! Here's how you can help:
### 🌍 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`
- Update the relevant localized README file (e.g., `readme-translations/README.fr.md`)
- Keep app strings synced by editing `ytsage/languages/<code>.json`
- If your language is missing, start from `README.md` and create `README.<code>.md`
<details>
@@ -484,11 +488,11 @@ YTSage/
│ │ ├── build-linux.yml # Linux build workflow
│ │ ├── build-macos.yml # macOS build workflow
│ │ │── build-windows.yml # Windows build workflow
| | └── release-all.yml # Master release workflow
| | └── release-all.yml # Release master workflow
│ └── 📄 CI_CD_README.md # CI/CD documentation
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
│ ├── 📁 icons/ # Application icons
│ ├── 📁 screenshots/ # Screenshots for documentation
│ ├── 📁 icons/ # App icons
│ ├── 📁 screenshots/ # Documentation screenshots
│ └── 📁 svg/ # SVG assets
├── 📄 LICENSE # License file
├── 📄 pyproject.toml # Project metadata and dependencies
@@ -496,8 +500,8 @@ YTSage/
├── 📄 requirements.txt # Python dependencies (dev)
└── 📁 ytsage/ # Source package
├── 📁 assets/ # Runtime assets
│ ├── 📁 Icon/ # Application icons
│ └── 📁 sound/ # Audio files
│ ├── 📁 Icon/ # App icons
│ └── 📁 sound/ # Sound files
├── 📁 languages/ # Localization files
│ ├── 📄 ar.json # Arabic translation
│ ├── 📄 de.json # German translation
@@ -510,13 +514,13 @@ YTSage/
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
│ ├── 📄 ytsage_utils.py # Utility functions
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
├── 📁 gui/ # User interface components
├── 📁 gui/ # UI components
│ ├── 📄 __init__.py # GUI package init
│ ├── 📄 ytsage_gui_main.py # Main application window
│ ├── 📄 ytsage_gui_main.py # Main app window
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
├── 📁 utils/ # Utility modules
│ ├── 📄 __init__.py # Utils package init
│ ├── 📄 ytsage_config_manager.py # Configuration management
│ ├── 📄 ytsage_config_manager.py # Config management
│ └── 📄 ytsage_logger.py # Logging utilities
├── 📄 __init__.py # Package entry point
└── 📄 main.py # Main execution script
@@ -551,7 +555,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
<div align="center">
<p>A heartfelt thank you to everyone who has contributed to this project by opening an issue to suggest an improvement or report a bug.</p>
<p>A big thanks to everyone who contributed to this project by opening an issue to suggest an improvement or report a bug.</p>
<table>
<tr class="section"><th colspan="2">Core Components</th></tr>
@@ -565,7 +569,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Runtime for integration with yt-dlp</td>
<td>Runtime for yt-dlp plugins</td>
</tr>
<tr class="section"><th colspan="2">Libraries & Frameworks</th></tr>
<tr>
@@ -582,7 +586,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
</tr>
<tr>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Version & Package Handling</td>
<td>Version/Package Management</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
@@ -609,7 +613,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
## ⚠️ Disclaimer
This tool is for personal use only. Please respect YouTube's terms of service and content creators' rights.
This tool is for personal use only. Please respect YouTube's Terms of Service and content creator rights.
---
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "ytsage"
version = "5.0.3"
version = "5.0.10b"
description = "Modern YouTube downloader with a clean PySide6 interface."
authors = [
{ name = "oop7", email = "oop7_support@proton.me" },
+279 -273
View File
@@ -12,33 +12,33 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/oop7)
**أداة تنزيل حديثة من YouTube بواجهة PySide6 نظيفة.**
قم بتنزيل مقاطع الفيديو بأي جودة، واستخرج الصوت، واجلب الترجمات، والمزيد.
**برنامج تحميل من يوتيوب عصري بواجهة PySide6 أنيقة.**
قم بتحميل الفيديوهات بأي جودة، استخراج الصوت، جلب الترجمات، والمزيد.
### 🌍 اقرأني اللغات
### 🌍 لغات README
الإنجليزية: [EN](../README.md)
| العربية: [AR](README.ar.md)
| الألمانية: [DE](README.de.md)
| الاسبانية: [ES](README.es.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)
| الإندونيسية: [ID](README.id.md)
| الإيطالية: [IT](README.it.md)
| اليابانية: [JA](README.ja.md)
| البولندية: [PL](README.pl.md)
| البرتغالية: [PT](README.pt.md)
| Русский: [RU](README.ru.md)
| الروسية: [RU](README.ru.md)
| التركية: [TR](README.tr.md)
| 中文: [ZH](README.zh.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="#troubleshooting">استكشاف الأخطاء</a> •
<a href="#sponsor">الدعم</a> •
<a href="#contributing">المساهمة</a>
</p>
@@ -49,13 +49,13 @@
<a id="why-ytsage"></a>
## ❓ لماذا YTSage؟
تم تصميم YTSage للمستخدمين الذين يريدون **برنامج تنزيل YouTube بسيطًا وقويًا**. على عكس الأدوات الأخرى، فهو يقدم:
تم تصميم YTSage للمستخدمين الذين يريدون **أداة تحميل يوتيوب بسيطة لكن قوية**. على عكس الأدوات الأخرى، فإنه يوفر:
- واجهة PySide6 نظيفة وحديثة
- التنزيلات بنقرة واحدة للفيديو والصوت والترجمات
- ميزات متقدمة مثل SponsorBlock ودمج الترجمة واختيار قائمة التشغيل
- الوضع العام الاختياري للمواقع التي تدعم yt-dlp خارج YouTube
- دعم عبر الأنظمة الأساسية وسهولة التثبيت
- واجهة PySide6 عصرية ونظيفة
- تحميل بنقرة واحدة للفيديو والصوت والترجمات
- ميزات متقدمة مثل SponsorBlock، دمج الترجمات، واختيار قوائم التشغيل
- وضع عام (Generic Mode) اختياري للمواقع التي يدعمها yt-dlp بخلاف يوتيوب
- دعم منصات متعددة وتثبيت سهل
<a id="features"></a>
## ✨ المميزات
@@ -63,30 +63,31 @@
<div align="center">
| الميزات الأساسية | الميزات المتقدمة | ميزات إضافية |
|-----------------------------------|--------------------------------------------------------|-----|
| 🎥 تنسيق الجدول | 🚫 تكامل SponsorBlock | 🎞️ عرض FPS/HDR |
| 🎵 استخراج الصوت | 📝 تحديد ودمج الترجمة المتعددة | 🔄 التحديث التلقائي yt-dlp |
| ✨ واجهة مستخدم بسيطة | 💾 حفظ الوصف والصورة المصغرة | 🛠️ كشف FFmpeg/yt-dlp/Deno |
| 📋 دعم قائمة التشغيل والمحدد | 🚀 محدد السرعة | ⚙️ أوامر مخصصة |
| 📑 تضمين الفصول | ✂️ تقليم أقسام الفيديو | 🍪 تسجيل الدخول باستخدام ملفات تعريف الارتباط |
| 📜 تحميل التاريخ | 🔄 إطلاق اختيار القناة | 🌐 دعم الوكيل |
| 🎚️ تحويل تنسيق الصوت | 🎬 إعدادات تنسيق الفيديو | 🆙 علامة تبويب التحديث المدمجة |
| 🌍 الوضع العام | 🔊 تسوية الصوت (EBU R128) | 🌍 التعريب بـ 14 لغة |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 جدول الصيغ | 🚫 تكامل SponsorBlock | 🎞️ عرض FPS/HDR |
| 🎵 استخراج الصوت | 📝 اختيار ودمج الترجمات | 🔄 تحديث تلقائي لـ yt-dlp |
| ✨ واجهة مستخدم بسيطة | 💾 حفظ الوصف والصورة المصغرة | 🛠️ اكتشاف FFmpeg/yt-dlp/Deno |
| 📋 دعم ومحدد قوائم التشغيل | 🚀 محدد السرعة | ⚙️ أوامر مخصصة |
| 📑 دمج الفصول | ✂️ قص أجزاء الفيديو | 🍪 تسجيل الدخول بالكوكيز |
| 📜 سجل التحميلات | 🔄 اختيار قناة الإصدار | 🌐 دعم البروكسي |
| 🎚️ تحويل صيغ الصوت | 🎬 إعدادات صيغ الفيديو | 🆙 تبويب تحديث مدمج |
| 🌍 الوضع العام | 🔊 تطبيع الصوت (EBU R128) | 🌍 دعم 14 لغة |
| 💾 تصدير قوائم التشغيل | ⚙️ الجودة والترجمات الافتراضية | |
</div>
<a id="installation"></a>
## 🚀التركيب
## 🚀 التثبيت
### ⚡ التثبيت السريع (موصى به)
تثبيت YTSage من PyPI:
تثبيت YTSage عبر PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 تحديث التثبيت الحالي</summary>
<summary>🔄 تحديث نسخة مثبتة</summary>
```bash
pip install --upgrade ytsage
@@ -100,73 +101,73 @@ pip install --upgrade ytsage
ytsage
```
### 📦 الملفات التنفيذية المعدة مسبقًا
### 📦 حزم جاهزة للتشغيل
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 تحميل أحدث إصدار](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 ويندوز
#### 🪟 Windows
| تنسيق | الوصف |
|--------|------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | المثبت القياسي |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | مع FFmpeg المجمعة |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | نسخة محمولة، لا تحتاج إلى تثبيت |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | محمول مع FFmpeg، مضغوط |
| الصيغة | الوصف |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | مثبت قياسي |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | مع FFmpeg مدمج |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | نسخة محمولة، لا تحتاج لتثبيت |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | محمولة مع FFmpeg، مضغوطة |
<details>
<summary>🛠️ خطوات التثبيت</summary>
1. **مثبت EXE (`.exe`)**: انقر نقرًا مزدوجًا فوق الملف واتبع معالج الإعداد.
2. **النسخة المحمولة (`.zip`)**: قم باستخراج الأرشيف إلى الموقع المطلوب وتشغيل `ytsage.exe`.
3. **FFmpeg Bundled**: اختر إصدارات FFmpeg المجمعة إذا لم يكن FFmpeg مثبتًا على نظامك.
1. **مثبت EXE (`.exe`)**: انقر نقرًا مزدوجًا على الملف واتبع معالج التثبيت.
2. **النسخة المحمولة (`.zip`)**: استخرج الملف في أي مكان وشغل `ytsage.exe`.
3. **FFmpeg المدمج**: اختر النسخة التي تحتوي على FFmpeg إذا لم يكن مثبتًا على نظامك.
</details>
#### 🐧 لينكس
#### 🐧 Linux
| تنسيق | الوصف |
|--------|------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | حزمة دبيان |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | صورة التطبيق المحمولة |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | حزمة دورة في الدقيقة |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | حزمة فلاتباك |
| الصيغة | الوصف |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | حزمة Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage، محمولة |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | حزمة RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak Bundle |
<details>
<summary>🛠️ خطوات التثبيت</summary>
- **ديب (`.deb`)**:
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # لإصلاح الاعتمادات الناقصة إذا لزم الأمر
```
- **عدد الدورات في الدقيقة (`.rpm`)**:
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
- **صورة التطبيق (`.AppImage`)**:
- **AppImage (`.AppImage`)**:
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: اتبع التعليمات الموجودة على Flathub أو قم بتشغيل:
- **Flatpak**: اتبع التعليمات على Flathub أو شغل:
```bash
flatpak install flathub io.github.oop7.ytsage
```
</details>
#### 🍎 ماك
#### 🍎 macOS
| تنسيق | الوصف |
|--------|------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | تطبيق مضغوط لأبل سيليكون |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | مثبت صورة القرص لـ Apple Silicon |
| الصيغة | الوصف |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | تطبيق مضغوط لـ Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | صورة قرص لـ Apple Silicon |
<details>
<summary>🛠️ خطوات التثبيت</summary>
- **مثبت DMG (`.dmg`)**: انقر نقرًا مزدوجًا للتثبيت، ثم اسحب `YTSage.app` إلى مجلد التطبيقات.
- **أرشيف التطبيقات (`.zip`)**: استخرج الملف المضغوط وانقل `YTSage.app` إلى مجلد التطبيقات.
- **مثبت DMG (`.dmg`)**: انقر نقرًا مزدوجًا لفتح القرص، ثم اسحب `YTSage.app` إلى مجلد Applications.
- **تطبيق مضغوط (`.zip`)**: استخرج الملف وانقل `YTSage.app` إلى مجلد Applications.
*ملاحظة: إذا واجهت خطأ "التطبيق تالف"، راجع [macOS troubleshooting section](#troubleshooting) أدناه.*
*ملاحظة: إذا واجهت خطأ "التطبيق تالف"، راجع قسم استكشاف الأخطاء لنظام macOS أدناه.*
</details>
---
@@ -174,28 +175,28 @@ ytsage
<details>
<summary>💻 التثبيت اليدوي من المصدر</summary>
### 1. استنساخ المستودع
### 1. نسخ المستودع
```bash
git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2. تثبيت التبعيات
### 2. تثبيت الاعتمادات
#### ⚡ مع الأشعة فوق البنفسجية
#### ⚡ باستخدام uv
```bash
uv pip install .
```
#### 📦 أو بالنقطة القياسية
#### 📦 أو باستخدام pip العادي
```bash
pip install .
```
### 3. قم بتشغيل التطبيق
### 3. تشغيل التطبيق
```bash
python -m ytsage.main
@@ -209,325 +210,329 @@ python -m ytsage.main
<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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="إعدادات التحميل" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="تحميل قوائم التشغيل" width="400"/></td>
</tr>
<tr>
<td align="center"><em>إعدادات التحميل</em></td>
<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>
<td><img src="../branding/screenshots/audio_format.png" alt="اختيار صيغة الصوت" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="خيارات مخصصة" width="400"/></td>
</tr>
<tr>
<td align="center"><em>تنسيق الصوت</em></td>
<td align="center"><em>صيغة الصوت</em></td>
<td align="center"><em>خيارات مخصصة</em></td>
</tr>
</table>
</div><a id="usage"></a>
</div>
<a id="usage"></a>
## 📖 الاستخدام
<details>
<summary>🎯 الاستخدام الأساسي</summary>
1. ** إطلاق YTSage **
2. **الصق عنوان URL لموقع YouTube** (أو استخدم الزر "لصق عنوان URL")
3. **انقر على "تحليل"**
4. **حدد التنسيق:**
- `Video` لتنزيل الفيديو
- `Audio Only` لاستخراج الصوت
1. **شغل YTSage**
2. **الصق رابط يوتيوب** (أو استخدم زر "Paste URL")
3. **اضغط على "Analyze"**
4. **اختر الصيغة:**
- `Video` للتحميلات المرئية
- `Audio Only` لاستخراج الصوت فقط
5. **اختر الخيارات:**
- تمكين الترجمة واختيار اللغة
- تمكين دمج الترجمة
- تفعيل الترجمات واختيار اللغة
- تفعيل دمج الترجمات
- حفظ الصورة المصغرة
- إزالة شرائح الراعي
- حذف المقاطع الإعلانية (Sponsor segments)
- حفظ الوصف
- تضمين الفصول
6. **حدد دليل المخرجات**
7. **انقر على "تنزيل"**
- دمج الفصول (Chapters)
6. **اختر مجلد الحفظ**
7. **اضغط على "Download"**
> 💡 دليل التنزيل الافتراضي هو مجلد "التنزيلات" الخاص بالمستخدم.
> 💡 مجلد التحميل الافتراضي هو مجلد "Downloads" للمستخدم.
</details>
<details>
<summary>📋 تنزيل قائمة التشغيل</summary>
<summary>📋 تحميل قائمة تشغيل (Playlist)</summary>
1. **لصق عنوان URL لقائمة التشغيل**
2. **انقر على "تحليل"**
3. **حدد مقاطع الفيديو من محدد قائمة التشغيل (اختياري، الإعداد الافتراضي هو الكل)**
4. **اختر التنسيق/الجودة المطلوبة**
5. **انقر على "تنزيل"**
1. **الصق رابط قائمة التشغيل**
2. **اضغط على "Analyze"**
3. **اختر الفيديوهات من محدد القائمة (اختياري، يتم اختيار الكل تلقائيًا)**
4. **اختر الصيغة/الجودة المطلوبة**
5. **اضغط على "Download"**
> 💡 يتعامل التطبيق تلقائيًا مع قائمة انتظار التنزيل
> 💡 التطبيق يتعامل مع طابور التحميل تلقائيًا، ويمكنك تصدير مدخلات القائمة كملفات `.txt` أو `.csv` أو `.m3u` أو `.json`.
</details>
<details>
<summary>🌍 الوضع العام للمواقع غير التابعة لليوتيوب</summary>
<summary>🌍 الوضع العام للمواقع غير يوتيوب</summary>
استخدم الوضع العام عندما تريد أن يقبل YTSage عناوين URL من المواقع التي يدعمها yt-dlp، مثل Dailymotion وCBC Gem وTikTok وغيرها.
استخدم الوضع العام (Generic Mode) عندما تريد أن يقبل YTSage روابط من المواقع التي يدعمها yt-dlp، مثل Dailymotion و CBC Gem و TikTok وغيرها.
كيفية استخدامه:
كيفية الاستخدام:
1. افتح `Download Settings`.
2. تفعيل `Generic Mode`.
3. الصق عنوان URL لفيديو أو قائمة تشغيل مدعومة غير تابعة لـ YouTube.
2. فعل `Generic Mode`.
3. الصق رابط فيديو أو قائمة تشغيل مدعومة غير يوتيوب.
4. اضغط على `Analyze`.
5. اختر التنسيق وقم بتنزيله كالمعتاد.
5. اختر الصيغة وحمل كالمعتاد.
ملاحظات:
- الوضع العام يغير فقط التحقق من صحة عنوان URL داخل YTSage. يجب أن يظل الموقع المستهدف مدعومًا بإصدار yt-dlp المثبت لديك.
- تتطلب بعض المواقع ملفات تعريف الارتباط، أو جلسة تسجيل دخول، أو وكيلًا، أو وسائط yt-dlp إضافية اعتمادًا على المستخرج.
- إذا فشل أحد المواقع، فقم بتحديث yt-dlp أولاً من علامة تبويب المحدث المضمنة قبل الإبلاغ عن المشكلة.
- الوضع العام يغير فقط التحقق من الرابط داخل YTSage. يجب أن يكون الموقع مدعومًا من نسخة yt-dlp المثبتة لديك.
- بعض المواقع تتطلب كوكيز، تسجيل دخول، بروكسي أو وسائط yt-dlp إضافية حسب نوع الموقع.
- إذا فشل موقع ما، حدث yt-dlp أولاً من تبويب التحديث المدمج قبل الإبلاغ عن المشكلة.
</details>
<details>
<summary>🧰 خيارات الوسائط والتنزيل</summary>
<summary>🧰 خيارات الميديا والتحميل</summary>
- **خيارات الترجمة:** تصفية اللغات وتضمين الترجمة في ملف الفيديو
- **دمج الترجمة:** دمج الترجمات في ملف الفيديو للحصول على ترجمات مضمنة
- **حفظ الوصف:** احفظ وصف الفيديو كملف نصي
- **حفظ الصورة المصغرة:** احفظ الصورة المصغرة للفيديو كملف صورة
- **تضمين الفصول:** تضمين علامات الفصل كبيانات وصفية لمشغلات الفيديو المتوافقة
- **إزالة شرائح الجهات الراعية:** قم بإزالة شرائح الجهات الراعية من الفيديو باستخدام SponsorBlock
- **قص الفيديو:** قم بتنزيل أجزاء محددة فقط من الفيديو عن طريق تحديد نطاقات زمنية بتنسيق `HH:MM:SS`
- **خيارات الترجمة:** تصفية اللغات وتضمين الترجمات في ملف الفيديو.
- **دمج الترجمات:** دمج الترجمات داخل ملف الفيديو لتكون ترجمة مدمجة (Hardcoded).
- **حفظ الوصف:** حفظ وصف الفيديو كملف نصي.
- **حفظ الصورة المصغرة:** حفظ صورة الفيديو كملف صورة.
- **دمج الفصول:** تضمين علامات الفصول كبيانات وصفية لمشغلات الفيديو المتوافقة.
- **حذف مقاطع الرعاة:** حذف الأجزاء الإعلانية من الفيديو باستخدام SponsorBlock.
- **قص الفيديو:** تحميل أجزاء محددة فقط من الفيديو عن طريق تحديد أوقات البداية والنهاية بصيغة `HH:MM:SS`.
</details>
<details>
<summary>⚙️ إعدادات الإخراج والملف</summary>
<summary>⚙️ إعدادات الإخراج والملفات</summary>
- **محدد السرعة:** حدد سرعة التنزيل، على سبيل المثال `500K` لـ 500 كيلو بايت/ثانية
- **حفظ مسار التنزيل:** احفظ مسار التنزيل الافتراضي للتنزيلات المستقبلية. متوفر في **إعدادات التنزيل → مسار التنزيل**.
- **تنسيق اسم ملف الإخراج:** قم بتخصيص تنسيق اسم ملف الإخراج باستخدام متغيرات مثل `%(title)s`، `%(uploader)s`، و`%(resolution)s`. متوفر في **إعدادات التنزيل → تنسيق اسم الملف**.
- **تنسيق الإخراج الإجباري:** فرض تنزيلات الفيديو في تنسيق حاوية محدد مثل `mp4` أو `webm` أو `mkv`. متوفر في **إعدادات التنزيل ← إعدادات تنسيق الإخراج**.
- **تحويل تنسيق الصوت:** تحويل التنزيلات الصوتية فقط إلى التنسيقات المفضلة مثل `AAC`، `MP3`، `FLAC`، `WAV`، `Opus`، `M4A`، `Vorbis` أو `Best`. متوفر في **إعدادات التنزيل → إعدادات تنسيق الصوت**.
- **تطبيع الصوت:** توحيد مستوى الصوت للتنزيلات الصوتية فقط باستخدام EBU R128.
- **محدد السرعة:** تحديد سرعة التحميل، مثلاً `500K` لـ 500 كيلوبايت/ثانية.
- **حفظ مسار التحميل:** يحفظ مسار التحميل الافتراضي للتحميلات المستقبلية. متاح في **Download Settings → Download Path**.
- **دقة الفيديو الافتراضية:** حدد دقة الفيديو المفضلة للاختيار التلقائي (مثل 1080p أو 720p). متاح في **Download Settings → Default Video Resolution**.
- **لغات الترجمة الافتراضية:** حدد لغات الترجمة للاختيار التلقائي (مفصولة بفواصل، مثل `ar,en`). متاح في **Download Settings → Default Subtitle Languages**.
- **صيغة اسم الملف:** تخصيص صيغة اسم الملف باستخدام متغيرات مثل `%(title)s` و `%(uploader)s` و `%(playlist_index)s` و `%(resolution)s`. متاح في **Download Settings → Filename Format**.
- **فرض صيغة الإخراج:** فرض تحميل الفيديو بصيغة محددة مثل `mp4` أو `webm` أو `mkv`. متاح في **Download Settings → Output Format Settings**.
- **تحويل صيغ الصوت:** تحويل تحميلات الصوت فقط للصيغ المفضلة مثل `AAC` أو `MP3` أو `FLAC` أو `WAV` أو `Opus` أو `M4A` أو `Vorbis` أو `Best`. متاح في **Download Settings → Audio Format Settings**.
- **تطبيع الصوت:** توحيد مستوى الصوت لتحميلات الصوت فقط باستخدام EBU R128.
- **الاتصالات المتزامنة:** زيادة سرعة التحميل بشكل كبير عن طريق تحميل الملف في أجزاء متعددة في وقت واحد. متاح في **Download Settings → General → Concurrent Connections** (القيمة الافتراضية 1، الموصى به 8-10 لتجنب حظر IP).
</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. قم بتمكينه من **إعدادات التنزيل → الوضع العام**.
- **تسجيل الدخول بالكوكيز:** سجل الدخول ليوتيوب باستخدام الكوكيز للوصول للمحتوى الخاص.
كيفية الاستخدام:
1. **موصى به:** استخدم خيار `Extract cookies from browser` المدمج في التطبيق، ثم اختر المتصفح والملف الشخصي.
2. بدلاً من ذلك، استخرج الكوكيز يدويًا:
أ. صدر الكوكيز من متصفحك باستخدام إضافة مثل [cookie-editor](https://github.com/moustachauve/cookie-editor)
ب. انسخ الكوكيز بصيغة Netscape
ج. أنشئ ملفًا باسم `cookies.txt` والصق الكوكيز فيه
د. اختر ملف `cookies.txt` في التطبيق
- **دعم البروكسي:** استخدم خادم بروكسي للتحميلات، مثلاً `http://<proxy-server>:<port>`
- **الوضع العام:** يسمح لـ YTSage بتحليل والتحميل من المواقع غير يوتيوب التي يدعمها yt-dlp. فعله من **Download Settings → Generic Mode**.
</details>
<details>
<summary>🛠️ الأدوات والصيانة</summary>
- **الأوامر المخصصة:** الوصول إلى ميزات yt-dlp المتقدمة عبر وسيطات سطر الأوامر
- **علامة تبويب التحديث:** إدارة أدوات التحديث المضمنة من مكان واحد في الخيارات المخصصة:
- **تحديثات yt-dlp:** تحقق من وجود تحديثات وقم بالتبديل بين قنوات الإصدار الثابت وقنوات الإصدار الليلي
- **مدقق إصدار FFmpeg:** تحقق من إصدار FFmpeg الخاص بك وافتح أدلة التثبيت
- **تحديثات Deno:** التحقق من وقت تشغيل Deno وتحديثه
- **اكتشاف FFmpeg/yt-dlp/Deno:** اكتشاف مسارات وإصدارات FFmpeg وyt-dlp وDeno تلقائيًا من مربع الحوار "حول".
- **سجل التنزيلات:** اعرض التنزيلات السابقة باستخدام الصور المصغرة والحالات من زر **السجل**.
- **أوامر مخصصة:** الوصول لميزات yt-dlp المتقدمة عبر وسائط موجه الأوامر.
- **تبويب التحديث:** إدارة أدوات التحديث من مكان واحد في الخيارات المخصصة:
- **تحديثات yt-dlp:** التحقق من التحديثات والتبديل بين القناة المستقرة (Stable) والليلية (Nightly).
- **فاحص نسخة FFmpeg:** التحقق من نسخة FFmpeg وعرض أدلة التثبيت.
- **تحديثات Deno:** التحقق وتحديث محرك Deno.
- **اكتشاف FFmpeg/yt-dlp/Deno:** يكتشف تلقائيًا المسارات والنسخ لـ FFmpeg و yt-dlp و Deno من نافذة "About".
- **سجل التحميلات:** عرض التحميلات السابقة مع الصور المصغرة والحالة من زر **History**.
</details>
<details>
<summary>🌍 التعريب</summary>
<summary>🌍 الترجمة</summary>
يدعم YTSage **14 لغة** لسهولة الوصول إليها في جميع أنحاء العالم. اختر لغتك المفضلة من **خيارات مخصصة → اللغة**.
يدعم YTSage **14 لغة** للوصول العالمي. اختر لغتك المفضلة من **Custom Options → Language**.
### اللغات المدعومة
| اللغة | الكود | اللغة | الكود |
|----------|------|---------|------|
| 🇺🇸 إنجليزي | `en` | 🇪🇸 الاسبانية | `es` |
| 🇸🇦 عربي | `ar` | 🇫🇷 فرنسي | `fr` |
| 🇩🇪 ألماني | `de` | 🇮🇳 هندي | `hi` |
| 🇮🇩 إندونيسي | `id` | 🇮🇹 إيطالي | `it` |
| 🇯🇵 ياباني | `ja` | 🇵🇱 بولندية | `pl` |
| 🇧🇷 برتغالية | `pt` | 🇷🇺 روسي | `ru` |
| 🇹🇷 تركي | `tr` | 🇨🇳 صيني | `zh` |
| اللغة | الرمز | اللغة | الرمز |
|----------|------|----------|------|
| 🇺🇸 الإنجليزية | `en` | 🇪🇸 الإسبانية | `es` |
| 🇸🇦 العربية | `ar` | 🇫🇷 الفرنسية | `fr` |
| 🇩🇪 الألمانية | `de` | 🇮🇳 الهندية | `hi` |
| 🇮🇩 الإندونيسية | `id` | 🇮🇹 الإيطالية | `it` |
| 🇯🇵 اليابانية | `ja` | 🇵🇱 البولندية | `pl` |
| 🇧🇷 البرتغالية | `pt` | 🇷🇺 الروسية | `ru` |
| 🇹🇷 التركية | `tr` | 🇨🇳 الصينية | `zh` |
### ترجمات README
### تراجم 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) |
| اللغة | الملف | اللغة | الملف |
|----------|------|----------|------|
| 🇺🇸 الإنجليزية | [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) لمساعدتنا في إضافة المزيد من اللغات!
> 💡 **هل تريد المساعدة في الترجمة؟** راجع قسم [المساهمة](#contributing) لمساعدتنا في إضافة المزيد من اللغات!
</details>
<a id="troubleshooting"></a>
## 🛠️ استكشاف الأخطاء وإصلاحها
## 🛠️ استكشاف الأخطاء
<details>
<summary>انقر لعرض المشكلات والحلول الشائعة</summary>
<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.
- **جدول الصيغ لا يظهر:** حدث yt-dlp لأحدث نسخة وانتقل للقناة الليلية (Nightly).
- **فشل التحميل:** تحقق من اتصال الإنترنت وتأكد أن الفيديو متاح.
- **أخطاء تحميل محددة:**
- **فيديوهات خاصة:** استخدم الكوكيز للوصول للمحتوى الخاص.
- **محتوى مقيد بالعمر:** سجل دخولك ليوتيوب لمشاهدة الفيديوهات المقيدة.
- **فيديوهات محظورة جغرافيًا:** استخدم VPN لتجاوز القيود الإقليمية.
- **فيديوهات محذوفة:** الفيديو لم يعد متاحًا على يوتيوب.
- **البث المباشر (Live):** لا يمكن تحميل البث المباشر أثناء عرضه؛ انتظر حتى ينتهي.
- **أخطاء الشبكة:** تحقق من اتصالك وحاول مرة أخرى.
- **روابط غير صالحة:** تأكد من صحة الرابط وأنه من منصة مدعومة.
- **محتوى Premium:** يتطلب اشتراك يوتيوب بريميوم.
- **حظر حقوق الملكية:** المحتوى محظور بسبب قيود حقوق النشر.
- **ملفات الفيديو والصوت منفصلة بعد التحميل:** يحدث هذا عند فقدان FFmpeg أو عدم اكتشافه. يتطلب YTSage برنامج FFmpeg لدمج مسارات الفيديو والصوت عالية الجودة.
- **الحل:** تأكد من تثبيت FFmpeg وإضافته لـ PATH النظام. لمستخدمي ويندوز، الخيار الأسهل هو تحميل ملف `YTSage-v<version>-ffmpeg.exe` الذي يأتي مع FFmpeg مدمجًا.
---
#### 🛡️ تحذير Windows Defender / مضاد الفيروسات
#### 🛡️ تنبيه Windows Defender / الأنتي فيروس
قد تقوم بعض برامج مكافحة الفيروسات بوضع علامة على الملفات `.exe` على أنها ملفات إيجابية كاذبة. هذا **قيد معروف** للتطبيقات المجمعة.
قد تصنف بعض برامج الحماية ملفات `.exe` كبرمجيات ضارة (False Positive). هذا **عيب معروف** في التطبيقات المحزمة.
**لماذا يحدث هذا:**
- يمكن للاستدلالات المضادة للفيروسات أن تخطئ في تعريف الملفات التنفيذية المعبأة على أنها مشبوهة
- أساليب الكشف في مضادات الفيروسات قد تعتبر الملفات المحزمة مشبوهة خطأً.
**البدائل الآمنة:**
- ✅ **استخدم تثبيت النقطة:** `pip install ytsage` (مستحسن)
- ✅ **البناء من المصدر**: باتباع هذا [guide](../.github/CI_CD_README.md)
- ✅ **أدرج التطبيق في القائمة البيضاء** في برنامج مكافحة الفيروسات لديك
- ✅ **استخدم تثبيت pip:** `pip install ytsage` (موصى به)
- ✅ **البناء من المصدر:** باتباع هذا [الدليل](.github/CI_CD_README.md)
- ✅ **إضافة التطبيق للقائمة البيضاء** في برنامج الحماية لديك.
#### 🍎 macOS: "التطبيق تالف ولا يمكن فتحه"
إذا رأيت هذا الخطأ على نظام التشغيل macOS Sonoma أو الإصدارات الأحدث، فستحتاج إلى إزالة سمة العزل.
#### 🍎 macOS: "The app is damaged and cant be opened"
إذا واجهت هذا الخطأ على macOS Sonoma أو أحدث، يجب عليك إزالة سمة الحجر الصحي.
1. **افتح الوحدة الطرفية** (يمكنك العثور عليها باستخدام Spotlight).
2. **اكتب الأمر التالي** لكن **لا** تضغط على Enter بعد. تأكد من تضمين المساحة في النهاية:
1. **افتح الـ Terminal** (يمكنك البحث عنه عبر Spotlight).
2. **اكتب الأمر التالي** ولكن **لا تضغط** Enter بعد. تأكد من وجود مسافة في النهاية:
```bash
xattr -d com.apple.quarantine
```
3. **اسحب الملف `YTSage.app`** من نافذة Finder وأفلته مباشرةً في نافذة الوحدة الطرفية. سيؤدي هذا تلقائيًا إلى لصق مسار الملف الصحيح.
4. **اضغط على Enter** لتشغيل الأمر.
5. **حاول فتح YTSage.app مرة أخرى.** من المفترض الآن أن يتم تشغيله بشكل صحيح.
3. **اسحب ملف `YTSage.app`** من نافذة Finder وأفلته في نافذة الـ Terminal. سيقوم بلصق المسار الصحيح تلقائيًا.
4. **اضغط Enter** لتنفيذ الأمر.
5. **حاول فتح YTSage.app مجددًا.** يجب أن يعمل الآن بشكل صحيح.
---
#### **مواقع التكوين (متقدمة)**
- **ويندوز:** `%LOCALAPPDATA%\YTSage`
- **ماك:** `~/Library/Application Support/YTSage`
- **لينكس:** `~/.local/share/YTSage`
#### **مواقع الإعدادات (للمتقدمين)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
## 💖 الراعي
## 💖 الدعم
إذا كان YTSage يوفر عليك الوقت، ففكر في رعاية المشروع. تساعد الرعاية في تغطية وقت التطوير والاختبار عبر الأنظمة الأساسية والتحسينات المستقبلية.
إذا وفر لك YTSage الوقت، يرجى التفكير في دعم المشروع. يساعد الدعم في تغطية وقت التطوير، الاختبار على المنصات المختلفة، والتحسينات المستقبلية.
- رعاة GitHub: https://github.com/sponsors/oop7
- رابط الراعي متاح أيضًا مباشرة داخل التطبيق من مربع الحوار "حول".
- GitHub Sponsors: https://github.com/sponsors/oop7
- رابط الدعم متاح أيضًا داخل التطبيق عبر نافذة "About".
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 المساهمة
نحن نرحب بالمساهمات! إليك كيف يمكنك المساعدة:
نرحب بالمساهمات! إليك كيف يمكنك المساعدة:
1. 🍴 شوكة المستودع
2. 🌿 قم بإنشاء فرع الميزات الخاص بك:
1. 🍴 عمل Fork للمستودع
2. 🌿 إنشاء فرع جديد للميزة:
```bash
git checkout -b feature/AmazingFeature
```
3. 💾 قم بإجراء التغييرات:
3. 💾 حفظ التغييرات:
```bash
git commit -m 'Add some AmazingFeature'
```
4. 📤 اضغط على الفرع:
4. 📤 رفع التغييرات:
```bash
git push origin feature/AmazingFeature
```
5. 🔄 افتح طلب السحب
5. 🔄 فتح Pull Request
### 🌍 المساهمة بالترجمات
### 🌍 المساهمة في الترجمة
- قم بتحديث ملف README المترجم المطابق (على سبيل المثال `README.es.md`)
- حافظ على مزامنة سلاسل التطبيق عن طريق تحرير `ytsage/languages/<code>.json`
- إذا كانت لغتك مفقودة، ابدأ من `README.md` وأنشئ `README.<code>.md`
- حدث ملف README المترجم (مثل `readme-translations/README.ar.md`)
- حافظ على تزامن نصوص التطبيق بتعديل `ytsage/languages/<code>.json`
- إذا كانت لغتك غير موجودة، ابدأ من `README.md` وأنشئ ملفًا جديدًا باسم `README.<code>.md`
<details>
<summary>📂 هيكل المشروع</summary>
## YTSage - هيكل المشروع
يصف هذا المستند بنية المجلد المنظم لـ 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
├── 📁 .github/ # إعدادات GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # نماذج التذاكر
│ │ └── 🐛-bug-report.md # نموذج تقرير الأخطاء
│ ├─── 📁 workflows/ # سير عمل GitHub Actions
│ │ ├── build-linux.yml # بناء نسخة لينكس
│ │ ├── build-macos.yml # بناء نسخة ماك
│ │ │── build-windows.yml # بناء نسخة ويندوز
| | └── release-all.yml # سير عمل الإصدارات
│ └── 📄 CI_CD_README.md # توثيق CI/CD
├── 📁 branding/ # أصول العلامة التجارية (لقطات شاشة، SVG)
│ ├── 📁 icons/ # أيقونات التطبيق
│ ├── 📁 screenshots/ # لقطات شاشة للتوثيق
│ └── 📁 svg/ # أصول بصيغة SVG
├── 📄 LICENSE # ملف الرخصة
├── 📄 pyproject.toml # بيانات المشروع والاعتمادات
├── 📄 README.md # التوثيق الرئيسي
├── 📄 requirements.txt # اعتمادات بايثون (للمطورين)
└── 📁 ytsage/ # مجلد الأكواد المصدرية
├── 📁 assets/ # الأصول اللازمة للتشغيل
│ ├── 📁 Icon/ # أيقونات التطبيق
│ └── 📁 sound/ # ملفات صوتية
├── 📁 languages/ # ملفات الترجمة
│ ├── 📄 ar.json # الترجمة العربية
│ ├── 📄 de.json # الترجمة الألمانية
│ ├── 📄 en.json # الترجمة الإنجليزية
│ └── ... # لغات أخرى
├── 📁 core/ # المنطق البرمجي الأساسي
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # تكامل Deno
│ ├── 📄 ytsage_downloader.py # وظائف التحميل
│ ├── 📄 ytsage_ffmpeg.py # تكامل FFmpeg
│ ├── 📄 ytsage_utils.py # وظائف مساعدة
│ └── 📄 ytsage_yt_dlp.py # تكامل yt-dlp
├── 📁 gui/ # مكونات واجهة المستخدم
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # نافذة التطبيق الرئيسية
│ └── 📁 ytsage_gui_dialogs/ # كلاسات النوافذ الحوارية
├── 📁 utils/ # موديلات مساعدة
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # مدير الإعدادات
│ └── 📄 ytsage_logger.py # أداة تسجيل السجلات
├── 📄 __init__.py # نقطة دخول الحزمة
└── 📄 main.py # سكربت التشغيل الرئيسي
```
</details>
## ⭐️ تاريخ النجوم
## ⭐️ سجل النجوم
<div align="center">
## تاريخ النجوم
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -539,65 +544,66 @@ YTSage/
</div>
## 📜 الترخيص
## 📜 الرخصة
هذا المشروع مرخص بموجب ترخيص MIT - راجع الملف [LICENSE](../LICENSE) للحصول على التفاصيل.
هذا المشروع مرخص بموجب رخصة MIT - راجع ملف [LICENSE](LICENSE) لمزيد من التفاصيل.
## 🙏 شكر وتقدير
<details>
<summary>إظهار الشكر والتقدير</summary>
<summary>عرض الشكر والتقدير</summary>
<div align="center">
<p>شكرًا جزيلًا لكل من ساهم في هذا المشروع من خلال فتح مشكلة لاقتراح تحسين أو الإبلاغ عن خطأ.</p>
<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>
<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>
<td><a href="https://deno.com/">Deno</a></td>
<td>بيئة التشغيل لتكامل yt-dlp</td>
</tr>
<tr class="section"><th colspan="2">المكتبات والأطر</th></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>
<td>إطار عمل الواجهة الرسومية</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/">الوسادة</a></td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>معالجة الصور</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">الطلبات</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>طلبات HTTP</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">التغليف</a></td>
<td>التعامل مع الإصدار والحزمة</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>إدارة الإصدارات والحزم</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">تخفيض السعر</a></td>
<td>عرض تخفيض السعر</td>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>معالجة Markdown</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>التسجيل</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>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 by Universfield</a></td>
<td>صوت التنبيه</td>
</tr>
<tr>
<td><a href="https://github.com/viru185">الفيروس185</a></td>
<td>مساهم الكود</td>
<td><a href="https://github.com/viru185">viru185</a></td>
<td>مساهم بالكود</td>
</tr>
</table>
@@ -605,14 +611,14 @@ YTSage/
</details>
## ⚠️إخلاء المسؤولية
## ⚠️ إخلاء مسؤولية
هذه الأداة للاستخدام الشخصي فقط. يرجى احترام شروط خدمة YouTube وحقوق منشئي المحتوى.
تُستخدم هذه الأداة للاستخدام الشخصي فقط. يرجى احترام شروط خدمة يوتيوب وحقوق منشئي المحتوى.
---
<div align="center">
صُنع باستخدام ❤️ بواسطة [oop7](https://github.com/oop7)
صنع بـ ❤️ بواسطة [oop7](https://github.com/oop7)
</div>
+222 -216
View File
@@ -12,33 +12,33 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
**Ein moderner YouTube-Downloader mit einer eleganten PySide6-Benutzeroberfläche.**
Downloaden Sie Videos in jeder Qualität, extrahieren Sie Audio, rufen Sie Untertitel ab und vieles mehr.
### 🌍 README-Sprachen
Englisch: [EN](../README.md)
| Quelle: [AR](README.ar.md)
| Arabisch: [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)
| Hindi: [HI](README.hi.md)
| Indonesisch: [ID](README.id.md)
| Italienisch: [IT](README.it.md)
| 日本語: [JA](README.ja.md)
| Japanisch: [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)
| Türkisch: [TR](README.tr.md)
| Chinesisch: [ZH](README.zh.md)
<p align="center">
<a href="#installation">Installation</a> •
<a href="#features">Funktionen</a> •
<a href="#usage">Verwendung</a> •
<a href="#usage">Bedienung</a> •
<a href="#screenshots">Screenshots</a> •
<a href="#troubleshooting">Fehlerbehebung</a> •
<a href="#sponsor">Sponsor</a> •
<a href="#sponsor">Sponsoren</a> •
<a href="#contributing">Mitwirken</a>
</p>
@@ -51,10 +51,10 @@ Englisch: [EN](../README.md)
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
- Eine moderne und übersichtliche PySide6-Oberfläche
- 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
- Erweiterte Funktionen wie SponsorBlock, Zusammenführen von Untertiteln und Playlist-Auswahl
- Optionaler generischer Modus (Generic Mode) für von yt-dlp unterstützte Seiten außerhalb von YouTube
- Plattformübergreifende Unterstützung und einfache Installation
<a id="features"></a>
@@ -62,31 +62,32 @@ YTSage wurde für Benutzer entwickelt, die einen **einfachen, aber leistungsstar
<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 |
| Basisfunktionen | Erweiterte Funktionen | Zusätzliche Funktionen |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Formattabelle | 🚫 SponsorBlock-Integration | 🎞️ FPS/HDR-Anzeige |
| 🎵 Audio-Extraktion | 📝 Untertitel-Auswahl & Merging | 🔄 Automatisches yt-dlp Update |
| ✨ Einfache Benutzeroberfläche | 💾 Beschreibung & Thumbnail speichern | 🛠️ FFmpeg/yt-dlp/Deno Erkennung |
| 📋 Playlist-Support & Selector | 🚀 Geschwindigkeitsbegrenzer | ⚙️ Benutzerdefinierte Befehle |
| 📑 Kapitel-Integration | ✂️ Videoabschnitte zuschneiden | 🍪 Cookie-Login |
| 📜 Download-Historie | 🔄 Release-Kanal Auswahl | 🌐 Proxy-Support |
| 🎚️ Audioformat-Konvertierung | 🎬 Videoformat-Einstellungen | 🆙 Integrierter Update-Tab |
| 🌍 Generischer Modus | 🔊 Audio-Normalisierung (EBU R128) | 🌍 In 14 Sprachen lokalisiert |
| 💾 Playlist-Export | ⚙️ Standardqualität & Untertitel | |
</div>
<a id="installation"></a>
## 🚀 Installation
### ⚡ Schnellinstallation (empfohlen)
### ⚡ Schnelle Installation (Empfohlen)
Installieren Sie YTSage von PyPI:
Installieren Sie YTSage über PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄Aktualisieren Sie eine vorhandene Installation</summary>
<summary>🔄 Bestehende Installation aktualisieren</summary>
```bash
pip install --upgrade ytsage
@@ -94,7 +95,7 @@ pip install --upgrade ytsage
</details>
Starten Sie dann die App:
Starten Sie dann die Anwendung:
```bash
ytsage
@@ -102,33 +103,33 @@ ytsage
### 📦 Vorgefertigte ausführbare Dateien
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Neuestes Release herunterladen](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Windows
| Formatieren | Beschreibung |
| Format | Beschreibung |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standardinstallationsprogramm |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Mit FFmpeg gebündelt |
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standard-Installer |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Mit integriertem FFmpeg |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable Version, keine Installation erforderlich |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Tragbar mit FFmpeg, gezippt |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable Version mit FFmpeg, gepackt |
<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.
1. **EXE-Installer (`.exe`)**: Doppelklicken Sie auf die Datei und folgen Sie dem Installationsassistenten.
2. **Portable Version (`.zip`)**: Entpacken Sie das Archiv an den gewünschten Ort und starten Sie `ytsage.exe`.
3. **Integriertes FFmpeg**: Wählen Sie die Versionen mit integriertem FFmpeg, falls FFmpeg nicht bereits auf Ihrem System installiert ist.
</details>
#### 🐧 Linux
| Formatieren | Beschreibung |
| Format | Beschreibung |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian-Paket |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, tragbar |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portabel |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM-Paket |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak-Bundle |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak Bundle |
<details>
<summary>🛠️ Installationsschritte</summary>
@@ -136,7 +137,7 @@ ytsage
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Repariert fehlende Abhängigkeiten, falls nötig
```
- **RPM (`.rpm`)**:
```bash
@@ -147,7 +148,7 @@ ytsage
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: Folgen Sie den Anweisungen auf Flathub oder führen Sie Folgendes aus:
- **Flatpak**: Folgen Sie den Anweisungen auf Flathub oder führen Sie aus:
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -155,26 +156,26 @@ ytsage
#### 🍎 macOS
| Formatieren | Beschreibung |
| Format | Beschreibung |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Gezippte Anwendung für Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Disk-Image-Installationsprogramm für Apple Silicon |
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Gepackte App für Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Disk Image Installer 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.
- **DMG-Installer (`.dmg`)**: Doppelklick zum Mounten, dann `YTSage.app` in den Programme-Ordner ziehen.
- **App-Archiv (`.zip`)**: Zip entpacken und `YTSage.app` in den Programme-Ordner verschieben.
*Hinweis: Wenn Sie auf den Fehler „App ist beschädigt“ stoßen, sehen Sie sich das [macOS troubleshooting section](#troubleshooting) unten an.*
*Hinweis: Wenn Sie die Fehlermeldung "App ist beschädigt" erhalten, lesen Sie bitte den Abschnitt zur Fehlerbehebung für macOS weiter unten.*
</details>
---
<details>
<summary>💻 Manuelle Installation von der Quelle</summary>
<summary>💻 Manuelle Installation aus dem Quellcode</summary>
### 1. Klonen Sie das Repository
### 1. Repository klonen
```bash
git clone https://github.com/oop7/YTSage.git
@@ -183,19 +184,19 @@ cd YTSage
### 2. Abhängigkeiten installieren
#### ⚡ Mit UV
#### ⚡ Mit uv
```bash
uv pip install .
```
#### 📦 Oder mit Standard-Pip
#### 📦 Oder mit Standard-pip
```bash
pip install .
```
### 3. Führen Sie die Anwendung aus
### 3. Anwendung starten
```bash
python -m ytsage.main
@@ -209,46 +210,47 @@ python -m ytsage.main
<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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download-Einstellungen" 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>
<td><img src="../branding/screenshots/audio_format.png" alt="Audioformat-Auswahl" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Benutzerdefinierte Optionen" 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>
</div>
## 📖 Verwendung
<a id="usage"></a>
## 📖 Bedienung
<details>
<summary>🎯 Grundlegende Verwendung</summary>
<summary>🎯 Grundlegende Bedienung</summary>
1. **YTSage starten**
2. **YouTube-URL einfügen** (oder verwenden Sie die Schaltfläche „URL einfügen)
3. **Klicken Sie auf Analysieren**
2. **YouTube-URL einfügen** (oder die Schaltfläche "Paste URL" verwenden)
3. **Auf "Analyze" klicken**
4. **Format auswählen:**
- `Video` für Video-Downloads
- `Audio Only` zur Audioextraktion
- `Audio Only` r Audio-Extraktion
5. **Optionen wählen:**
- Untertitel aktivieren und Sprache auswählen
- Untertitelzusammenführung aktivieren
- Miniaturansicht speichern
- Entfernen Sie Sponsorsegmente
- Untertitel aktivieren & Sprache auswählen
- Untertitel-Merging aktivieren
- Thumbnail speichern
- Sponsoren-Segmente entfernen
- Beschreibung speichern
- Kapitel einbetten
6. **Ausgabeverzeichnis auswählen**
7. **Klicken Sie auf „Herunterladen**
- Kapitel integrieren
6. **Ausgabeverzeichnis wählen**
7. **Auf "Download" klicken**
> 💡 Das Standard-Download-Verzeichnis ist der Ordner „Downloads des Benutzers.
> 💡 Das Standard-Download-Verzeichnis ist der "Downloads"-Ordner des Benutzers.
</details>
@@ -256,94 +258,97 @@ python -m ytsage.main
<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**
2. **Auf "Analyze" klicken**
3. **Videos aus dem Playlist-Selector auswählen (optional, standardmäßig alle)**
4. **Gewünschtes Format/Qualität wählen**
5. **Auf "Download" klicken**
> 💡 Die Anwendung verwaltet die Download-Warteschlange automatisch
> 💡 Die Anwendung verwaltet die Download-Warteschlange automatisch, und Sie können Playlist-Einträge als `.txt`, `.csv`, `.m3u` oder `.json` exportieren.
</details>
<details>
<summary>🌍 Allgemeiner Modus für Nicht-YouTube-Websites</summary>
<summary>🌍 Generischer Modus für Nicht-YouTube-Seiten</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.
Verwenden Sie den generischen Modus (Generic Mode), wenn YTSage URLs von anderen von yt-dlp unterstützten Seiten wie Dailymotion, CBC Gem, TikTok und anderen akzeptieren soll.
So verwenden Sie es:
So verwenden Sie ihn:
1. Öffnen Sie `Download Settings`.
2. Aktivieren Sie `Generic Mode`.
3. Fügen Sie eine unterstützte Nicht-YouTube-Video- oder Playlist-URL ein.
3. Fügen Sie eine unterstützte Video- oder Playlist-URL ein, die nicht von YouTube stammt.
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.
- Der generische Modus ändert nur die URL-Validierung innerhalb von YTSage. Die Zielseite muss weiterhin von Ihrer installierten yt-dlp-Version unterstützt werden.
- Einige Seiten erfordern Cookies, Login, Proxy oder zusätzliche yt-dlp-Argumente je nach Extractor.
- Wenn eine Seite fehlschlägt, aktualisieren Sie zuerst yt-dlp über den integrierten Update-Tab, bevor Sie das Problem melden.
</details>
<details>
<summary>🧰 Medien- und Download-Optionen</summary>
<summary>🧰 Medien- & 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
- **Untertitel-Optionen:** Sprachen filtern und Untertitel in die Videodatei einbetten.
- **Untertitel-Merging:** Mergt Untertitel in die Videodatei für fest eingebrannte (hardcoded) Untertitel.
- **Beschreibung speichern:** Speichert die Videobeschreibung als Textdatei.
- **Thumbnail speichern:** Speichert das Video-Thumbnail als Bilddatei.
- **Kapitel integrieren:** Bettet Kapitelmarken als Metadaten für kompatible Videoplayer ein.
- **Sponsoren-Segmente entfernen:** Entfernt gesponserte Abschnitte aus dem Video mithilfe von 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>
<summary>⚙️ Ausgabe- & 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.
- **Geschwindigkeitsbegrenzer:** Begrenzt die Download-Geschwindigkeit, z. B. `500K` für 500 KB/s.
- **Download-Pfad speichern:** Speichert den Standard-Download-Pfad für zukünftige Downloads. Verfügbar unter **Download Settings → Download Path**.
- **Standard-Videoauflösung:** Legen Sie Ihre bevorzugte Videoauflösung für die automatische Auswahl fest (z. B. 1080p, 720p). Verfügbar unter **Download Settings → Default Video Resolution**.
- **Standard-Untertitelsprachen:** Legen Sie Standard-Untertitelsprachen für die automatische Auswahl fest (kommagetrennt, z. B. `de,en`). Verfügbar unter **Download Settings → Default Subtitle Languages**.
- **Dateinamen-Format:** Passen Sie das Format des Ausgabedateinamen mit Variablen wie `%(title)s`, `%(uploader)s`, `%(playlist_index)s` und `%(resolution)s` an. Verfügbar unter **Download Settings → Filename Format**.
- **Ausgabeformat erzwingen:** Erzwingt Video-Downloads in ein bestimmtes Containerformat wie `mp4`, `webm` oder `mkv`. Verfügbar unter **Download Settings → Output Format Settings**.
- **Audioformat-Konvertierung:** Konvertiert reine Audio-Downloads in bevorzugte Formate wie `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` oder `Best`. Verfügbar unter **Download Settings → Audio Format Settings**.
- **Audio-Normalisierung:** Standardisiert die Lautstärke für reine Audio-Downloads unter Verwendung von EBU R128.
- **Gleichzeitige Verbindungen:** Erhöhen Sie die Download-Geschwindigkeit erheblich, indem Sie Dateien in mehreren Fragmenten gleichzeitig herunterladen. Verfügbar unter **Download Settings → General → Concurrent Connections** (Standardmäßig 1, maximal 8-10 empfohlen, um IP-Sperren zu vermeiden).
</details>
<details>
<summary>🌐 Zugang und Netzwerk</summary>
<summary>🌐 Zugriff & 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:
- **Cookie-Login:** Loggen Sie sich mit Cookies bei YouTube ein, um auf private Inhalte zuzugreifen.
Verwendung:
1. **Empfohlen:** Verwenden Sie die integrierte Option `Extract cookies from browser` in der App, wählen Sie dann Ihren Browser und optional ein Profil.
2. Alternativ können Sie Cookies 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**.
c. Erstellen Sie eine Datei namens `cookies.txt` und fügen Sie die Cookies ein
d. Wählen Sie die Datei `cookies.txt` in der App aus
- **Proxy-Support:** Verwenden Sie einen Proxy-Server für Downloads, z. B. `http://<proxy-server>:<port>`
- **Generischer Modus:** Ermöglicht YTSage das Analysieren und Herunterladen von anderen von yt-dlp unterstützten Seiten. Aktivieren Sie dies unter **Download Settings → Generic Mode**.
</details>
<details>
<summary>🛠️ Werkzeuge und Wartung</summary>
<summary>🛠️ Tools & 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.
- **Benutzerdefinierte Befehle:** Greifen Sie auf erweiterte yt-dlp-Funktionen über Befehlszeilenargumente zu.
- **Update-Tab:** Verwalten Sie integrierte Update-Tools an einem Ort in den benutzerdefinierten Optionen:
- **yt-dlp Updates:** Suchen Sie nach Updates und wechseln Sie zwischen Stable- und Nightly-Release-Kanälen.
- **FFmpeg-Versionsprüfung:** Überprüfen Sie Ihre FFmpeg-Version und öffnen Sie Installationsanleitungen.
- **Deno-Updates:** Überprüfen und aktualisieren Sie die Deno-Laufzeitumgebung.
- **FFmpeg/yt-dlp/Deno Erkennung:** Erkennt Pfade und Versionen von FFmpeg, yt-dlp und Deno automatisch aus dem About-Dialog.
- **Download-Historie:** Zeigt vergangene Downloads mit Thumbnails und Status über die Schaltfläche **History** an.
</details>
<details>
<summary>🌍 Lokalisierung</summary>
YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie Ihre bevorzugte Sprache unter **Benutzerdefinierte OptionenSprache** aus.
YTSage unterstützt **14 Sprachen** für globale Barrierefreiheit. Wählen Sie Ihre bevorzugte Sprache unter **Custom OptionsLanguage**.
### Unterstützte Sprachen
@@ -361,7 +366,7 @@ YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie
| Sprache | Datei | Sprache | Datei |
|----------|------|----------|------|
| 🇺🇸 Englisch | [README.md](../README.md) | 🇪🇸 Spanisch | [README.es.md](README.es.md)
| 🇺🇸 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) |
@@ -369,7 +374,7 @@ YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie
| 🇧🇷 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!
> 💡 **Möchten Sie bei einer Übersetzung helfen?** Schauen Sie in den Abschnitt [Mitwirken](#contributing), um uns zu helfen, weitere Sprachen hinzuzufügen!
</details>
@@ -379,50 +384,50 @@ YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie
<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.
- **Formattabelle wird nicht angezeigt:** Aktualisieren Sie yt-dlp auf die neueste Version und wechseln Sie zu yt-dlp nightly.
- **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.
- **Spezifische Download-Fehler:**
- **Private Videos:** Verwenden Sie Cookie-Authentifizierung, um auf private Inhalte zuzugreifen.
- **Videos mit Altersbeschränkung:** Loggen Sie sich in Ihr YouTube-Konto ein, um altersbeschränkte Videos anzusehen.
- **Geoblockierte Videos:** Erwägen Sie die Verwendung eines VPN, um regionale Einschränkungen zu umgehen.
- **Gelöschte Videos:** Das Video ist auf YouTube nicht mehr verfügbar.
- **Livestreams:** Livestreams können während der Übertragung 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.
- **Premium-Inhalte:** Erfordert ein YouTube-Premium-Abonnement.
- **Urheberrechtssperren:** Der Inhalt ist aufgrund von Urheberrechtsbeschränkungen gesperrt.
- **Video- und Audiodateien sind nach dem Download getrennt:** 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 installiert und im PATH Ihres Systems zugänglich ist. Für Windows-Benutzer ist die einfachste Option, die Datei `YTSage-v<version>-ffmpeg.exe` herunterzuladen, die FFmpeg integriert hat.
---
#### 🛡️ Windows Defender/Antivirus-Warnung
#### 🛡️ Windows Defender / Antivirus Warnung
Einige Antivirenprogramme kennzeichnen die „.exe-Dateien möglicherweise als falsch positive Ergebnisse. Dies ist eine **bekannte Einschränkung** von Paketanwendungen.
Einige Antivirenprogramme können `.exe`-Dateien als Fehlalarm (False Positive) markieren. Dies ist eine **bekannte Einschränkung** von gepackten Anwendungen.
**Warum das passiert:**
Antivirus-Heuristiken können gepackte ausführbare Dateien fälschlicherweise als verdächtig identifizieren
- Antiviren-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
- ✅ **Verwenden Sie die pip-Installation:** `pip install ytsage` (Empfohlen)
- ✅ **Aus dem Quellcode bauen**: Folgen Sie diesem [Leitfaden](.github/CI_CD_README.md)
- ✅ **App auf die Whitelist setzen** in Ihrer Antiviren-Software.
#### 🍎 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.
#### 🍎 macOS: "Die App ist beschädigt und kann nicht geöffnet werden"
Wenn dieser Fehler unter macOS Sonoma oder neuer auftritt, müssen Sie das Quarantäne-Attribut 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:
1. **Öffnen Sie das Terminal** (Sie finden es über Spotlight).
2. **Geben Sie den folgenden Befehl ein**, aber drücken Sie noch **nicht** Enter. Stellen Sie sicher, dass am Ende ein Leerzeichen steht:
```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.
3. **Ziehen Sie die Datei `YTSage.app`** aus Ihrem Finder-Fenster direkt in das Terminal-Fenster. Dadurch wird der korrekte Dateipfad automatisch eingefügt.
4. **Drücken Sie Enter**, um den Befehl auszuführen.
5. **Versuchen Sie erneut, YTSage.app zu öffnen.** Sie sollte nun korrekt starten.
---
#### **Konfigurationsorte (Erweitert)**
#### **Speicherorte der Konfiguration (Erweitert)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
@@ -430,45 +435,45 @@ Wenn dieser Fehler unter macOS Sonoma oder neuer auftritt, müssen Sie das Quara
</details>
<a id="sponsor"></a>
## 💖 Sponsor
## 💖 Sponsoren
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.
Wenn YTSage Ihnen Zeit spart, ziehen Sie bitte in Erwägung, das Projekt zu sponsern. Sponsoring hilft, die Entwicklungszeit, Tests auf allen Plattformen und zukünftige Verbesserungen zu finanzieren.
- GitHub-Sponsoren: https://github.com/sponsors/oop7
- Der Sponsor-Link ist auch direkt in der App im Info-Dialog verfügbar.
- GitHub Sponsors: https://github.com/sponsors/oop7
- Der Sponsoring-Link ist auch direkt in der App über den About-Dialog verfügbar.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Mitwirken
Wir freuen uns über Beiträge! So können Sie helfen:
Beiträge sind herzlich willkommen! So können Sie helfen:
1. 🍴 Forken Sie das Repository
2. 🌿 Erstellen Sie Ihren Feature-Branch:
2. 🌿 Erstellen Sie einen Feature-Branch:
```bash
git checkout -b feature/AmazingFeature
```
3. 💾 Übernehmen Sie Ihre Änderungen:
3. 💾 Committen Sie Ihre Änderungen:
```bash
git commit -m 'Add some AmazingFeature'
```
4. 📤 Zur Filiale schieben:
4. 📤 Pushen Sie in den Branch:
```bash
git push origin feature/AmazingFeature
```
5. 🔄 Öffnen Sie eine Pull-Anfrage
5. 🔄 Öffnen Sie einen Pull Request
### 🌍 Mitwirkende Übersetzungen
### 🌍 Zu Übersetzungen beitragen
- 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`
- Aktualisieren Sie die entsprechende lokalisierte README-Datei (z. B. `readme-translations/README.de.md`)
- Halten Sie die App-Strings synchron, indem Sie `ytsage/languages/<code>.json` bearbeiten
- Wenn Ihre Sprache fehlt, beginnen Sie mit der `README.md` und erstellen Sie `README.<code>.md`
<details>
<summary>📂 Projektstruktur</summary>
## YTSage Projektstruktur
## YTSage - Projektstruktur
Dieses Dokument beschreibt die organisierte Ordnerstruktur von YTSage.
@@ -476,58 +481,58 @@ Dieses Dokument beschreibt die organisierte Ordnerstruktur von 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
├── 📁 .github/ # GitHub-Konfiguration
│ ├── 📁 ISSUE_TEMPLATE/ # Ticket-Vorlagen
│ │ └── 🐛-bug-report.md # Bug-Report-Vorlage
│ ├─── 📁 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-Dokumentation
├── 📁 branding/ # Branding-Assets (Screenshots, SVGs)
│ ├── 📁 icons/ # App-Icons
│ ├── 📁 screenshots/ # Screenshots für die Dokumentation
│ └── 📁 svg/ # SVG-Assets
├── 📄 LICENSE # Lizenzdatei
├── 📄 pyproject.toml # Projekt-Metadaten und Abhängigkeiten
├── 📄 README.md # Projekt-Dokumentation
├── 📄 requirements.txt # Python-Abhängigkeiten (dev)
└── 📁 ytsage/ # Quellcode-Paket
├── 📁 assets/ # Laufzeit-Assets
│ ├── 📁 Icon/ # App-Icons
│ └── 📁 sound/ # Audiodateien
├── 📁 languages/ # Lokalisierungsdateien
│ ├── 📄 ar.json # Arabische Übersetzung
│ ├── 📄 de.json # Deutsche Übersetzung
│ ├── 📄 en.json # Englische Übersetzung
│ └── ... # Weitere Sprachen
├── 📁 core/ # Hauptgeschäftslogik
│ ├── 📄 __init__.py # Core-Paket-Initialisierung
│ ├── 📄 ytsage_deno.py # Deno-Integration
│ ├── 📄 ytsage_downloader.py # Download-Funktionalität
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg-Integration
│ ├── 📄 ytsage_utils.py # Hilfsfunktionen
│ └── 📄 ytsage_yt_dlp.py # yt-dlp-Integration
├── 📁 gui/ # Benutzeroberflächen-Komponenten
│ ├── 📄 __init__.py # GUI-Paket-Initialisierung
│ ├── 📄 ytsage_gui_main.py # Hauptfenster der App
│ └── 📁 ytsage_gui_dialogs/ # Dialog-Klassen
├── 📁 utils/ # Hilfsmodule
│ ├── 📄 __init__.py # Utils-Paket-Initialisierung
│ ├── 📄 ytsage_config_manager.py # Konfigurationsverwaltung
│ └── 📄 ytsage_logger.py # Logging-Tool
├── 📄 __init__.py # Paket-Einstiegspunkt
└── 📄 main.py # Hauptskript zur Ausführung
```
</details>
## ⭐️ Sterngeschichte
## ⭐️ Star History
<div align="center">
## Sterngeschichte
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,7 +546,7 @@ YTSage/
## 📜 Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert Einzelheiten finden Sie in der Datei „LICENSE“.
Dieses Projekt steht unter der MIT-Lizenz weitere Details finden Sie in der Datei [LICENSE](LICENSE).
## 🙏 Danksagungen
@@ -550,13 +555,13 @@ Dieses Projekt ist unter der MIT-Lizenz lizenziert Einzelheiten finden Sie i
<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>
<p>Ein großes Dankeschön an alle, die zu diesem Projekt beigetragen haben, indem sie Tickets für Verbesserungsvorschläge oder Bug-Reports geöffnet haben.</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>
<td>Download-Engine</td>
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
@@ -564,40 +569,41 @@ Dieses Projekt ist unter der MIT-Lizenz lizenziert Einzelheiten finden Sie i
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Laufzeit für die Integration mit yt-dlp</td>
<td>Runtime für yt-dlp Integration</td>
</tr>
<tr class="section"><th colspan="2">Bibliotheken und Frameworks</th></tr>
<tr class="section"><th colspan="2">Bibliotheken & 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><a href="https://python-pillow.org/">Pillow</a></td>
<td>Bildverarbeitung</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">Anfragen</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>HTTP-Anfragen</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">Verpackung</a></td>
<td>Versions- und Pakethandhabung</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Versionsverwaltung & Packaging</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">Abschlag</a></td>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Markdown-Rendering</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Protokollierung</td>
<td>Logging</td>
</tr>
<tr class="section"><th colspan="2">Vermögenswerte und Mitwirkende</th></tr>
<tr class="section"><th colspan="2">Assets & Mitwirkende</th></tr>
<tr>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Neue Benachrichtigung 09 von Universfield</a></td>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 by Universfield</a></td>
<td>Benachrichtigungston</td>
</tr>
<tr>
<td><a href="https://github.com/viru185">viru185</a></td>
<td>Code-Mitwirkender</td>
<td>Code-Contributor</td>
</tr>
</table>
@@ -607,12 +613,12 @@ Dieses Projekt ist unter der MIT-Lizenz lizenziert Einzelheiten finden Sie i
## ⚠️ Haftungsausschluss
Dieses Tool ist nur für den persönlichen Gebrauch bestimmt. Bitte respektieren Sie die Nutzungsbedingungen und die Rechte der Inhaltsersteller von YouTube.
Dieses Tool ist nur für den persönlichen Gebrauch bestimmt. Bitte respektieren Sie die Nutzungsbedingungen von YouTube und die Rechte der Content-Ersteller.
---
<div align="center">
Hergestellt mit ❤️ von [oop7](https://github.com/oop7)
Erstellt mit ❤️ von [oop7](https://github.com/oop7)
</div>
+235 -229
View File
@@ -12,25 +12,25 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
**Un moderno descargador de YouTube con una interfaz PySide6 elegante.**
Descarga videos en cualquier calidad, extrae audio, obtén subtítulos y más.
### 🌍 LÉAME Idiomas
### 🌍 Idiomas del README
Inglés: [EN](../README.md)
| العربية: [AR](README.ar.md)
| Árabe: [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)
| Hindi: [HI](README.hi.md)
| Indonesio: [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)
| Japonés: [JA](README.ja.md)
| Polaco: [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)
| Chino: [ZH](README.zh.md)
<p align="center">
<a href="#installation">Instalación</a> •
@@ -38,8 +38,8 @@ Inglés: [EN](../README.md)
<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>
<a href="#sponsor">Patrocinar</a> •
<a href="#contributing">Contribuir</a>
</p>
</div>
@@ -51,42 +51,43 @@ Inglés: [EN](../README.md)
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.
- Interfaz PySide6 moderna y limpia
- Descarga con un solo clic para video, audio y subtítulos
- Funciones avanzadas como SponsorBlock, fusión de subtítulos y selección de listas de reproducción
- Modo genérico (Generic Mode) opcional para sitios compatibles con yt-dlp más allá de YouTube
- Soporte multiplataforma e instalación sencilla
<a id="features"></a>
## ✨ Características
<div align="center">
| Características principales | Funciones avanzadas | Funciones adicionales |
| Características básicas | Características avanzadas | Características 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 |
| 🎥 Tabla de formatos | 🚫 Integración de SponsorBlock | 🎞️ Pantalla FPS/HDR |
| 🎵 Extracción de audio | 📝 Selección y fusión de subtítulos | 🔄 Actualización automática de yt-dlp |
| ✨ Interfaz de usuario simple | 💾 Guarda descripción y miniatura | 🛠️ Detección de FFmpeg/yt-dlp/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 |
| 📑 Integración de capítulos | ✂️ Recorte de secciones de video | 🍪 Inicio de 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 |
| 🎚️ Conversión de formato de audio | 🎬 Configuración de formato de video | 🆙 Pestaña de actualización integrada |
| 🌍 Modo genérico | 🔊 Normalización de audio (EBU R128) | 🌍 Localización en 14 idiomas |
| 💾 Exportación de listas de reproducción | ⚙️ Calidad y subtítulos predeterminados | |
</div>
<a id="installation"></a>
## 🚀 Instalación
### ⚡ Instalación rápida (recomendado)
### ⚡ Instalación rápida (Recomendado)
Instale YTSage desde PyPI:
Instala YTSage vía PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 Actualizar una instalación existente</summary>
<summary>🔄 Actualizar instalación existente</summary>
```bash
pip install --upgrade ytsage
@@ -94,31 +95,31 @@ pip install --upgrade ytsage
</details>
Luego inicie la aplicación:
Luego, ejecuta la aplicación:
```bash
ytsage
```
### 📦 Ejecutables prediseñados
### 📦 Ejecutables precompilados
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Descargar el último lanzamiento](https://github.com/oop7/YTSage/releases/latest)
#### 🪟Ventanas
#### 🪟 Windows
| Formato | Descripción |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Instalador estándar |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Con FFmpeg incluido |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versión portátil, no requiere instalación |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portátil con FFmpeg, con cremallera |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Con FFmpeg incorporado |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versión portable, no requiere instalación |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable con FFmpeg, comprimido |
<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.
1. **Instalador EXE (`.exe`)**: Haz doble clic en el archivo y sigue el asistente de configuración.
2. **Versión portable (`.zip`)**: Extrae el archivo en el lugar deseado y ejecuta `ytsage.exe`.
3. **FFmpeg incorporado**: Elige las versiones con FFmpeg incorporado si no tienes FFmpeg instalado en tu sistema.
</details>
#### 🐧 Linux
@@ -126,9 +127,9 @@ ytsage
| Formato | Descripción |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Paquete Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portátil |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portable |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Paquete RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Paquete plano |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak Bundle |
<details>
<summary>🛠️ Pasos de instalación</summary>
@@ -136,18 +137,18 @@ ytsage
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Repara dependencias faltantes si es necesario
```
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
- **Imagen de aplicación (`.AppImage`)**:
- **AppImage (`.AppImage`)**:
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: siga las instrucciones en Flathub o ejecute:
- **Flatpak**: Sigue las instrucciones en Flathub o ejecuta:
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -158,21 +159,21 @@ ytsage
| Formato | Descripción |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Aplicación comprimida para Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Instalador de imágenes de disco para Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Instalador de imagen 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.
- **Instalador DMG (`.dmg`)**: Haz doble clic para montar, luego arrastra `YTSage.app` a tu carpeta de Aplicaciones.
- **Archivo de aplicación (`.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.*
*Nota: Si encuentras el error "La aplicación está dañada", consulta la sección de solución de problemas de macOS a continuación.*
</details>
---
<details>
<summary>💻 Instalación manual desde la fuente</summary>
<summary>💻 Instalación manual desde el código fuente</summary>
### 1. Clonar el repositorio
@@ -183,7 +184,7 @@ cd YTSage
### 2. Instalar dependencias
#### ⚡ Con ultravioleta
#### ⚡ Con uv
```bash
uv pip install .
@@ -195,7 +196,7 @@ uv pip install .
pip install .
```
### 3. Ejecute la aplicación
### 3. Ejecutar la aplicación
```bash
python -m ytsage.main
@@ -209,167 +210,171 @@ python -m ytsage.main
<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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Ajustes de descarga" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Descarga de lista de reproducción" 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>
<td align="center"><em>Ajustes de descarga</em></td>
<td align="center"><em>Descarga de 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>
<td><img src="../branding/screenshots/audio_format.png" alt="Selección de formato de audio" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opción personalizada" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Formato de audio</em></td>
<td align="center"><em>Opciones personalizadas</em></td>
<td align="center"><em>Opción personalizada</em></td>
</tr>
</table>
</div><a id="usage"></a>
</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
1. **Lanza YTSage**
2. **Pega la URL de YouTube** (o usa el botón "Paste URL")
3. **Haz clic en "Analyze"**
4. **Selecciona el formato:**
- `Video` para descargas de video
- `Audio Only` para extracción de audio
5. **Elija Opciones:**
- Habilitar subtítulos y seleccionar idioma.
- Habilitar la combinación de subtítulos
5. **Elige opciones:**
- Activar subtítulos y elegir idioma
- Activar fusión de subtítulos
- Guardar miniatura
- Eliminar segmentos de patrocinadores
- Eliminar segmentos patrocinados
- Guardar descripción
- Insertar capítulos
6. **Seleccione el directorio de salida**
7. **Haga clic en "Descargar"**
- Integrar capítulos
6. **Selecciona directorio de salida**
7. **Haz clic en "Download"**
> 💡 El directorio de descarga predeterminado es la carpeta "Descargas" del usuario.
> 💡 El directorio de descarga predeterminado es la carpeta "Downloads" del usuario.
</details>
<details>
<summary>📋 Descarga de lista de reproducción</summary>
<summary>📋 Descarga de listas 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"**
1. **Pega la URL de la lista de reproducción**
2. **Haz clic en "Analyze"**
3. **Selecciona videos del selector de listas (opcional, todos por defecto)**
4. **Elige formato/calidad deseada**
5. **Haz clic en "Download"**
> 💡 La aplicación maneja automáticamente la cola de descarga
> 💡 La aplicación gestiona las colas de descarga automáticamente, y puedes exportar entradas de la lista como archivos `.txt`, `.csv`, `.m3u` o `.json`.
</details>
<details>
<summary>🌍 Modo genérico para sitios que no son de YouTube</summary>
<summary>🌍 Modo genérico para sitios que no son 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.
Usa el modo genérico (Generic Mode) cuando desees que YTSage acepte URLs 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.
1. Abre `Download Settings`.
2. Activa `Generic Mode`.
3. Pega una URL de video o lista de reproducción compatible que no sea de YouTube.
4. Haz clic en `Analyze`.
5. Elige el formato y descarga 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.
- El modo genérico solo cambia la validación de la URL dentro de YTSage. El sitio debe ser compatible con tu versión instalada de yt-dlp.
- Algunos sitios requieren cookies, inicio de sesión, proxy o argumentos adicionales de yt-dlp dependiendo del extractor.
- Si un sitio falla, actualiza primero yt-dlp desde la pestaña de actualización integrada antes de informar del problema.
</details>
<details>
<summary>🧰 Opciones de descarga y medios</summary>
<summary>🧰 Opciones de medios y descarga</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`
- **Opciones de subtítulos:** Filtra idiomas e incrusta subtítulos en el archivo de video.
- **Fusión de subtítulos:** Fusiona subtítulos en el archivo de video para subtítulos fijos (hardcoded).
- **Guardar descripción:** Guarda la descripción del video como un archivo de texto.
- **Guardar miniatura:** Guarda la miniatura del video como un archivo de imagen.
- **Integrar capítulos:** Incluye marcas de capítulo como metadatos para reproductores de video compatibles.
- **Eliminar segmentos patrocinados:** Elimina segmentos patrocinados del video usando SponsorBlock.
- **Recortar video:** Descarga 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>
<summary>⚙️ Ajustes de salida y archivos</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.
- **Limitador de velocidad:** Limita la velocidad de descarga, p. ej., `500K` para 500 KB/s.
- **Guardar ruta de descarga:** Guarda la ruta de descarga predeterminada para futuras descargas. Disponible en **Download Settings → Download Path**.
- **Resolución de video predeterminada:** Establece tu resolución de video preferida para selección automática (p. ej., 1080p, 720p). Disponible en **Download Settings → Default Video Resolution**.
- **Idiomas de subtítulos predeterminados:** Establece idiomas de subtítulos para selección automática (separados por comas, p. ej., `es,en`). Disponible en **Download Settings → Default Subtitle Languages**.
- **Formato de nombre de archivo:** Personaliza el formato del nombre de archivo usando variables como `%(title)s`, `%(uploader)s`, `%(playlist_index)s` y `%(resolution)s`. Disponible en **Download Settings → Filename Format**.
- **Forzar formato de salida:** Fuerza las descargas de video a un formato de contenedor específico como `mp4`, `webm` o `mkv`. Disponible en **Download Settings → Output Format Settings**.
- **Conversión de formato de audio:** Convierte descargas de solo audio a formatos preferidos como `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` o `Best`. Disponible en **Download Settings → Audio Format Settings**.
- **Normalización de audio:** Estandariza el volumen para descargas de solo audio usando EBU R128.
- **Conexiones simultáneas:** Aumenta drásticamente la velocidad de descarga descargando archivos en múltiples fragmentos a la vez. Disponible en **Download Settings → General → Concurrent Connections** (1 por defecto, máximo recomendado 8-10 para evitar bloqueos por IP).
</details>
<details>
<summary>🌐 Acceso y Red</summary>
<summary>🌐 Acceso y red</summary>
- **Iniciar sesión con cookies:** Inicie sesión en YouTube utilizando cookies para acceder a contenido privado.
- **Inicio de sesión con cookies:** Inicia sesión en YouTube usando 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**.
1. **Recomendado:** Usa la opción integrada `Extract cookies from browser` en la aplicación, luego selecciona tu navegador y opcionalmente un perfil.
2. Alternativamente, extrae las cookies manualmente:
a. Exporta cookies de tu navegador usando una extensión como [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
b. Copia las cookies en formato Netscape
c. Crea un archivo llamado `cookies.txt` y pega las cookies
d. Selecciona el archivo `cookies.txt` en la aplicación
- **Soporte de proxy:** Usa un servidor proxy para las descargas, p. ej., `http://<servidor-proxy>:<puerto>`
- **Modo genérico:** Permite a YTSage analizar y descargar desde sitios que no son YouTube compatibles con yt-dlp. Actívalo en **Download Settings → Generic Mode**.
</details>
<details>
<summary>🛠️ Herramientas y Mantenimiento</summary>
<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**.
- **Comandos personalizados:** Accede a funciones avanzadas de yt-dlp mediante argumentos de línea de comandos.
- **Pestaña de actualización:** Gestiona herramientas de actualización desde un solo lugar en Opciones personalizadas:
- **Actualizaciones de yt-dlp:** Busca actualizaciones y cambia entre canales estable y nightly.
- **Verificador de versión de FFmpeg:** Verifica tu versión de FFmpeg y abre guías de instalación.
- **Actualizaciones de Deno:** Verifica y actualiza el motor de ejecución Deno.
- **Detección de FFmpeg/yt-dlp/Deno:** Detecta automáticamente rutas y versiones de FFmpeg, yt-dlp y Deno desde el diálogo Acerca de.
- **Historial de descargas:** Visualiza descargas pasadas con miniaturas y estados desde el botón **History**.
</details>
<details>
<summary>🌍 Localización</summary>
YTSage admite **14 idiomas** para accesibilidad mundial. Seleccione su idioma preferido en **Opciones personalizadas → Idioma**.
YTSage soporta **14 idiomas** para accesibilidad global. Selecciona tu idioma preferido en **Custom Options → Language**.
### Idiomas admitidos
### Idiomas soportados
| Idioma | Código | Idioma | Código |
|----------|------|----------|------|
| 🇺🇸 Inglés | `en` | 🇪🇸 Español | `es` |
| 🇸🇦 Árabe | `ar` | 🇫🇷 Francés | `fr` |
| 🇩🇪 Alemán | `de` | 🇮🇳 hindi | `hi` |
| 🇩🇪 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
### Traducciones del README
| Idioma | Archivo | Idioma | Archivo |
|----------|------|----------|------|
| 🇺🇸 Inglés | [README.md](../README.md) | 🇪🇸 Español | [README.es.md](README.es.md)
| 🇺🇸 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) |
| 🇩🇪 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!
> 💡 **¿Quieres contribuir con una traducción?** ¡Consulta la sección de [Contribución](#contributing) para ayudarnos a añadir más idiomas!
</details>
@@ -377,52 +382,52 @@ YTSage admite **14 idiomas** para accesibilidad mundial. Seleccione su idioma pr
## 🛠️ Solución de problemas
<details>
<summary>Haga clic para ver problemas y soluciones comunes</summary>
<summary>Haz clic para ver problemas comunes y soluciones</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.
- **La tabla de formatos no aparece:** Actualiza yt-dlp a la última versión y cambia a yt-dlp nightly.
- **Fallo de descarga:** Verifica tu conexión a internet y asegúrate 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.
- **Videos privados:** Usa autenticación por cookies para acceder a contenido privado.
- **Contenido con restricción de edad:** Inicia sesión en tu cuenta de YouTube para ver videos restringidos.
- **Videos bloqueados geográficamente:** Considera usar una VPN para saltar restricciones regionales.
- **Videos eliminados:** El video ya no está disponible en YouTube.
- **Transmisiones en vivo:** Los directos no se pueden descargar; espera a que la transmisión termine.
- **Errores de red:** Verifica tu conexión a internet e inténtalo de nuevo.
- **URLs no válidas:** Asegúrate de que la URL sea correcta y de una plataforma compatible.
- **Contenido Premium:** Requiere suscripción a YouTube Premium.
- **Bloqueos por copyright:** El contenido está bloqueado por restricciones de derechos de autor.
- **Archivos de video y audio separados tras descarga:** Esto sucede cuando falta FFmpeg o no se detecta. YTSage requiere FFmpeg para fusionar flujos de video y audio de alta calidad.
- **Solución:** Asegúrate de que FFmpeg esté instalado y accesible en el PATH de tu sistema. Para usuarios de Windows, la opción más cil es descargar el archivo `YTSage-v<version>-ffmpeg.exe`, que incluye 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.
Algunos programas antivirus pueden marcar 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.
- La heurística de los 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
- ✅ **Usa la instalación de pip:** `pip install ytsage` (Recomendado)
- ✅ **Construye desde el código fuente**: siguiendo esta [guía](.github/CI_CD_README.md)
- ✅ **Añade la aplicación a 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.
Si ves este error en macOS Sonoma o más reciente, necesitas 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:
1. **Abre el Terminal** (puedes encontrarlo usando Spotlight).
2. **Escribe el siguiente comando** pero **no presiones** Enter 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.
3. **Arrastra el archivo `YTSage.app`** desde tu ventana de Finder y suéltalo directamente en la ventana del Terminal. Esto pegará automáticamente la ruta correcta del archivo.
4. **Presiona Enter** para ejecutar el comando.
5. **Intenta abrir YTSage.app de nuevo.** Ahora debería lanzarse correctamente.
---
#### **Ubicaciones de configuración (avanzada)**
#### **Ubicaciones de configuración (Avanzado)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
@@ -430,40 +435,40 @@ Si ve este error en macOS Sonoma o posterior, debe eliminar el atributo de cuare
</details>
<a id="sponsor"></a>
## 💖 Patrocinador
## 💖 Patrocinar
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.
Si YTSage te ahorra tiempo, considera patrocinar el proyecto. El patrocinio ayuda a cubrir tiempo de desarrollo, pruebas en todas las plataformas y futuras mejoras.
- 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.
- GitHub Sponsors: https://github.com/sponsors/oop7
- El enlace de patrocinio también está disponible directamente en la aplicación a través del diálogo Acerca de.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Contribuyendo
## 👥 Contribuir
¡Agradecemos las contribuciones! Aes como puedes ayudar:
¡Agradecemos las contribuciones! Aquí tienes cómo puedes ayudar:
1. 🍴 Bifurca el repositorio
2. 🌿 Crea tu rama de funciones:
1. 🍴 Haz un Fork del repositorio
2. 🌿 Crea tu rama de características:
```bash
git checkout -b feature/AmazingFeature
```
3. 💾 Confirme sus cambios:
3. 💾 Haz commit de tus cambios:
```bash
git commit -m 'Add some AmazingFeature'
```
4. 📤 Empuje a la sucursal:
4. 📤 Haz Push a la rama:
```bash
git push origin feature/AmazingFeature
```
5. 🔄 Abra una solicitud de extracción
5. 🔄 Abre un Pull Request
### 🌍 Contribuyendo con traducciones
### 🌍 Contribuir 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`
- Actualiza el archivo README localizado correspondiente (p. ej., `readme-translations/README.es.md`)
- Mantén las cadenas de la aplicación sincronizadas editando `ytsage/languages/<code>.json`
- Si falta tu idioma, comienza desde `README.md` y crea `README.<code>.md`
<details>
<summary>📂 Estructura del proyecto</summary>
@@ -476,58 +481,58 @@ Este documento describe la estructura de carpetas organizada de 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
├── 📁 .github/ # Configuración de GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # Plantillas de problemas
│ │ └── 🐛-bug-report.md # Plantilla de informe de errores
│ ├─── 📁 workflows/ # Flujos de trabajo de GitHub Actions
│ │ ├── build-linux.yml # Flujo de construcción para Linux
│ │ ├── build-macos.yml # Flujo de construcción para macOS
│ │ │── build-windows.yml # Flujo de construcción para Windows
| | └── release-all.yml # Flujo de liberación maestra
│ └── 📄 CI_CD_README.md # Documentación de CI/CD
├── 📁 branding/ # Activos de marca (Capturas de pantalla, SVGs)
│ ├── 📁 icons/ # Iconos de la aplicación
│ ├── 📁 screenshots/ # Capturas de pantalla para documentación
│ └── 📁 svg/ # Activos SVG
├── 📄 LICENSE # Archivo de licencia
├── 📄 pyproject.toml # Metadatos del proyecto y dependencias
├── 📄 README.md # Documentación del proyecto
├── 📄 requirements.txt # Dependencias de Python (dev)
└── 📁 ytsage/ # Paquete de código fuente
├── 📁 assets/ # Activos en tiempo de ejecución
│ ├── 📁 Icon/ # Iconos de la aplicación
│ └── 📁 sound/ # Archivos de audio
├── 📁 languages/ # Archivos de localización
│ ├── 📄 ar.json # Traducción al árabe
│ ├── 📄 de.json # Traducción al alemán
│ ├── 📄 en.json # Traducción al inglés
│ └── ... # Otros idiomas
├── 📁 core/ # Lógica de negocio principal
│ ├── 📄 __init__.py # Init del paquete core
│ ├── 📄 ytsage_deno.py # Integración con Deno
│ ├── 📄 ytsage_downloader.py # Funcionalidad de descarga
│ ├── 📄 ytsage_ffmpeg.py # Integración con FFmpeg
│ ├── 📄 ytsage_utils.py # Funciones de utilidad
│ └── 📄 ytsage_yt_dlp.py # Integración con yt-dlp
├── 📁 gui/ # Componentes de interfaz de usuario
│ ├── 📄 __init__.py # Init del paquete GUI
│ ├── 📄 ytsage_gui_main.py # Ventana principal de la aplicación
│ └── 📁 ytsage_gui_dialogs/ # Clases de diálogos
├── 📁 utils/ # Módulos de utilidad
│ ├── 📄 __init__.py # Init del paquete utils
│ ├── 📄 ytsage_config_manager.py # Gestión de configuración
│ └── 📄 ytsage_logger.py # Utilidad de registro
├── 📄 __init__.py # Punto de entrada del paquete
└── 📄 main.py # Script de ejecución principal
```
</details>
## ⭐️ Historia de las estrellas
## ⭐️ Historial de estrellas
<div align="center">
## Historia de las estrellas
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,16 +546,16 @@ YTSage/
## 📜 Licencia
Este proyecto tiene la licencia MIT; consulte el archivo [LICENSE](../LICENSE) para obtener más detalles.
Este proyecto está bajo la Licencia MIT - mira el archivo [LICENSE](LICENSE) para más detalles.
## 🙏 Agradecimientos
<details>
<summary>Mostrar agradecimientos</summary>
<summary>Ver 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>
<p>Muchas gracias a todos los que han contribuido a este proyecto abriendo un problema para sugerir una mejora o informar de un error.</p>
<table>
<tr class="section"><th colspan="2">Componentes principales</th></tr>
@@ -564,35 +569,36 @@ Este proyecto tiene la licencia MIT; consulte el archivo [LICENSE](../LICENSE) p
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Tiempo de ejecución para integración con yt-dlp</td>
<td>Runtime para integración con yt-dlp</td>
</tr>
<tr class="section"><th colspan="2">Bibliotecas y marcos</th></tr>
<tr class="section"><th colspan="2">Librerías y Frameworks</th></tr>
<tr>
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
<td>Marco GUI</td>
<td>Framework de GUI</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/">Almohada</a></td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Procesamiento de imágenes</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">solicitudes</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</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>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Gestión de versiones y empaquetado</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">rebaja</a></td>
<td>Representación de rebajas</td>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Renderizado de Markdown</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Registro</td>
<td>Logging</td>
</tr>
<tr class="section"><th colspan="2">Activos y contribuyentes</th></tr>
<tr class="section"><th colspan="2">Activos y Colaboradores</th></tr>
<tr>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nueva Notificación 09 por Universfield</a></td>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 by Universfield</a></td>
<td>Sonido de notificación</td>
</tr>
<tr>
@@ -607,7 +613,7 @@ Este proyecto tiene la licencia MIT; consulte el archivo [LICENSE](../LICENSE) p
## ⚠️ 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.
Esta herramienta es solo para uso personal. Por favor, respeta los términos de servicio de YouTube y los derechos de los creadores de contenido.
---
+239 -233
View File
@@ -13,33 +13,33 @@
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
Téléchargez des vidéos dans n'importe quelle qualité, extrayez l'audio, récupérez les sous-titres, et plus encore.
### 🌍 Langues README
### 🌍 Langues du 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)
Anglais : [EN](../README.md)
| Arabe : [AR](README.ar.md)
| Allemand : [DE](README.de.md)
| Espagnol : [ES](README.es.md)
| Français : [FR](README.fr.md)
| Hindi : [HI](README.hi.md)
| Indonésien : [ID](README.id.md)
| Italien : [IT](README.it.md)
| Japonais : [JA](README.ja.md)
| Polonais : [PL](README.pl.md)
| Portugais : [PT](README.pt.md)
| Russe : [RU](README.ru.md)
| Turc : [TR](README.tr.md)
| Chinois : [ZH](README.zh.md)
<p align="center">
<a href="#installation">Installation</a> •
<a href="#features">Caractéristiques</a> •
<a href="#features">Fonctionnalités</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>
<a href="#sponsor">Sponsor</a> •
<a href="#contributing">Contribution</a>
</p>
</div>
@@ -49,37 +49,38 @@ Anglais : [EN](../README.md)
<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 à dautres outils, il propose :
YTSage est conçu pour les utilisateurs qui recherchent un **téléchargeur YouTube simple mais puissant**. Contrairement à d'autres outils, il offre :
- Une interface PySide6 propre et moderne
- Une interface PySide6 moderne et épurée
- 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
- Fonctionnalités avancées comme SponsorBlock, la fusion des sous-titres et la sélection de playlists
- Mode générique (Generic Mode) optionnel pour les sites pris en charge par yt-dlp au-delà de YouTube
- Support multiplateforme et installation facile
<a id="features"></a>
## ✨ Caractéristiques
## ✨ Fonctionnalités
<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é |
| Fonctionnalités de base | Fonctionnalités avancées | Fonctionnalités supplémentaires |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Tableau des formats | 🚫 Intégration de SponsorBlock | 🎞️ Affichage FPS/HDR |
| 🎵 Extraction audio | 📝 Sélection et fusion de sous-titres | 🔄 Mise à jour automatique de yt-dlp |
| ✨ Interface utilisateur simple | 💾 Enregistrement de la description et de la miniature | 🛠️ Détection de FFmpeg/yt-dlp/Deno |
| 📋 Support et sélecteur de playlists | 🚀 Limiteur de vitesse | ⚙️ Commandes personnalisées |
| 📑 Intégration des chapitres | ✂️ Découpage de sections vidéo | 🍪 Connexion avec Cookies |
| 📜 Historique des téléchargements | 🔄 Sélection du canal de version | 🌐 Support Proxy |
| 🎚️ Conversion du format 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 |
| 💾 Exportation de playlists | ⚙️ Qualité et sous-titres par défaut | |
</div>
<a id="installation"></a>
## 🚀 Installation
### ⚡ Installation rapide (recommandé)
### ⚡ Installation rapide (Recommandé)
Installez YTSage depuis PyPI :
Installez YTSage via PyPI :
```bash
pip install ytsage
@@ -100,54 +101,54 @@ Lancez ensuite l'application :
ytsage
```
### 📦 Exécutables prédéfinis
### 📦 Exécutables pré-construits
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Télécharger la dernière version](https://github.com/oop7/YTSage/releases/latest)
#### 🪟Fenêtres
#### 🪟 Windows
| Formater | Descriptif |
| Format | Description |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Installateur standard |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Avec FFmpeg fourni |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Avec FFmpeg inclus |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Version portable, aucune installation requise |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | 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.
1. **Installateur EXE (`.exe`)** : Double-cliquez sur le fichier et suivez l'assistant de configuration.
2. **Version portable (`.zip`)** : Extrayez l'archive vers l'emplacement souhaité et lancez `ytsage.exe`.
3. **FFmpeg inclus** : Choisissez les versions avec FFmpeg inclus si vous n'avez pas FFmpeg installé sur votre système.
</details>
#### 🐧 Linux
| Formater | Descriptif |
| Format | Description |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Paquet Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portable |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Paquet RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Paquet Flatpak |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak Bundle |
<details>
<summary>🛠️ Étapes d'installation</summary>
- **DEB (`.deb`)** :
- **DEB (`.deb`)** :
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Répare les dépendances manquantes si nécessaire
```
- **RPM (`.rpm`)** :
- **RPM (`.rpm`)** :
```bash
sudo rpm -i ytsage-*.rpm
```
- **AppImage (`.AppImage`)** :
- **AppImage (`.AppImage`)** :
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak** : suivez les instructions sur Flathub ou exécutez :
- **Flatpak** : Suivez les instructions sur Flathub ou lancez :
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -155,26 +156,26 @@ ytsage
#### 🍎 macOS
| Formater | Descriptif |
| Format | Description |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Application zippée pour Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Programme dinstallation dimage disque pour Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Installateur 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.
- **Installateur DMG (`.dmg`)** : Double-cliquez pour monter, puis faites glisser `YTSage.app` dans votre dossier Applications.
- **Archive d'application (`.zip`)** : Extrayez le zip et déplacez `YTSage.app` dans votre dossier Applications.
*Remarque : si vous rencontrez une erreur « L'application est endommagée », consultez le [macOS troubleshooting section](#troubleshooting) ci-dessous.*
*Note : Si vous rencontrez une erreur "L'application est endommagée", consultez la section de dépannage macOS ci-dessous.*
</details>
---
<details>
<summary>💻 Installation manuelle à partir de la source</summary>
<summary>💻 Installation manuelle à partir des sources</summary>
### 1. Cloner le référentiel
### 1. Cloner le dépôt
```bash
git clone https://github.com/oop7/YTSage.git
@@ -195,7 +196,7 @@ uv pip install .
pip install .
```
### 3. Exécutez l'application
### 3. Lancer l'application
```bash
python -m ytsage.main
@@ -209,147 +210,151 @@ python -m ytsage.main
<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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Paramètres de téléchargement" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Téléchargement de playlist" 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>
<td align="center"><em>Téléchargement de 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>
<td><img src="../branding/screenshots/audio_format.png" alt="Sélection du format audio" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Options personnalisées" 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>
</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
1. **Lancez YTSage**
2. **Collez l'URL YouTube** (ou utilisez le bouton "Paste URL")
3. **Cliquez sur "Analyze"**
4. **Sélectionnez le format :**
- `Video` pour les téléchargements vidéo
- `Audio Only` pour l'extraction audio
5. **Choisissez les options :**
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 miniature
- Supprimer les segments sponsorisés
- Enregistrer la description
- Intégrer des chapitres
- Intégrer les chapitres
6. **Sélectionnez le répertoire de sortie**
7. **Cliquez sur "Télécharger"**
7. **Cliquez sur "Download"**
> 💡 Le répertoire de téléchargement par défaut est le dossier « Téléchargements » de l'utilisateur.
> 💡 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>
<summary>📋 Téléchargement de playlist</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"**
1. **Collez l'URL de la playlist**
2. **Cliquez sur "Analyze"**
3. **Sélectionnez les vidéos du sélecteur de playlist (optionnel, toutes par défaut)**
4. **Choisissez le format/la qualité souhaitée**
5. **Cliquez sur "Download"**
> 💡 L'application gère automatiquement la file d'attente de téléchargement
> 💡 L'application gère automatiquement la file d'attente de téléchargement, et vous pouvez exporter les entrées de la playlist au format `.txt`, `.csv`, `.m3u` ou `.json`.
</details>
<details>
<summary>🌍 Mode générique pour les sites non YouTube</summary>
<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.
Utilisez le mode générique (Generic Mode) lorsque vous souhaitez que YTSage accepte des URL de sites pris en charge par yt-dlp, tels que Dailymotion, CBC Gem, TikTok, et d'autres.
Comment l'utiliser :
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.
3. Collez une URL de vidéo ou de playlist prise en charge qui n'est pas YouTube.
4. Cliquez sur `Analyze`.
5. Choisissez un format et téléchargez comme d'habitude.
Remarques :
Notes :
- 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.
- Le mode générique ne modifie que la validation de l'URL à l'intérieur de YTSage. Le site cible doit toujours être pris en charge par votre version installée de yt-dlp.
- 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.
- Si un site échoue, mettez d'abord à jour yt-dlp depuis 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>
<summary>🧰 Options mé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`
- **Options de sous-titres :** Filtrer les langues et intégrer les sous-titres dans le fichier vidéo.
- **Fusion de sous-titres :** Fusionner les sous-titres dans le fichier vidéo pour des sous-titres incrustés (hardcoded).
- **Enregistrer la description :** Enregistrer la description de la vidéo sous forme de fichier texte.
- **Enregistrer la miniature :** Enregistrer la miniature de la vidéo sous forme de fichier image.
- **Intégrer les chapitres :** Intégrer les marqueurs de chapitres comme métadonnées pour les lecteurs vidéo compatibles.
- **Supprimer les segments sponsorisés :** Supprimer les segments sponsorisés 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 temporelles 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.
- **Limiteur de vitesse :** Limiter la vitesse de téléchargement, par exemple `500K` pour 500 Ko/s.
- **Enregistrer le chemin de téléchargement :** Enregistre le chemin de téléchargement par défaut pour les futurs téléchargements. Disponible dans **Download Settings → Download Path**.
- **Résolution vidéo par défaut :** Définissez votre résolution vidéo préférée par défaut pour la sélection automatique (ex : 1080p, 720p). Disponible dans **Download Settings → Default Video Resolution**.
- **Langues de sous-titres par défaut :** Définissez les langues de sous-titres par défaut pour une sélection automatique (séparées par des virgules, ex : `fr,en`). Disponible dans **Download Settings → Default Subtitle Languages**.
- **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`, `%(playlist_index)s` et `%(resolution)s`. Disponible dans **Download Settings → Filename Format**.
- **Forcer le format de sortie :** Forcer les téléchargements vidéo dans un format de conteneur spécifique tel que `mp4`, `webm` ou `mkv`. Disponible dans **Download Settings → Output Format Settings**.
- **Conversion du format audio :** Convertir les téléchargements audio uniquement dans les formats préférés tels que `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` ou `Best`. Disponible dans **Download Settings → Audio Format Settings**.
- **Normalisation audio :** Standardiser le volume pour les téléchargements audio uniquement à l'aide de l'EBU R128.
- **Connexions simultanées :** Augmentez considérablement la vitesse de téléchargement en téléchargeant les fichiers en plusieurs fragments simultanément. Disponible dans **Download Settings → General → Concurrent Connections** (1 par défaut, le maximum recommandé est de 8 à 10 pour éviter la limitation par IP).
</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)
- **Connexion avec cookies :** Connectez-vous à YouTube à l'aide de 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. Alternativement, extrayez les cookies manuellement :
a. Exportez les cookies de votre navigateur à l'aide d'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**.
- **Support Proxy :** Utilisez un serveur proxy pour les téléchargements, par exemple `http://<proxy-server>:<port>`
- **Mode générique :** Permet à YTSage d'analyser et de télécharger à partir de sites non-YouTube pris en charge par yt-dlp. Activez-le depuis **Download Settings → Generic Mode**.
</details>
<details>
<summary>🛠️ Outils et entretien</summary>
<summary>🛠️ Outils et maintenance</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**.
- **Commandes personnalisées :** Accédez aux fonctionnalités avancées de yt-dlp via des arguments de ligne de commande.
- **Onglet de mise à jour :** Gérez les outils de mise à jour intégrés depuis un seul endroit dans Options personnalisées :
- **Mises à jour de yt-dlp :** Vérifiez les mises à jour et basculez entre les canaux de version Stable et Nightly.
- **Vérificateur de version FFmpeg :** Vérifiez votre version de FFmpeg et ouvrez les guides d'installation.
- **Mises à jour de Deno :** Vérifiez et mettez à jour le moteur d'exécution Deno.
- **Détection de FFmpeg/yt-dlp/Deno :** Détecte automatiquement les chemins et les versions de 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 les miniatures et les statuts depuis le bouton **History**.
</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**.
YTSage prend en charge **14 langues** pour une accessibilité mondiale. Sélectionnez votre langue préférée dans **Custom Options → Language**.
### Langues prises en charge
| Langue | Codes | Langue | Codes |
|--------------|------|--------------|------|
| 🇺🇸 Anglais | `en` | Espagnol | `es` |
| Langue | Code | Langue | Code |
|----------|------|----------|------|
| 🇺🇸 Anglais | `en` | 🇪🇸 Espagnol | `es` |
| 🇸🇦 Arabe | `ar` | 🇫🇷 Français | `fr` |
| 🇩🇪 Allemand | `de` | 🇮🇳 Hindi | `hi` |
| 🇮🇩 Indonésien | `id` | 🇮🇹 Italien | `it` |
@@ -357,11 +362,11 @@ YTSage prend en charge **14 langues** pour une accessibilité mondiale. Sélecti
| 🇧🇷 Portugais | `pt` | 🇷🇺 Russe | `ru` |
| 🇹🇷 Turc | `tr` | 🇨🇳 Chinois | `zh` |
### Traductions README
### Traductions du README
| Langue | Fichier | Langue | Fichier |
|--------------|------|--------------|------|
| 🇺🇸 Anglais | [README.md](../README.md) | Espagnol | [README.es.md](README.es.md)
|----------|------|----------|------|
| 🇺🇸 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) |
@@ -369,7 +374,7 @@ YTSage prend en charge **14 langues** pour une accessibilité mondiale. Sélecti
| 🇧🇷 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 !
> 💡 **Vous souhaitez contribuer à une traduction ?** Consultez la section [Contribution](#contributing) pour nous aider à ajouter d'autres langues !
</details>
@@ -377,22 +382,22 @@ YTSage prend en charge **14 langues** pour une accessibilité mondiale. Sélecti
## 🛠️ Dépannage
<details>
<summary>Cliquez pour afficher les problèmes courants et les solutions</summary>
<summary>Cliquez pour voir 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.
- **Le tableau des formats ne s'affiche pas :** Mettez à jour yt-dlp à la dernière version et passez à yt-dlp nightly.
- **É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 cookies pour accéder au contenu privé.
- **Contenu soumis à une limite d'âge :** Connectez-vous à votre compte YouTube pour visionner les vidéos avec limite d'âge.
- **Vidéos géo-bloquées :** Envisagez d'utiliser un VPN pour contourner les restrictions régionales.
- **Vidéos supprimées :** La vidéo n'est plus disponible sur YouTube.
- **Directs (Live streams) :** Les directs ne peuvent pas être téléchargés ; attendez la fin de la diffusion.
- **Erreurs réseau :** Vérifiez votre connexion Internet et réessayez.
- **URL non valides :** Assurez-vous que l'URL est correcte et provient d'une plateforme prise en charge.
- **Contenu Premium :** Nécessite un abonnement YouTube Premium.
- **Blocages pour droits d'auteur :** Le contenu est bloqué en raison de restrictions de droits d'auteur.
- **Fichiers vidéo et audio séparés après le téléchargement :** Cela se produit lorsque FFmpeg est manquant ou non détecté. YTSage nécessite FFmpeg pour fusionner les 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 est de télécharger le fichier `YTSage-v<version>-ffmpeg.exe`, qui est livré avec FFmpeg.
---
@@ -400,134 +405,134 @@ YTSage prend en charge **14 langues** pour une accessibilité mondiale. Sélecti
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
**Pourquoi cela se produit :**
- L'heuristique des antivirus peut identifier par erreur les exécutables packagé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
**Alternatives sûres :**
- ✅ **Utilisez l'installation pip :** `pip install ytsage` (recommandé)
- ✅ **Compiler à partir des sources** : en suivant ce [guide](.github/CI_CD_README.md)
- ✅ **Mettre l'application en liste blanche** 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.
#### 🍎 macOS : "L'application est endommagée et ne peut pas être ouverte"
Si vous voyez cette erreur sur macOS Sonoma ou une version plus récente, 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 :
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.
3. **Faites glisser le fichier `YTSage.app`** depuis votre fenêtre Finder et déposez-le directement dans la fenêtre du Terminal. Cela collera automatiquement le chemin correct du fichier.
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`
#### **Emplacements de configuration (Avancé)**
- **Windows :** `%LOCALAPPDATA%\YTSage`
- **macOS :** `~/Library/Application Support/YTSage`
- **Linux :** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
## 💖 Parrainer
## 💖 Sponsor
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.
Si YTSage vous fait gagner du temps, envisagez de sponsoriser le projet. Le parrainage aide à 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.
- GitHub Sponsors : https://github.com/sponsors/oop7
- Le lien de parrainage est également disponible directement dans l'application via la boîte de dialogue À propos.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Contribuer
## 👥 Contribution
Nous apprécions les contributions ! Voici comment vous pouvez aider :
Nous accueillons les contributions avec plaisir ! Voici comment vous pouvez aider :
1. 🍴 Forkez le référentiel
2. 🌿 Créez votre branche de fonctionnalités :
1. 🍴 Forkez le dépôt
2. 🌿 Créez votre branche de fonctionnalité :
```bash
git checkout -b feature/AmazingFeature
```
3. 💾 Validez vos modifications :
3. 💾 Committez vos modifications :
```bash
git commit -m 'Add some AmazingFeature'
```
4. 📤 Push vers l'agence :
4. 📤 Pushez vers la branche :
```bash
git push origin feature/AmazingFeature
```
5. 🔄 Ouvrir une Pull Request
5. 🔄 Ouvrez une Pull Request
### 🌍 Contribuer aux traductions
- Mettez à jour le fichier README localisé correspondant (par exemple `README.es.md`)
- Mettez à jour le fichier README localisé correspondant (par exemple `readme-translations/README.fr.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`
- Si votre langue est manquante, commencez par `README.md` et créez `README.<code>.md`
<details>
<summary>📂 Structure du projet</summary>
## YTSage Structure du projet
## YTSage - Structure du projet
Ce document décrit la structure des dossiers organisés de YTSage.
Ce document décrit la structure organisée des dossiers 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
├── 📁 .github/ # Configuration GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # Modèles de tickets
│ │ └── 🐛-bug-report.md # Modèle de rapport de bug
│ ├─── 📁 workflows/ # Workflows GitHub Actions
│ │ ├── build-linux.yml # Workflow de build Linux
│ │ ├── build-macos.yml # Workflow de build macOS
│ │ │── build-windows.yml # Workflow de build Windows
| | └── release-all.yml # Workflow de release master
│ └── 📄 CI_CD_README.md # Documentation CI/CD
├── 📁 branding/ # Actifs de marque (Captures d'écran, SVGs)
│ ├── 📁 icons/ # Icônes de l'application
│ ├── 📁 screenshots/ # Captures d'écran pour la documentation
│ └── 📁 svg/ # Actifs SVG
├── 📄 LICENSE # Fichier de licence
├── 📄 pyproject.toml # Métadonnées du projet etpendances
├── 📄 README.md # Documentation du projet
├── 📄 requirements.txt # pendances Python (dev)
└── 📁 ytsage/ # Paquet source
├── 📁 assets/ # Actifs d'exécution
│ ├── 📁 Icon/ # Icônes de l'application
│ └── 📁 sound/ # Fichiers audio
├── 📁 languages/ # Fichiers de localisation
│ ├── 📄 ar.json # Traduction arabe
│ ├── 📄 de.json # Traduction allemande
│ ├── 📄 en.json # Traduction anglaise
│ └── ... # Autres langues
├── 📁 core/ # Logique métier principale
│ ├── 📄 __init__.py # Initialisation du paquet core
│ ├── 📄 ytsage_deno.py # Intégration Deno
│ ├── 📄 ytsage_downloader.py # Fonctionnalité de téléchargement
│ ├── 📄 ytsage_ffmpeg.py # Intégration FFmpeg
│ ├── 📄 ytsage_utils.py # Fonctions utilitaires
│ └── 📄 ytsage_yt_dlp.py # Intégration yt-dlp
├── 📁 gui/ # Composants de l'interface utilisateur
│ ├── 📄 __init__.py # Initialisation du paquet GUI
│ ├── 📄 ytsage_gui_main.py # Fenêtre principale de l'application
│ └── 📁 ytsage_gui_dialogs/ # Classes de dialogues
├── 📁 utils/ # Modules utilitaires
│ ├── 📄 __init__.py # Initialisation du paquet utils
│ ├── 📄 ytsage_config_manager.py # Gestion de la configuration
│ └── 📄 ytsage_logger.py # Utilitaires de log
├── 📄 __init__.py # Point d'entrée du paquet
└── 📄 main.py # Script d'exécution principal
```
</details>
## ⭐️ Histoire des étoiles
## ⭐️ Historique des étoiles
<div align="center">
## Historique des étoiles
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,7 +546,7 @@ YTSage/
## 📜 Licence
Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus de détails.
Ce projet est sous licence MIT - voir le fichier [LICENSE](LICENSE) pour plus de détails.
## 🙏 Remerciements
@@ -550,7 +555,7 @@ Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus
<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>
<p>Un grand merci à 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>
@@ -560,27 +565,28 @@ Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
<td>Traitement multimédia</td>
<td>Traitement média</td>
</tr>
<tr>
<td><a href="https://deno.com/">Déno</a></td>
<td><a href="https://deno.com/">Deno</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 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>
<td>Framework GUI</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/">Oreiller</a></td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Traitement d'images</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">demandes</a></td>
<td>Demandes HTTP</td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>Requêtes HTTP</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">emballage</a></td>
<td>Version et gestion des packages</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Gestion des versions et des paquets</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
@@ -588,11 +594,11 @@ Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Journalisation</td>
<td>Logging</td>
</tr>
<tr class="section"><th colspan="2">Actifs et contributeurs</th></tr>
<tr class="section"><th colspan="2">Actifs & Contributeurs</th></tr>
<tr>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nouvelle notification 09 par Universfield</a></td>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 by Universfield</a></td>
<td>Son de notification</td>
</tr>
<tr>
@@ -605,7 +611,7 @@ Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus
</details>
## ⚠️ Avis de non-responsabilité
## ⚠️ Clause 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.
@@ -613,6 +619,6 @@ Cet outil est destiné à un usage personnel uniquement. Veuillez respecter les
<div align="center">
Réalisé avec ❤️ par [oop7](https://github.com/oop7)
Fait avec ❤️ par [oop7](https://github.com/oop7)
</div>
+240 -233
View File
@@ -12,29 +12,29 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/oop7)
**स्वच्छ PySide6 इंटरफ़ेस वाला एक आधुनिक YouTube डाउनलोडर।**
किसी भी गुणवत्ता में वीडियो डाउनलोड करें, ऑडियो निकालें, उपशीर्षक प्राप्त करें और बहुत कुछ करें
**एक आधुनिक YouTube डाउनलोडर, एक स्वच्छ PySide6 इंटरफ़ेस के साथ**
किसी भी गुणवत्ता में वीडियो डाउनलोड करें, ऑडियो निकालें, उपशीर्षक प्राप्त करें, और बहुत कुछ।
### 🌍 रीडमी भाषाएँ
### 🌍 README भाषाएँ
अंग्रेज़ी: [EN](../README.md)
| उत्तर: [AR](README.ar.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)
| स्पेनिश: [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)
| रूसी: [RU](README.ru.md)
| तुर्की: [TR](README.tr.md)
| उत्तर: [ZH](README.zh.md)
| चीनी: [ZH](README.zh.md)
<p align="center">
<a href="#installation">स्थापना</a> •
<a href="#features">विशेषताए</a> •
<a href="#features">विशेषताए</a> •
<a href="#usage">उपयोग</a> •
<a href="#screenshots">स्क्रीनशॉट</a> •
<a href="#troubleshooting">समस्या निवारण</a> •
@@ -49,12 +49,12 @@
<a id="why-ytsage"></a>
## ❓ YTSage क्यों?
YTSage उन उपयोगकर्ताओं के लिए डिज़ाइन किया गया है जो **सरल लेकिन शक्तिशाली YouTube डाउनलोडर** चाहते हैं। अन्य उपकरणों के विपरीत, यह प्रदान करता है:
YTSage उन उपयोगकर्ताओं के लिए डिज़ाइन किया गया है जो एक **सरल लेकिन शक्तिशाली YouTube डाउनलोडर** चाहते हैं। अन्य उपकरणों के विपरीत, यह प्रदान करता है:
- एक साफ़, आधुनिक PySide6 इंटरफ़ेस
- वीडियो, ऑडियो और उपशीर्षक के लिए एक-क्लिक डाउनलोड
- स्पॉन्सरब्लॉक, उपशीर्षक विलय और प्लेलिस्ट चयन जैसी उन्नत सुविधाएँ
- YouTube से परे yt-dlp-समर्थित साइटों के लिए वैकल्पिक जेनेरिक मोड
- एक आधुनिक और स्वच्छ PySide6 इंटरफ़ेस
- वीडियो, ऑडियो और उपशीर्षक के लिए वन-क्लिक डाउनलोड
- SponsorBlock, उपशीर्षक मर्जिंग, और प्लेलिस्ट चयन जैसी उन्नत सुविधाएँ
- YouTube से इतर yt-dlp द्वारा समर्थित साइटों के लिए वैकल्पिक जेनेरिक मोड
- क्रॉस-प्लेटफ़ॉर्म समर्थन और आसान स्थापना
<a id="features"></a>
@@ -62,31 +62,32 @@ YTSage उन उपयोगकर्ताओं के लिए डिज़
<div align="center">
| मुख्य विशेषताए | उन्नत सुविधाएँ | अतिरिक्त सुविधाएँ |
|------------------------------------------------|------------------------------------------------|------------------------------------------------|
| 🎥 प्रारूप तालिका | 🚫प्रायोजकब्लॉक एकीकरण | 🎞️ एफपीएस/एचडीआर डिस्प्ले |
| 🎵 ऑडियो निष्कर्षण | 📝 बहु-उपशीर्षक चुनें और मर्ज करें | 🔄 ऑटो-अपडेट yt-dlp |
| ✨ सरल यूआई | 💾 विवरण और थंबनेल सहेजें | 🛠️ FFmpeg/yt-dlp/Deno डिटेक्शन |
| 📋 प्लेलिस्ट समर्थन और चयनकर्ता | 🚀 गति सीम | ⚙️ कस्टम कमांड |
| 📑 अध्याय एम्बेड करें | ✂️ वीडियो अनुभाग ट्रिम करें | 🍪 कुकीज़ के साथ लॉगिन करें |
| 📜इतिहास डाउनलोड करें | 🔄रिलीज़ चैनल चयन | 🌐 प्रॉक्सी सपोर्ट |
| 🎚️ ऑडियो प्रारूप रूपांतरण | 🎬 वीडियो प्रारूप सेटिंग्स | 🆙 बिल्ट-इन अपडेट टैब |
| बुनियादी विशेषताए | उन्नत विशेषताएँ | अतिरिक्त विशेषताएँ |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 प्रारूप तालिका | 🚫 SponsorBlock एकीकरण | 🎞️ FPS/HDR डिस्प्ले |
| 🎵 ऑडियो निष्कर्षण | 📝 उपशीर्षक चयन और मर्जिंग | 🔄 ऑटो yt-dlp अपडेट |
| ✨ सरल यूजर इंटरफेस | 💾 विवरण और थंबनेल सहेजें | 🛠️ FFmpeg/yt-dlp/Deno डिटेक्शन |
| 📋 प्लेलिस्ट समर्थन और चयनकर्ता | 🚀 गति सीमित करने वाला | ⚙️ कस्टम कमांड |
| 📑 अध्याय एकीकरण | ✂️ वीडियो अनुभाग ट्रिम करें | 🍪 कुकी लॉगिन |
| 📜 डाउनलोड इतिहास | 🔄 रिलीज़ चैनल चयन | 🌐 प्रॉक्सी समर्थन |
| 🎚️ ऑडियो प्रारूप रूपांतरण | 🎬 वीडियो प्रारूप सेटिंग्स | 🆙 एकीकृत अपडेट टैब |
| 🌍 जेनेरिक मोड | 🔊 ऑडियो सामान्यीकरण (EBU R128) | 🌍 14 भाषाओं में स्थानीयकरण |
| 💾 प्लेलिस्ट निर्यात | ⚙️ डिफ़ॉल्ट गुणवत्ता और उपशीर्षक | |
</div>
<a id="installation"></a>
## 🚀 स्थापना
### ⚡ त्वरित इंस्टाल (अनुशंसित)
### ⚡ त्वरित स्थापना (अनुशंसित)
PyPI से YTSage इंस्टॉल करें:
PyPI के माध्यम से YTSage स्थापित करें:
```bash
pip install ytsage
```
<details>
<summary>🔄मौजूदा इंस्टॉलेशन को अपडेट करें</summary>
<summary>🔄 मौजूदा स्थापना को अपडेट करें</summary>
```bash
pip install --upgrade ytsage
@@ -94,87 +95,87 @@ pip install --upgrade ytsage
</details>
फिर ऐप लॉन्च करें:
फिर एप्लिकेशन चलाएँ:
```bash
ytsage
```
### 📦 पूर्व-निर्मित निष्पादनयोग्य
### 📦 प्री-बिल्ट एक्जीक्यूटेबल्स (एक्ज़ीक्यूटेबल्स)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 नवीनतम रिलीज़ डाउनलोड करें](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 खिड़कियाँ
#### 🪟 Windows
| प्रारूप | विवरण |
|-------|----|
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | मानक इंस्टॉलर |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg बंडल के साथ |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | पोर्टेबल संस्करण, किसी इंस्टॉलेशन की आवश्यकता नहीं |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg के साथ पोर्टेबल, ज़िपित |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg के साथ |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | पोर्टेबल संस्करण, स्थापना की आवश्यकता नहीं है |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg के साथ पोर्टेबल, ज़िप्ड |
<details>
<summary>🛠️ इंस्टालेशन चरण</summary>
<summary>🛠️ स्थापना चरण</summary>
1. **EXE इंस्टॉलर (`.exe`)**: फ़ाइल पर डबल-क्लिक करें और सेटअप विज़ार्ड का पालन करें।
2. **पोर्टेबल संस्करण (`.zip`)**: संग्रह को अपने इच्छित स्थान पर निकालें और `ytsage.exe` चलाएँ।
3. **एफएफएमपीईजी बंडल**: यदि आपके सिस्टम पर एफएफएमपीईजी स्थापित नहीं है तो एफएफएमपीईजी बंडल संस्करण चुनें।
2. **पोर्टेबल संस्करण (`.zip`)**: संग्रह को इच्छित स्थान पर निकालें और `ytsage.exe` चलाएँ।
3. **बिल्ट-इन FFmpeg**: यदि आपके सिस्टम पर FFmpeg स्थापित नहीं है, तो बिल्ट-इन FFmpeg वाले संस्करण चुनें।
</details>
#### 🐧 लिनक्स
#### 🐧 Linux
| प्रारूप | विवरण |
|-------|----|
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | डेबियन पैकेज |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | ऐपइमेज, पोर्टेबल |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | आरपीएम पैकेज |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | फ़्लैटपैक बंडल |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, पोर्टेबल |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM पैकेज |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak बंडल |
<details>
<summary>🛠️ इंस्टालेशन चरण</summary>
<summary>🛠️ स्थापना चरण</summary>
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # यदि आवश्यक हो तो गायब निर्भरताओं को ठीक करें
```
- **आरपीएम (`.rpm`)**:
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
- **ऐपइमेज (`.AppImage`)**:
- **AppImage (`.AppImage`)**:
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **फ्लैटपैक**: फ़्लैटहब पर निर्देशों का पालन करें या चलाएँ:
- **Flatpak**: Flathub पर निर्देशों का पालन करें या चलाएँ:
```bash
flatpak install flathub io.github.oop7.ytsage
```
</details>
#### 🍎 मैकओएस
#### 🍎 macOS
| प्रारूप | विवरण |
|-------|----|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | एप्पल सिलिकॉन के लिए ज़िप्ड एप्लिकेशन |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | एप्पल सिलिकॉन के लिए डिस्क छवि इंस्टॉलर |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon के लिए ज़िप्ड ऐप |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon के लिए डिस्क इमेज इंस्टॉलर |
<details>
<summary>🛠️ इंस्टालेशन चरण</summary>
<summary>🛠️ स्थापना चरण</summary>
- **डीएमजी इंस्टॉलर (`.dmg`)**: माउंट करने के लिए डबल-क्लिक करें, फिर `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में खींचें।
- **ऐप आर्काइव (`.zip`)**: ज़िप निकालें और `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में ले जाए
- **DMG इंस्टॉलर (`.dmg`)**: माउंट करने के लिए डबल-क्लिक करें, फिर `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में खींचें।
- **ऐप आर्काइव (`.zip`)**: ज़िप निकालें और `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में ले जाए
*ध्यान दें: यदि आपको "ऐप क्षतिग्रस्त है" त्रुटि ती है, तो नीचे [macOS troubleshooting section](#troubleshooting) देखें।*
*नोट: यदि आपको "ऐप क्षतिग्रस्त है" त्रुटि मिलती है, तो नीचे macOS समस्या निवारण अनुभाग देखें।*
</details>
---
<details>
<summary>💻 स्रोत से मैन्युअल इंस्टालेशन</summary>
<summary>💻 स्रोत से मैन्युअल स्थापना</summary>
### 1. रिपॉजिटरी को क्लोन करें
### 1. रिपॉजिटरी क्लोन करें
```bash
git clone https://github.com/oop7/YTSage.git
@@ -183,13 +184,13 @@ cd YTSage
### 2. निर्भरताएँ स्थापित करें
#### ⚡ यूवी के साथ
#### ⚡ uv के साथ
```bash
uv pip install .
```
#### 📦 या मानक पाइप के साथ
#### 📦 या मानक pip के साथ
```bash
pip install .
@@ -209,146 +210,151 @@ python -m ytsage.main
<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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="डाउनलोड सेटिंग्स" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="प्लेलिस्ट डाउनलोड" 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>
<td><img src="../branding/screenshots/audio_format.png" alt="ऑडियो प्रारूप चयन" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="कस्टम विकल्प" width="400"/></td>
</tr>
<tr>
<td align="center"><em>ऑडियो फॉर्मेट</em></td>
<td align="center"><em>ऑडियो प्रारूप</em></td>
<td align="center"><em>कस्टम विकल्प</em></td>
</tr>
</table>
</div><a id="usage"></a>
</div>
## 📖 प्रयोग
<a id="usage"></a>
## 📖 उपयोग
<details>
<summary>🎯 मूल उपयोग</summary>
<summary>🎯 बुनियादी उपयोग</summary>
1. **YTSage लॉन्च करें**
2. **यूट्यूब यूआरएल चिपकाएँ** (या "यूआरएल चिपकाएँ" बटन का उपयोग करें)
3. **"विश्लेषण करें" पर क्लिक करें**
2. **YouTube URL पेस्ट करें** (या "Paste URL" बटन का उपयोग करें)
3. **"Analyze" पर क्लिक करें**
4. **प्रारूप चुनें:**
- वीडियो डाउनलोड के लिए `Video`
- ऑडियो निष्कर्षण के लिए `Audio Only`
5. **विकल्प चुनें:**
- उपशीर्षक सक्षम करें और भाषा चुनें
- उपशीर्षक मर्ज सक्षम करें
- उपशीर्षक मर्जिंग सक्षम करें
- थंबनेल सहेजें
- प्रायोजक खंड हटाएँ
- प्रायोजित अनुभाग हटाएँ
- विवरण सहेजें
- अध्याय एम्बेड करें
6. **आउटपुट डायरेक्टरी चुनें**
7. **"डाउनलोड" पर क्लिक करें**
6. **आउटपुट निर्देशिका चुनें**
7. **"Download" पर क्लिक करें**
> 💡 डिफ़ॉल्ट डाउनलोड निर्देशिका उपयोगकर्ता का "डाउनलोड" फ़ोल्डर है।
> 💡 डिफ़ॉल्ट डाउनलोड निर्देशिका उपयोगकर्ता का "Downloads" फ़ोल्डर है।
</details>
<details>
<summary>📋 प्लेलिस्ट डाउनलोड</summary>
1. **प्लेलिस्ट यूआरएल चिपकाएँ**
2. **"विश्लेषण करें" पर क्लिक करें**
3. **प्लेलिस्ट चयनकर्ता से वीडियो चुनें (वैकल्पिक, सभी के लिए डिफ़ॉल्ट)**
1. **प्लेलिस्ट URL पेस्ट करें**
2. **"Analyze" पर क्लिक करें**
3. **प्लेलिस्ट चयनकर्ता से वीडियो चुनें (वैकल्पिक, डिफ़ॉल्ट रूप से सभी)**
4. **वांछित प्रारूप/गुणवत्ता चुनें**
5. **"डाउनलोड" पर क्लिक करें**
5. **"Download" पर क्लिक करें**
> 💡 एप्लिकेशन स्वचालित रूप से डाउनलोड कतार को संभालता है
> 💡 एप्लिकेशन डाउनलोड कतार को स्वचालित रूप से प्रबंधितता है, और आप प्लेलिस्ट प्रविष्टियों को `.txt`, `.csv`, `.m3u`, या `.json` फ़ाइलों के रूप में निर्यात कर सकते हैं।
</details>
<details>
<summary>🌍 गैर-यूट्यूब साइटों के लिए जेनेरिक मोड</summary>
<summary>🌍 गैर-YouTube साइटों के लिए जेनेरिक मोड</summary>
जब आप चाहते हैं कि YTSage, yt-dlp द्वारा समर्थित साइटों, जैसे कि डेलीमोशन, CBC जेम, टिकटॉक और अन्य से यूआरएल स्वीकार करे, तो जेनेरिक मोड का उपयोग करें
ेनेरिक मोड (Generic Mode) का उपयोग तब करें जब आप चाहते हैं कि YTSage yt-dlp द्वारा समर्थित साइटों जैसे Dailymotion, CBC Gem, TikTok और अन्य से URL स्वीकार करे।
इसका उपयोग कैसे करें:
1. `Download Settings` खोलें।
2. `Generic Mode` सक्षम करें।
3. एक समर्थित गैर-यूट्यूब वीडियो या प्लेलिस्ट यूआरएल चिपकाएँ
3. एक समर्थित वीडियो या प्लेलिस्ट URL पेस्ट करें जो YouTube नहीं है
4. `Analyze` पर क्लिक करें।
5. एक प्रारूप चुनें और हमेशा की तरह डाउनलोड करें।
टिप्पणियाँ:
नोट्स:
- जेनेरिक मोड केवल YTSage के अंदर URL सत्यापन को बदलता है। लक्ष्य साइट को अभी भी आपके स्थापित yt-dlp संस्करण द्वारा समर्थित होन चाहिए।
- कुछ साइटों को एक्सट्रैक्टर के आधार पर कुकीज़, एक लॉगिन सत्र, एक प्रॉक्सी, या अतिरिक्त yt-dlp तर्क की आवश्यकता होती है।
- यदि कोई साइट विफल हो जाती है, तो समस्या की रिपोर्ट करने से पहले अंतर्निहित अपडेट टैब से yt-dlp को अपडेट करें।
- जेनेरिक मोड केवल YTSage के अंदर URL सत्यापन को बदलता है। लक्ष्य साइट अभी भी आपके स्थापित yt-dlp संस्करण द्वारा समर्थित होन चाहिए।
- कुछ साइटों को एक्सट्रैक्टर के आधार पर कुकीज़, लॉगिन, प्रॉक्सी या अतिरिक्त yt-dlp तर्कों की आवश्यकता होती है।
- यदि कोई साइट विफल हो जाती है, तो समस्या की रिपोर्ट करने से पहले एकीकृत अपडेट टैब से yt-dlp को अपडेट करें।
</details>
<details>
<summary>🧰 मीडिया और डाउनलोड विकल्प</summary>
- **उपशीर्षक विकल्प:** भाषाओं को फ़िल्टर करें और वीडियो फ़ाइल में उपशीर्षक एम्बेड करें
- **उपशीर्षक मर्ज:** हार्डकोडेड उपशीर्षक के लिए उपशीर्षक को वीडियो फ़ाइल में मर्ज करें
- **विवरण सहेजें:** वीडियो विवरण को टेक्स्ट फ़ाइल के रूप में सहेजें
- **थंबनेल सहेजें:** वीडियो थंबनेल को एक छवि फ़ाइल के रूप में सहेजें
- **अध्याय एम्बेड करें:**संगत वीडियो प्लेयर के लिए मेटाडेटा के रूप में अध्याय मार्कर एम्बेड करें
- **प्रायोजक खंड हटाए:** SponsorBlock का उपयोग करके वीडियो से प्रायोजक खंड हटाए
- **वीडियो ट्रिम करें:** `HH:MM:SS` प्रारूप में समय सीमा निर्दिष्ट करके वीडियो के केवल विशिष्ट भागों को डाउनलोड करें
- **उपशीर्षक विकल्प:** भाषाओं को फ़िल्टर करें और उपशीर्षक को वीडियो फ़ाइल में एम्बेड करें
- **उपशीर्षक मर्जिंग:** हार्डकोडेड उपशीर्षक के लिए वीडियो फ़ाइल में उपशीर्षक मर्ज करें
- **विवरण सहेजें:** वीडियो विवरण को टेक्स्ट फ़ाइल के रूप में सहेजें
- **थंबनेल सहेजें:** वीडियो थंबनेल को छवि फ़ाइल के रूप में सहेजें
- **अध्याय एम्बेड करें:** संगत वीडियो प्लेयर के लिए मेटाडेटा के रूप में अध्याय मार्कर शामिल करें
- **प्रायोजित अनुभाग हटाए:** 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 का उपयोग करके केवल-ऑडियो डाउनलोड के लिए वॉल्यूम को मानकीकृत करें
- **गति सीमित करने वाला:** डाउनलोड गति को सीमित करें, उदाहरण के लिए `500K` 500 KB/s के लिए
- **डाउनलोड पथ सहेजें:** भविष्य के डाउनलोड के लिए डिफ़ॉल्ट डाउनलोड पथ सहेजता है। **Download Settings → Download Path** में उपलब्ध है।
- **डिफ़ॉल्ट वीडियो रिज़ॉल्यूशन:** स्वचालित चयन के लिए अपना पसंदीदा वीडियो रिज़ॉल्यूशन सेट करें (जैसे 1080p, 720p)। **Download Settings → Default Video Resolution** में उपलब्ध है।
- **डिफ़ॉल्ट उपशीर्षक भाषाएँ:** स्वचालित चयन के लिए डिफ़ॉल्ट उपशीर्षक भाषाएँ सेट करें (अल्पविराम से अलग, जैसे `hi,en`)। **Download Settings → Default Subtitle Languages** में उपलब्ध है।
- **फ़ाइल नाम प्रारूप:** `%(title)s`, `%(uploader)s`, `%(playlist_index)s` और `%(resolution)s` जैसे चरों का उपयोग करके आउटपुट फ़ाइल नाम प्रारूप को अनुकूलित करें। **Download Settings → Filename Format** में उपलब्ध है
- **आउटपुट प्रारूप बाध्य करें:** वीडियो डाउनलोड को `mp4`, `webm` या `mkv` जैसे विशिष्ट कंटेनर प्रारूप में बाध्य करें। **Download Settings → Output Format Settings** में उपलब्ध है।
- **ऑडियो प्रारूप रूपांतरण:** केवल ऑडियो डाउनलोड को `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, या `Best` जैसे पसंदीदा प्रारूपों में परिवर्तित करें। **Download Settings → Audio Format Settings** में उपलब्ध है।
- **ऑडियो सामान्यीकरण:** EBU R128 का उपयोग करके केवल ऑडियो डाउनलोड के लिए वॉल्यूम को मानकीकृत करें।
- **एक साथ कनेक्शन:** एक साथ कई टुकड़ों में फ़ाइलें डाउनलोड करके डाउनलोड गति को काफी बढ़ाएँ। **Download Settings → General → Concurrent Connections** (डिफ़ॉल्ट 1, IP ब्लॉक से बचने के लिए अधिकतम 8-10 अनुशंसित) में उपलब्ध है।
</details>
<details>
<summary>🌐 पहुंच और नेटवर्क</summary>
<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 द्वारा समर्थित गैर-यूट्यूब साइटों से विश्लेषण और डाउनलोड करने की अनुमति दे। इसे **डाउनलोड सेटिंग्स → जेनेरिक मोड** से सक्षम करें।
- **कुकी लॉगिन:** निजी सामग्री तक पहुचने के लिए कुकीज़ का उपयोग करके YouTube में लॉगिन करें।
उपयोग:
1. **अनुशंसित:** ऐप में बिल्ट-इन `Extract cookies from browser` विकल्प का उपयोग करें, फिर अपना ब्राउज़र और वैकल्पिक रूप से प्रोफ़ाइल चुनें।
2. वैकल्पिक रूप से, कुकीज़ मैन्युअल रूप से निकालें:
a. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) जैसे एक्सटेंशन का उपयोग करके अपने ब्राउज़र से कुकीज़ निर्यात करें
b. नेटस्केप प्रारूप में कुकीज़ कॉपी करें
c. `cookies.txt` नामक फ़ाइल बनाए और कुकीज़ पेस्ट करें
d. ऐप में `cookies.txt` फ़ाइल चुनें
- **प्रॉक्सी समर्थन:** डाउनलोड के लिए प्रॉक्सी सर्वर का उपयोग करें, जैसे `http://<proxy-server>:<port>`
- **जेनेरिक मोड:** YTSage को yt-dlp द्वारा समर्थित गैर-YouTube साइटों से विश्लेषण और डाउनलोड करने की अनुमति देता है। इसे **Download Settings → Generic Mode** से सक्षम करें।
</details>
<details>
<summary>🛠️ उपकरण और रखरखाव</summary>
- **कस्टम कमांड:** कमांड लाइन तर्कों के माध्यम से उन्नत yt-dlp सुविधाओं तक पहुचें
- **अपडेट टैब:** कस्टम विकल्पों में एक ही स्थान से अंतर्निहित अपडेट टूल प्रबंधित करें:
- **yt-dlp अपडेट:** अपडेट क जाच करें और स्थिर और रात्रिकाली रिलीज़ चैनलों के बीच स्विच करें
- **एफएफएमपीईजी संस्करण जाचकर्ता:** अपना एफएफएमपीईजी संस्करण जांचें और इंस्टॉलेशन गाइड खोलें
- **डेनो अपडेट:** डेनो रनटाइम की जाच करें और अपडेट करें
- **FFmpeg/yt-dlp/Deno डिटेक्शन:** अबाउट डायलॉग से FFmpeg, yt-dlp, और Deno पथ और संस्करणों का स्वचालित रूप से पता लगाएं
- **डाउनलोड इतिहास:** **इतिहास** बटन से थंबनेल और स्थितियों के साथ पिछले डाउनलोड देखें।
- **कस्टम कमांड:** कमांड-लाइन तर्कों के माध्यम से उन्नत yt-dlp सुविधाओं तक पहुचें
- **अपडेट टैब:** कस्टम विकल्पों में एक ही स्थान से बिल्ट-इन अपडेट टूल प्रबंधित करें:
- **yt-dlp अपडेट:** अपडेट के लिए जाच करें और स्टेबल और नाइटली रिलीज़ चैनलों के बीच स्विच करें
- **FFmpeg संस्करण जाचकर्ता:** अपने FFmpeg संस्करण को सत्यापित करें और स्थापना मार्गदर्शिकाएँ खोलें
- **Deno अपडेट:** Deno रनटाइम की जाच करें और अपडेट करें
- **FFmpeg/yt-dlp/Deno डिटेक्शन:** अबाउट डायलॉग से FFmpeg, yt-dlp और Deno के पथ और संस्करण का स्वचालित रूप से पता लगाता है
- **डाउनलोड इतिहास:** **History** बटन से थंबनेल और स्थितियों के साथ पिछले डाउनलोड देखें।
</details>
<details>
<summary>🌍 स्थानीयकरण</summary>
YTSage दुनिया भर में पहुच के लिए **14 भाषाओं** का समर्थन करता है। **कस्टम विकल्प → भाषा** से अपनी पसंदीदा भाषा चुनें।
YTSage वैश्विक पहुच के लिए **14 भाषाओं** का समर्थन करता है। **Custom Options → Language** में अपनी पसंदीदा भाषा चुनें।
### समर्थित भाषाएँ
| भाषा | कोड | भाषा | कोड |
|-------|------|-------|------|
| 🇺🇸 अंग्रेजी | `en` | 🇪🇸स्पेनिश | `es` |
|----------|------|----------|------|
| 🇺🇸 अंग्रेजी | `en` | 🇪🇸 स्पेनिश | `es` |
| 🇸🇦 अरबी | `ar` | 🇫🇷 फ्रेंच | `fr` |
| 🇩🇪 जर्मन | `de` | 🇮🇳 हिंदी | `hi` |
| 🇮🇩 इंडोनेशियाई | `id` | 🇮🇹 इतालवी | `it` |
@@ -359,8 +365,8 @@ YTSage दुनिया भर में पहुंच के लिए **14
### README अनुवाद
| भाषा | फ़ाइल | भाषा | फ़ाइल |
|-------|------|-------|------|
| 🇺🇸 अंग्रेजी | [README.md](../README.md) | 🇪🇸स्पेनिश | [README.es.md](README.es.md)
|----------|------|----------|------|
| 🇺🇸 अंग्रेजी | [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) |
@@ -368,7 +374,7 @@ YTSage दुनिया भर में पहुंच के लिए **14
| 🇧🇷 पुर्तगाली | [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) अनुभाग देखें!
> 💡 **अनुवाद में मदद करना चाहते हैं?** अधिक भाषाओं को जोड़ने में हमारी सहायता करने के लिए [योगदान](#contributing) अनुभाग देखें!
</details>
@@ -376,157 +382,157 @@ YTSage दुनिया भर में पहुंच के लिए **14
## 🛠️ समस्या निवारण
<details>
<summary>सामान्य समस्यां और समाधान देखने के लिए क्लिक करें</summary>
<summary>सामान्य समस्यां और समाधानों को देखने के लिए क्लिक करें</summary>
- **प्रारूप तालिका प्रदर्शित नहीं हो रही है:** yt-dlp को नवीनतम संस्करण में अपडेट करें, और रात में yt-dlp पर स्विच करें।
- **डाउनलोड विफल:** अपना इंटरनेट कनेक्शन जाचें और सुनिश्चित करें कि वीडियो उपलब्ध है।
- **प्रारूप तालिका दिखाई नहीं दे रही है:** yt-dlp को नवीनतम संस्करण में अपडेट करें और yt-dlp नाइटली पर स्विच करें।
- **डाउनलोड विफल:** अपना इंटरनेट कनेक्शन जाचें और सुनिश्चित करें कि वीडियो उपलब्ध है।
- **विशिष्ट डाउनलोड त्रुटियाँ:**
- **निजी वीडियो:** निजी सामग्री तक पहुचने के लिए कुकी प्रमाणीकरण का उपयोग करें।
- **आयु-प्रतिबंधित सामग्री:** आयु-प्रतिबंधित वीडियो देखने के लिए YouTube खाते में लॉगिन करें।
- **जियो-अवरुद्ध वीडियो:** क्षेत्रीय प्रतिबंधों को बायपास करने के लिए वीपीएन का उपयोग करने पर विचार करें।
- **हटाए गए/हटाए गए वीडियो:** वीडियो अब YouTube पर उपलब्ध नहीं है।
- **लाइव स्ट्रीम:** लाइव स्ट्रीम डाउनलोड नहीं की जा सकतीं; स्ट्रीम समाप्त होने क प्रतीक्षा करें.
- **नेटवर्क त्रुटिया:** अपना इंटरनेट कनेक्शन जाचें और पुनः प्रयास करें।
- **अमान्य यूआरएल:** सुनिश्चित करें कि यूआरएल सही है और समर्थित प्लेटफॉर्म से है।
- **निजी वीडियो:** निजी सामग्री तक पहुचने के लिए कुकी प्रमाणीकरण का उपयोग करें।
- **आयु-प्रतिबंधित सामग्री:** आयु-प्रतिबंधित वीडियो देखने के लिए अपने YouTube खाते में लॉगन करें।
- **जियो-ब्लॉक किए गए वीडियो:** क्षेत्रीय प्रतिबंधों को दरकिनार करने के लिए VPN का उपयोग करने पर विचार करें।
- **हटाए गए वीडियो:** वीडियो अब YouTube पर उपलब्ध नहीं है।
- **लाइव स्ट्रीम:** प्रसारण के दौरान लाइव स्ट्रीम डाउनलोड नहीं की जा सकतीं; स्ट्रीम समाप्त होने क प्रतीक्षा करें
- **नेटवर्क त्रुटिया:** अपना इंटरनेट कनेक्शन जाचें और पुनः प्रयास करें।
- **अमान्य URL:** सुनिश्चित करें कि URL सही है और समर्थित प्लेटफॉर्म से है।
- **प्रीमियम सामग्री:** YouTube प्रीमियम सदस्यता की आवश्यकता है।
- **कॉपीराइट ब्लॉक:** कॉपीराइट प्रतिबंधों के कारण सामग्री अवरुद्ध है।
- **डाउनलोड के बाद वीडियो और ऑडियो फ़ाइल को अलग करें:** ऐसा तब होता है जब FFmpeg गायब है या पता नहीं चला है। उच्च गुणवत्ता वाले वीडियो और ऑडियो स्ट्रीम को मर्ज करने के लिए YTSage को FFmpeg की आवश्यकता होती है।
- **समाधान:** सुनिश्चित करें कि FFmpeg आपके सिस्टम के PATH में स्थापित और पहुंच योग्य है। विंडोज उपयोगकर्ताओं के लिए, सबसे आसान विकल्प `YTSage-v<version>-ffmpeg.exe` फ़ाइल डाउनलोड करना है, जो FFmpeg के साथ बंडल में आती है।
- **डाउनलोड के बाद वीडियो और ऑडियो फ़ाइलं अलग हैं:** यह तब होता है जब FFmpeg गायब होता है या पता नहीं चल पाता है। उच्च गुणवत्ता वाले वीडियो और ऑडियो स्ट्रीम को मर्ज करने के लिए YTSage को FFmpeg की आवश्यकता होती है।
- **समाधान:** सुनिश्चित करें कि FFmpeg स्थापित है और आपके सिस्टम PATH में सुलभ है। विंडोज उपयोगकर्ताओं के लिए, सबसे आसान विकल्प `YTSage-v<version>-ffmpeg.exe` फ़ाइल डाउनलोड करना है, जो FFmpeg के साथ आती है।
---
#### 🛡️ विंडोज डिफेंडर / एंटीवायरस चेतावनी
#### 🛡️ Windows Defender / एंटीवायरस चेतावनी
कुछ एंटीवायरस सॉफ़्टवेयर `.exe` फ़ाइलों को गलत सकारात्मक के रूप में चिह्नित कर सकते हैं। यह पैकेज्ड एप्लिकेशन की **ज्ञात सीमा** है।
कुछ एंटीवायरस सॉफ़्टवेयर `.exe` फ़ाइलों को गलत सकारात्मक (फॉल्स पॉजिटिव) के रूप में चिह्नित कर सकते हैं। यह पैक किए गए एप्लिकेशन की **ज्ञात सीमा** है।
**ऐसा क्यों होता है:**
- एंटीवायरस अनुमान पैक किए गए निष्पादन योग्य को संदिग्ध के रूप में गलत पहचान सकत है
**यह क्यों होता है:**
- एंटीवायरस हिउरिस्टिक्स पैक किए गए एक्जीक्यूटेबल्स को संदिग्ध के रूप में गलत तरीके से पहचान सकत हैं।
**सुरक्षित विकल्प:**
- ✅ **पाइप इंस्टॉलेशन का उपयोग करें:** `pip install ytsage` (अनुशंसित)
- ✅ **स्रोत से निर्माण**: इसका पालन करके [guide](../.github/CI_CD_README.md)
- ✅ **एप्लिकेशन को अपने एंटीवायरस सॉफ़्टवेयर में श्वेतसूची में डालें**
- ✅ **pip स्थापना का उपयोग करें:** `pip install ytsage` (अनुशंसित)
- ✅ **स्रोत से बिल्ड करें**: इस [गाइड](.github/CI_CD_README.md) का पालन करते हुए
- ✅ **एप्लिकेशन को व्हाइटलिस्ट करें** अपने एंटीवायरस सॉफ़्टवेयर में
#### 🍎 macOS: "ऐप क्षतिग्रस्त है और खोला नहीं जा सकता"
यदि आपको यह त्रुटि macOS सोनोमा या नए पर दिखाई देती है, तो आपको संगरोध विशेषता को हटाना होगा
यदि आप macOS Sonoma या नए पर यह त्रुटि देखते है, तो आपको क्वारंटाइन एट्रिब्यूट को हटाने की आवश्यकता है
1. **टर्मिनल खोलें** (आप इसे स्पॉटलाइट का उपयोग करके पा सकते हैं)।
2. **निम्न आदेश टाइप करें** लेकिन **अभी तक Enter न दबाएँ अंत में स्थान शामिल करना सुनिश्चित करें:
1. **टर्मिनल खोलें** (आप इसे Spotlight का उपयोग करके पा सकते हैं)।
2. **निम्न कमांड टाइप करें** लेकिन अभी Enter **न दबाएँ**। सुनिश्चित करें कि अंत में स्थान शामिल है:
```bash
xattr -d com.apple.quarantine
```
3. ** `YTSage.app` फ़ाइल** को अपनी फाइंडर विंडो से खींचें और इसे सीधे टर्मिनल विंडो में छोड़ें। इससे स्वचालित रूप से सही फ़ाइल पथ पेस्ट हो जाएगा.
4. कमांड चलाने के लिए **एंटर** दबाएं
5. **YTSage.app को दोबारा खोलने का प्रयास करें।** इसे अब सही ढंग से लॉन्च होना चाहिए।
3. **अपनी फाइंडर विंडो से `YTSage.app` फ़ाइल खींचें** और इसे सीधे टर्मिनल विंडो में छोड़ें। यह स्वचालित रूप से सही फ़ाइल पथ पेस्ट कर देगा
4. **Enter दबाएँ** कमांड चलाने के लिए।
5. **YTSage.app को फिर से खोलने का प्रयास करें।** इसे अब ठीक से लॉन्च होना चाहिए।
---
#### **कॉन्फ़िगरेशन स्थान (उन्नत)**
- **विंडोज़:** `%LOCALAPPDATA%\YTSage`
- **मैकओएस:** `~/Library/Application Support/YTSage`
- **लिनक्स:** `~/.local/share/YTSage`
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
## 💖 प्रायोजक
यदि YTSage आपका समय बचाता है, तो परियोजना को प्रायोजित करने पर विचार करें। प्रायोजन विकास के समय, सभी प्लेटफर्मों पर परीक्षण और भविष्य में सुधारों को कवर करने में मदद करता है।
यदि YTSage आपका समय बचाता है, तो कृपया प्रोजेक्ट को प्रायोजित करने पर विचार करें। प्रायोजन विकास समय, सभी प्लेटफ़ॉर्म पर परीक्षण और भविष्य के सुधारों को कवर करने में मदद करता है।
- GitHub प्रायोजक: https://github.com/sponsors/oop7
- प्रायोज लिंक सीधे ऐप के अंदर अबाउट डायलॉग से भी उपलब्ध है।
- GitHub Sponsors: https://github.com/sponsors/oop7
- प्रायोज लिंक ऐप में अबाउट डायलॉग के माध्यम से सीधे उपलब्ध है।
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 योगदान दे रहे हैं
## 👥 योगदान
हम योगदान का स्वागत करते हैं! यहा बताया गया है कि आप कैसे मदद कर सकते हैं:
हम योगदान का स्वागत करते हैं! यहा बताया गया है कि आप कैसे मदद कर सकते हैं:
1. 🍴 रिपॉजिटरी को फोर्क करें
2. 🌿 अपनी फीचर शाखा बनाए:
2. 🌿 अपनी फीचर शाखा बनाए:
```bash
git checkout -b feature/AmazingFeature
```
3. 💾 अपने परिवर्तन प्रतिबद्ध करें:
3. 💾 अपने बदलाव कमिट करें:
```bash
git commit -m 'Add some AmazingFeature'
```
4. 📤 शाखा को धक्का:
4. 📤 शाखा में पुश करें:
```bash
git push origin feature/AmazingFeature
```
5. 🔄 एक पुल अनुरोध खोलें
5. 🔄 एक पुल रिक्वेस्ट खोलें
### 🌍 अनुवाद में योगदान
### 🌍 अनुवाद में योगदान करें
- मिलान वाली स्थानीयकृत README फ़ाइल को अपडेट करें (उदाहरण के लिए `README.es.md`)
- संबंधित स्थानीयकृत README फ़ाइल को अपडेट करें (जैसे `readme-translations/README.hi.md`)
- `ytsage/languages/<code>.json` को संपादित करके ऐप स्ट्रिंग्स को सिंक में रखें
- यदि आपकी भाषा गायब है, तो `README.md` से शुरू करें और `README.<code>.md` बनाए
- यदि आपकी भाषा गायब है, तो `README.md` से शुरू करें और `README.<code>.md` बनाए
<details>
<summary>📂 परियोजना संरचना</summary>
<summary>📂 प्रोजेक्ट संरचना</summary>
## YTSage - परियोजना संरचना
## 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
├── 📁 .github/ # GitHub कॉन्फ़िगरेशन
│ ├── 📁 ISSUE_TEMPLATE/ # इश्यू टेम्पलेट
│ │ └── 🐛-bug-report.md # बग रिपोर्ट टेम्पलेट
│ ├─── 📁 workflows/ # GitHub Actions वर्कफ़्लो
│ │ ├── build-linux.yml # लिनक्स बिल्ड वर्कफ़्लो
│ │ ├── build-macos.yml # macOS बिल्ड वर्कफ़्लो
│ │ │── build-windows.yml # विंडोज बिल्ड वर्कफ़्लो
| | └── release-all.yml # मास्टर रिलीज़ वर्कफ़्लो
│ └── 📄 CI_CD_README.md # CI/CD दस्तावेज़ीकरण
├── 📁 branding/ # ब्रांडिंग एसेट्स (स्क्रीनशॉट, SVGs)
│ ├── 📁 icons/ # ऐप आइकन
│ ├── 📁 screenshots/ # दस्तावेज़ीकरण के लिए स्क्रीनशॉट
│ └── 📁 svg/ # SVG एसेट्स
├── 📄 LICENSE # लाइसेंस फ़ाइल
├── 📄 pyproject.toml # प्रोजेक्ट मेटाडेटा और निर्भरताएँ
├── 📄 README.md # प्रोजेक्ट दस्तावेज़ीकरण
├── 📄 requirements.txt # पायथन निर्भरताएँ (dev)
└── 📁 ytsage/ # स्रोत कोड पैकेज
├── 📁 assets/ # रनटाइम एसेट्स
│ ├── 📁 Icon/ # ऐप आइकन
│ └── 📁 sound/ # ऑडियो फ़ाइलें
├── 📁 languages/ # स्थानीयकरण फ़ाइलें
│ ├── 📄 ar.json # अरबी अनुवाद
│ ├── 📄 de.json # जर्मन अनुवाद
│ ├── 📄 en.json # अंग्रेज़ी अनुवाद
│ └── ... # अन्य भाषाएँ
├── 📁 core/ # मुख्य व्यावसायिक तर्क
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Deno एकीकरण
│ ├── 📄 ytsage_downloader.py # डाउनलोड कार्यक्षमता
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg एकीकरण
│ ├── 📄 ytsage_utils.py # उपयोगिता कार्य
│ └── 📄 ytsage_yt_dlp.py # yt-dlp एकीकरण
├── 📁 gui/ # यूजर इंटरफेस घटक
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # ऐप की मुख्य विंडो
│ └── 📁 ytsage_gui_dialogs/ # संवाद वर्ग
├── 📁 utils/ # उपयोगिता मॉड्यूल
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # कॉन्फ़िगरेशन प्रबंधन
│ └── 📄 ytsage_logger.py # लॉगिंग टूल
├── 📄 __init__.py # पैकेज प्रविष्टि बिंदु
└── 📄 main.py # मुख्य निष्पादन स्क्रिप्ट
```
</details>
## ⭐️ सितार इतिहास
## ⭐️ स्टार इतिहास
<div align="center">
## सितारा इतिहास
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -540,16 +546,16 @@ YTSage/
## 📜 लाइसेंस
यह प्रोजेक्ट एमआईटी लाइसेंस के तहत लाइसेंस प्राप्त है - विवरण के लिए [LICENSE](../LICENSE) फ़ाइल देखें।
यह प्रोजेक्ट MIT लाइसेंस के तहत है - विवरण के लिए [LICENSE](LICENSE) फ़ाइल देखें।
## 🙏 आभार
## 🙏 धन्यवाद
<details>
<summary> आभार दिखाएं</summary>
<summary>धन्यवाद प्रदर्शित करें</summary>
<div align="center">
<p>सुधार का सुझाव देने या बग की रिपोर्ट करने के लिए एक मुद्दा खोलकर इस परियोजना में योगदान देने वाले सभी लोगों को हार्दिक धन्यवाद।</p>
<p>उन सभी को बहुत-बहुत धन्यवाद जिन्होंने सुधार का सुझाव देने या बग की रिपोर्ट करने के लिए इश्यू खोलकर इस प्रोजेक्ट में योगदान दिया है।</p>
<table>
<tr class="section"><th colspan="2">मुख्य घटक</th></tr>
@@ -559,39 +565,40 @@ YTSage/
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
<td>मीडिया प्रोसेसिंग</td>
<td>मीडिया प्रसंस्करण</td>
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>yt-dlp के साथ एकीकरण के लिए रनटाइम</td>
<td>yt-dlp एकीकरण के लिए रनटाइम</td>
</tr>
<tr class="section"><th colspan="2">लाइब्रेरी और फ्रेमवर्क</th></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>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>छवि प्रसंस्करण</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">अनुरोध</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>HTTP अनुरोध</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">पैकेजिंग</a></td>
<td>संस्करण और पैकेज हैंडलिंग</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>संस्करण प्रबंधन और पैकेजिंग</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">मार्कडाउन</a></td>
<td>मार्कडाउन रेंडरिंग</td>
<td><a href="https://python-markdown.github.io/">markdown</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 class="section"><th colspan="2">एसेट्स और योगदानकर्ता</th></tr>
<tr>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">यूनिवर्सफील्ड द्वारा नई अधिसूचना 09</a></td>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 by Universfield</a></td>
<td>अधिसूचना ध्वनि</td>
</tr>
<tr>
@@ -606,12 +613,12 @@ YTSage/
## ⚠️ अस्वीकरण
यह उपकरण केवल व्यक्तिगत उपयोग के लिए है. कृपया YouTube की सेवा की शर्तों और सामग्री निर्माताओं के अधिकारों का सम्मान करें।
यह उपकरण केवल व्यक्तिगत उपयोग के लिए है कृपया YouTube की सेवा की शर्तों और सामग्री रचनाकारों के अधिकारों का सम्मान करें।
---
<div align="center">
❤️ के साथ [oop7](https://github.com/oop7) द्वारा बनाया गया
[oop7](https://github.com/oop7) द्वारा ❤️ के साथ बनाया गया
</div>
+251 -245
View File
@@ -13,80 +13,81 @@
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
Unduh video dalam kualitas apa pun, ekstrak audio, dapatkan subtitle, dan banyak lagi.
### 🌍 README Bahasa
### 🌍 Bahasa README
Bahasa Inggris: [EN](../README.md)
| Nilai: [AR](README.ar.md)
Inggris: [EN](../README.md)
| Arab: [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)
| Prancis: [FR](README.fr.md)
| Hindi: [HI](README.hi.md)
| Indonesia: [ID](README.id.md)
| Italia: [IT](README.it.md)
| Nilai: [JA](README.ja.md)
| Polski: [PL](README.pl.md)
| Jepang: [JA](README.ja.md)
| Polandia: [PL](README.pl.md)
| Portugis: [PT](README.pt.md)
| Jawaban: [RU](README.ru.md)
| Rusia: [RU](README.ru.md)
| Turki: [TR](README.tr.md)
| nama: [ZH](README.zh.md)
| Mandarin: [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="#instalasi">Instalasi</a> •
<a href="#fitur">Fitur</a> •
<a href="#penggunaan">Penggunaan</a> •
<a href="#screenshot">Screenshot</a> •
<a href="#troubleshooting">Troubleshooting</a> •
<a href="#sponsor">Sponsor</a> •
<a href="#contributing">Berkontribusi</a>
<a href="#kontribusi">Kontribusi</a>
</p>
</div>
---
<a id="why-ytsage"></a>
<a id="mengapa-ytsage"></a>
## ❓ Mengapa YTSage?
YTSage dirancang untuk pengguna yang menginginkan **pengunduh YouTube yang sederhana namun kuat**. Tidak seperti alat lainnya, alat ini menawarkan:
YTSage dirancang untuk pengguna yang menginginkan **pengunduh YouTube yang sederhana namun kuat**. Tidak seperti alat lainnya, ia 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
- Antarmuka PySide6 yang modern dan bersih
- Unduh video, audio, dan subtitle sekali klik
- Fitur canggih seperti SponsorBlock, penggabungan subtitle, dan pemilihan playlist
- Mode Generik Opsional untuk situs di luar YouTube yang didukung oleh yt-dlp
- Dukungan lintas platform dan instalasi mudah
<a id="features"></a>
<a id="fitur"></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 |
| Fitur Dasar | Fitur Lanjutan | Fitur Tambahan |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Tabel Format | 🚫 Integrasi SponsorBlock | 🎞️ Tampilan FPS/HDR |
| 🎵 Ekstraksi Audio | 📝 Pemilihan & Penggabungan Subtitle | 🔄 Pembaruan yt-dlp Otomatis |
| ✨ Antarmuka Pengguna Sederhana | 💾 Simpan Deskripsi & Thumbnail | 🛠️ Deteksi FFmpeg/yt-dlp/Deno |
| 📋 Dukungan & Pemilih Playlist | 🚀 Pembatas Kecepatan | ⚙️ Perintah Kustom |
| 📑 Integrasi Bab (Chapters) | ✂️ Potong Bagian Video | 🍪 Login Cookie |
| 📜 Riwayat Unduhan | 🔄 Pilihan Saluran Rilis | 🌐 Dukungan Proxy |
| 🎚️ Konversi Format Audio | 🎬 Pengaturan Format Video | 🆙 Tab Pembaruan Terintegrasi |
| 🌍 Mode Generik | 🔊 Normalisasi Audio (EBU R128) | 🌍 Lokalisasi dalam 14 Bahasa |
| 💾 Ekspor Playlist | ⚙️ Kualitas & Subtitle Default | |
</div>
<a id="installation"></a>
<a id="instalasi"></a>
## 🚀 Instalasi
### ⚡ Instal Cepat (Disarankan)
### ⚡ Instalasi Cepat (Direkomendasikan)
Instal YTSage dari PyPI:
Instal YTSage melalui PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 Perbarui instalasi yang ada</summary>
<summary>🔄 Perbarui Instalasi yang Ada</summary>
```bash
pip install --upgrade ytsage
@@ -94,31 +95,31 @@ pip install --upgrade ytsage
</details>
Kemudian luncurkan aplikasi:
Kemudian jalankan aplikasi:
```bash
ytsage
```
### 📦 Executable yang sudah dibuat sebelumnya
### 📦 Executable Siap Pakai (Executable)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Unduh Rilis Terbaru](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Jendela
#### 🪟 Windows
| Format | Deskripsi |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Pemasang standar |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Dengan FFmpeg dibundel |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versi portabel, tidak perlu instalasi |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portabel dengan FFmpeg, zip |
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Installer Standar |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Dilengkapi dengan FFmpeg |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versi Portabel, tidak perlu instalasi |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portabel dengan FFmpeg, dikompresi (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.
1. **Installer EXE (`.exe`)**: Klik dua kali pada file dan ikuti wizard pengaturan.
2. **Versi Portabel (`.zip`)**: Ekstrak arsip ke lokasi yang diinginkan dan jalankan `ytsage.exe`.
3. **FFmpeg Bawaan**: Jika Anda tidak memiliki FFmpeg di sistem Anda, pilih versi dengan FFmpeg bawaan.
</details>
#### 🐧 Linux
@@ -126,9 +127,9 @@ ytsage
| Format | Deskripsi |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Paket Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portabel |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, Portabel |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Paket RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Paket Flatpak |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Bundel Flatpak |
<details>
<summary>🛠️ Langkah Instalasi</summary>
@@ -136,13 +137,13 @@ ytsage
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Jika perlu perbaiki dependensi yang kurang
```
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
- **Gambar Aplikasi (`.AppImage`)**:
- **AppImage (`.AppImage`)**:
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
@@ -157,22 +158,22 @@ ytsage
| Format | Deskripsi |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Aplikasi zip untuk Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Penginstal gambar disk untuk Apple Silicon |
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Aplikasi ZIP untuk Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Installer Disk Image 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.
- **Installer DMG (`.dmg`)**: Klik dua kali untuk memasang, lalu tarik `YTSage.app` ke folder Applications Anda.
- **Arsip Aplikasi (`.zip`)**: Ekstrak ZIP dan pindahkan `YTSage.app` ke folder Applications Anda.
*Catatan: Jika Anda mengalami kesalahan "Aplikasi rusak", lihat [macOS troubleshooting section](#troubleshooting) di bawah.*
*Catatan: Jika Anda mendapatkan kesalahan "App is damaged", lihat bagian Troubleshooting macOS di bawah ini.*
</details>
---
<details>
<summary>💻 Instalasi Manual dari Sumber</summary>
<summary>💻 Instalasi Manual dari Sumber (Source)</summary>
### 1. Kloning Repositori
@@ -183,7 +184,7 @@ cd YTSage
### 2. Instal Dependensi
#### ⚡ Dengan UV
#### ⚡ Dengan uv
```bash
uv pip install .
@@ -203,227 +204,231 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
## 📸 Tangkapan layar
<a id="screenshot"></a>
## 📸 Screenshot
<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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Pengaturan Unduhan" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Unduhan Playlist" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Pengaturan Unduhan</em></td>
<td align="center"><em>Unduh Daftar Putar</em></td>
<td align="center"><em>Unduhan 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>
<td><img src="../branding/screenshots/audio_format.png" alt="Pemilihan Format Audio" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opsi Kustom" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Format Audio</em></td>
<td align="center"><em>Opsi Khusus</em></td>
<td align="center"><em>Opsi Kustom</em></td>
</tr>
</table>
</div><a id="usage"></a>
</div>
<a id="penggunaan"></a>
## 📖 Penggunaan
<details>
<summary>🎯 Penggunaan Dasar</summary>
1. **Luncurkan YTSage**
2. **Tempel URL YouTube** (atau gunakan tombol "Tempel URL")
3. **Klik "Analisis"**
2. **Tempel URL YouTube** (atau gunakan tombol "Paste URL")
3. **Klik "Analyze"**
4. **Pilih Format:**
- `Video` untuk mengunduh video
- `Video` untuk unduhan video
- `Audio Only` untuk ekstraksi audio
5. **Pilih Opsi:**
- Aktifkan subtitle & pilih bahasa
- Aktifkan subtitle dan pilih bahasa
- Aktifkan penggabungan subtitle
- Simpan gambar kecil
- Hapus segmen sponsor
- Simpan thumbnail
- Hapus bagian sponsor
- Simpan deskripsi
- Sematkan bab
6. **Pilih Direktori Keluaran**
7. **Klik "Unduh"**
- Masukkan bab (chapters)
6. **Pilih Direktori Output**
7. **Klik "Download"**
> 💡 Direktori unduhan default adalah folder "Unduhan" milik pengguna.
> 💡 Direktori unduhan bawaan adalah folder "Downloads" pengguna.
</details>
<details>
<summary>📋 Unduh Daftar Putar</summary>
<summary>📋 Unduhan Playlist</summary>
1. **Tempel URL Daftar Putar**
2. **Klik "Analisis"**
3. **Pilih video dari pemilih daftar putar (opsional, default untuk semua)**
1. **Tempel URL Playlist**
2. **Klik "Analyze"**
3. **Pilih video dari pemilih playlist (opsional, default semua)**
4. **Pilih format/kualitas yang diinginkan**
5. **Klik "Unduh"**
5. **Klik "Download"**
> 💡 Aplikasi secara otomatis menangani antrian unduhan
> 💡 Aplikasi secara otomatis mengelola antrean unduhan, dan Anda dapat mengekspor entri playlist sebagai file `.txt`, `.csv`, `.m3u`, atau `.json`.
</details>
<details>
<summary>🌍 Mode Generik untuk situs non-YouTube</summary>
<summary>🌍 Mode Generik untuk Situs Selain 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.
Gunakan Mode Generik saat 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.
3. Tempel URL video atau playlist yang didukung selain YouTube.
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.
- Beberapa situs memerlukan cookie, login, proxy, atau argumen yt-dlp tambahan tergantung pada ekstraktornya.
- Jika suatu situs gagal, perbarui yt-dlp dari tab pembaruan terintegrasi sebelum melaporkan masalah.
</details>
<details>
<summary>🧰 Opsi Media dan Unduhan</summary>
<summary>🧰 Opsi Media & 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`
- **Opsi Subtitle:** Filter bahasa dan masukkan subtitle ke dalam file video.
- **Penggabungan Subtitle:** Menggabungkan subtitle ke dalam file video untuk subtitle permanen (hardcoded).
- **Simpan Deskripsi:** Simpan deskripsi video sebagai file teks.
- **Simpan Thumbnail:** Simpan thumbnail video sebagai file gambar.
- **Masukkan Bab (Chapters):** Sertakan penanda bab sebagai metadata untuk pemutar video yang kompatibel.
- **Hapus Bagian Sponsor:** Gunakan SponsorBlock untuk menghapus segmen sponsor dari video.
- **Potong Video:** Unduh hanya bagian tertentu dari video dengan menentukan rentang waktu dalam format `JJ:MM:DD`.
</details>
<details>
<summary>⚙️ Pengaturan Output dan File</summary>
<summary>⚙️ Pengaturan Output & 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.
- **Pembatas Kecepatan:** Batasi kecepatan unduhan, misalnya `500K` untuk 500 KB/s.
- **Simpan Jalur Unduhan:** Menyimpan jalur unduhan default untuk unduhan di masa mendatang. Tersedia di **Download Settings → Download Path**.
- **Resolusi Video Default:** Atur resolusi video pilihan Anda untuk pemilihan otomatis (misalnya 1080p, 720p). Tersedia di **Download Settings → Default Video Resolution**.
- **Bahasa Subtitle Default:** Atur bahasa subtitle default untuk pemilihan otomatis (dipisahkan koma, misalnya `id,en`). Tersedia di **Download Settings → Default Subtitle Languages**.
- **Format Nama File:** Sesuaikan format nama file output menggunakan variabel seperti `%(title)s`, `%(uploader)s`, `%(playlist_index)s`, dan `%(resolution)s`. Tersedia di **Download Settings → Filename Format**.
- **Paksa Format Output:** Paksa unduhan video ke format kontainer tertentu seperti `mp4`, `webm`, atau `mkv`. Tersedia di **Download Settings → Output Format Settings**.
- **Konversi Format Audio:** Konversi unduhan audio saja ke format pilihan seperti `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, atau `Best`. Tersedia di **Download Settings → Audio Format Settings**.
- **Normalisasi Audio:** Standarisasi volume untuk unduhan audio saja menggunakan EBU R128.
- **Koneksi Serentak:** Tingkatkan kecepatan unduhan secara signifikan dengan mengunduh file dalam beberapa bagian secara bersamaan. Tersedia di **Download Settings → General → Concurrent Connections** (default 1, maksimal 8-10 direkomendasikan untuk menghindari blokir IP).
</details>
<details>
<summary>🌐 Akses dan Jaringan</summary>
<summary>🌐 Akses & 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)
- **Login Cookie:** Masuk ke YouTube menggunakan cookie untuk mengakses konten pribadi.
Penggunaan:
1. **Direkomendasikan:** Gunakan opsi bawaan `Extract cookies from browser` di aplikasi, lalu pilih browser dan opsional profil Anda.
2. Secara opsional, ekstrak cookie secara manual:
a. 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
c. Buat file bernama `cookies.txt` dan tempel cookie
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**.
- **Dukungan Proxy:** Gunakan server proxy untuk unduhan, misalnya `http://<server-proxy>:<port>`
- **Mode Generik:** Izinkan YTSage untuk menganalisis dan mengunduh dari situs selain YouTube yang didukung oleh yt-dlp. Aktifkan dari **Download Settings → Generic Mode**.
</details>
<details>
<summary>🛠️ Alat dan Perawatan</summary>
<summary>🛠️ Alat & Pemeliharaan</summary>
- **Perintah Khusus:** Akses fitur yt-dlp tingkat lanjut melalui argumen baris perintah
- **Perintah Kustom:** 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**.
- **Pembaruan yt-dlp:** Periksa pembaruan dan beralih antara saluran rilis Stable dan Nightly.
- **Pemeriksa Versi FFmpeg:** Verifikasi 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 About.
- **Riwayat Unduhan:** Lihat unduhan sebelumnya dengan thumbnail dan status dari tombol **History**.
</details>
<details>
<summary>🌍 Lokalisasi</summary>
YTSage mendukung **14 bahasa** untuk aksesibilitas di seluruh dunia. Pilih bahasa pilihan Anda dari **Opsi Kustom → Bahasa**.
YTSage mendukung **14 bahasa** untuk jangkauan global. Pilih bahasa pilihan Anda di **Custom Options → Language**.
### 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` |
| 🇺🇸 Inggris | `en` | 🇪🇸 Spanyol | `es` |
| 🇸🇦 Arab | `ar` | 🇫🇷 Prancis | `fr` |
| 🇩🇪 Jerman | `de` | 🇮🇳 Hindi | `hi` |
| 🇮🇩 Indonesia | `id` | 🇮🇹 Italia | `it` |
| 🇯🇵 Jepang | `ja` | 🇵🇱 Polandia | `pl` |
| 🇧🇷 Portugis | `pt` | 🇷🇺 Rusia | `ru` |
| 🇹🇷 Turki | `tr` | 🇨🇳 Mandarin | `zh` |
### README Terjemahan
### Terjemahan README
| Bahasa | Berkas | Bahasa | Berkas |
| Bahasa | File | Bahasa | File |
|----------|------|----------|------|
| 🇮🇩 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) |
| 🇺🇸 Inggris | [README.md](README.md) | 🇪🇸 Spanyol | [README.es.md](README.es.md) |
| 🇸🇦 Arab | [README.ar.md](README.ar.md) | 🇫🇷 Prancis | [README.fr.md](README.fr.md) |
| 🇩🇪 Jerman | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |
| 🇮🇩 Indonesia | [README.id.md](README.id.md) | 🇮🇹 Italia | [README.it.md](README.it.md) |
| 🇯🇵 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) | 🇨🇳 Mandarin | [README.zh.md](README.zh.md) |
> 💡 **Ingin berkontribusi terjemahan?** Lihat bagian [Contributing](#contributing) untuk membantu kami menambahkan lebih banyak bahasa!
> 💡 **Ingin membantu menerjemahkan?** Lihat bagian [Kontribusi](#kontribusi) untuk membantu kami menambahkan lebih banyak bahasa!
</details>
<a id="troubleshooting"></a>
## 🛠️ Pemecahan masalah
## 🛠️ Troubleshooting
<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.
- **Tabel format tidak muncul:** Perbarui yt-dlp ke versi terbaru dan coba beralih ke yt-dlp Nightly.
- **Unduhan gagal:** Periksa koneksi internet Anda dan pastikan video tersedia.
- **Kesalahan Unduhan Spesifik:**
- **Video Pribadi:** Gunakan autentikasi cookie untuk mengakses konten pribadi.
- **Konten Dibatasi Usia:** Masuk ke akun YouTube Anda untuk melihat video yang dibatasi usia.
- **Video yang Diblokir Geo:** Pertimbangkan menggunakan VPN untuk melewati batasan regional.
- **Video Dihapus:** Video tidak lagi tersedia di YouTube.
- **Live Stream:** Streaming langsung tidak dapat diunduh saat sedang disiarkan; tunggu hingga streaming selesai.
- **Kesalahan Jaringan:** Periksa koneksi internet Anda dan coba lagi.
- **URL Tidak Valid:** Pastikan URL benar dan berasal dari platform yang didukung.
- **Konten Premium:** Memerlukan langganan YouTube Premium.
- **Blokir Hak Cipta:** Konten diblokir karena pembatasan hak cipta.
- **File video dan audio terpisah setelah diunduh:** Ini terjadi ketika FFmpeg hilang atau tidak terdeteksi. YTSage memerlukan FFmpeg untuk menggabungkan aliran video dan audio berkualitas tinggi.
- **Solusi:** Pastikan FFmpeg terinstal dan dapat diakses di PATH sistem Anda. Untuk pengguna Windows, opsi termudah adalah mengunduh file `YTSage-v<version>-ffmpeg.exe`, yang dilengkapi dengan FFmpeg.
---
#### 🛡️ Peringatan Windows Defender / Antivirus
Beberapa perangkat lunak antivirus mungkin menandai file `.exe` sebagai positif palsu. Ini adalah **batasan umum** pada aplikasi paket.
Beberapa perangkat lunak antivirus mungkin menandai file `.exe` sebagai positif palsu (false positive). Ini adalah **batasan umum** dari aplikasi yang dipaketkan.
**Mengapa ini terjadi:**
- Heuristik antivirus dapat salah mengidentifikasi executable yang dikemas sebagai sesuatu yang mencurigakan
- Heuristik antivirus mungkin salah mengidentifikasi executable yang dipaketkan sebagai 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
**Opsi Aman:**
- ✅ **Gunakan instalasi pip:** `pip install ytsage` (direkomendasikan)
- ✅ **Build dari sumber**: Mengikuti [panduan](.github/CI_CD_README.md) ini
- ✅ **Whitelist aplikasi** 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.
#### 🍎 macOS: "App is damaged and cant be opened"
Jika Anda melihat kesalahan ini di macOS Sonoma atau yang lebih baru, Anda perlu 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:
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.
3. **Tarik file `YTSage.app` dari jendela Finder Anda** dan lepaskan langsung ke jendela Terminal. Ini akan secara otomatis menempelkan jalur file yang benar.
4. **Tekan Enter** untuk menjalankan perintah.
5. **Coba buka YTSage.app lagi.** Sekarang seharusnya sudah diluncurkan dengan benar.
5. **Coba buka kembali YTSage.app.** Sekarang seharusnya dapat diluncurkan dengan benar.
---
#### **Lokasi Konfigurasi (Lanjutan)**
- **Jendela:** `%LOCALAPPDATA%\YTSage`
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
@@ -432,102 +437,102 @@ Jika Anda melihat kesalahan ini di macOS Sonoma atau lebih baru, Anda harus meng
<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.
Jika YTSage menghemat waktu Anda, pertimbangkan untuk mensponsori proyek ini. Sponsor membantu mencakup waktu pengembangan, pengujian di semua platform, dan peningkatan di masa mendatang.
- Sponsor GitHub: https://github.com/sponsors/oop7
- Tautan sponsor juga tersedia langsung di dalam aplikasi dari dialog Tentang.
- GitHub Sponsors: https://github.com/sponsors/oop7
- Tautan sponsor tersedia langsung melalui dialog About di dalam aplikasi.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Berkontribusi
<a id="kontribusi"></a>
## 👥 Kontribusi
Kami menyambut kontribusi! Inilah cara Anda dapat membantu:
Kami menerima kontribusi! Berikut cara Anda dapat membantu:
1. 🍴 Cabangkan repositori
1. 🍴 Fork repositori
2. 🌿 Buat cabang fitur Anda:
```bash
git checkout -b feature/AmazingFeature
git checkout -b feature/FiturLuarBiasa
```
3. 💾 Komit perubahan Anda:
```bash
git commit -m 'Add some AmazingFeature'
git commit -m 'Tambah FiturLuarBiasa'
```
4. 📤 Dorong ke cabang:
4. 📤 Push ke cabang:
```bash
git push origin feature/AmazingFeature
git push origin feature/FiturLuarBiasa
```
5. 🔄 Buka Permintaan Tarik
5. 🔄 Buka Pull Request
### 🌍 Berkontribusi pada Terjemahan
- Perbarui file README lokal yang cocok (misalnya `README.es.md`)
- Perbarui file README lokal yang relevan (misalnya `readme-translations/README.id.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`
- Jika bahasa Anda belum ada, mulailah dari `README.md` dan buat `README.<code>.md`
<details>
<summary>📂 Struktur Proyek</summary>
## YTSage - Struktur Proyek
Dokumen ini menjelaskan struktur folder YTSage yang terorganisir.
Dokumen ini menjelaskan struktur folder yang terorganisir dari YTSage.
### 📁 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
├── 📁 .github/ # Konfigurasi GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # Templat Issue
│ │ └── 🐛-bug-report.md # Templat laporan bug
│ ├─── 📁 workflows/ # Alur kerja GitHub Actions
│ │ ├── build-linux.yml # Alur kerja build Linux
│ │ ├── build-macos.yml # Alur kerja build macOS
│ │ │── build-windows.yml # Alur kerja build Windows
| | └── release-all.yml # Alur kerja rilis master
│ └── 📄 CI_CD_README.md # Dokumentasi CI/CD
├── 📁 branding/ # Aset branding (screenshot, SVG)
│ ├── 📁 icons/ # Ikon aplikasi
│ ├── 📁 screenshots/ # Screenshot untuk dokumentasi
│ └── 📁 svg/ # Aset SVG
├── 📄 LICENSE # File lisensi
├── 📄 pyproject.toml # Metadata proyek dan dependensi
├── 📄 README.md # Dokumentasi proyek
├── 📄 requirements.txt # Dependensi Python (dev)
└── 📁 ytsage/ # Paket kode sumber
├── 📁 assets/ # Aset runtime
│ ├── 📁 Icon/ # Ikon aplikasi
│ └── 📁 sound/ # File audio
├── 📁 languages/ # File lokalisasi
│ ├── 📄 ar.json # Terjemahan Arab
│ ├── 📄 de.json # Terjemahan Jerman
│ ├── 📄 en.json # Terjemahan Inggris
│ └── ... # Bahasa lainnya
├── 📁 core/ # Logika bisnis inti
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Integrasi Deno
│ ├── 📄 ytsage_downloader.py # Fungsionalitas pengunduhan
│ ├── 📄 ytsage_ffmpeg.py # Integrasi FFmpeg
│ ├── 📄 ytsage_utils.py # Fungsi utilitas
│ └── 📄 ytsage_yt_dlp.py # Integrasi yt-dlp
├── 📁 gui/ # Komponen antarmuka pengguna
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # Jendela utama aplikasi
│ └── 📁 ytsage_gui_dialogs/ # Kelas dialog
├── 📁 utils/ # Modul utilitas
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # Manajemen konfigurasi
│ └── 📄 ytsage_logger.py # Alat logging
├── 📄 __init__.py # Titik masuk paket
└── 📄 main.py # Skrip eksekusi utama
```
</details>
## ⭐️ Sejarah Bintang
## ⭐️ Riwayat Bintang
<div align="center">
## Sejarah Bintang
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,22 +546,22 @@ YTSage/
## 📜 Lisensi
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file [LICENSE](../LICENSE) untuk detailnya.
Proyek ini dilisensikan di bawah Lisensi MIT - lihat file [LICENSE](LICENSE) untuk detailnya.
## 🙏 Ucapan Terima Kasih
## 🙏 Terima Kasih
<details>
<summary>Tampilkan Ucapan Terima Kasih</summary>
<summary>Tampilkan 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>
<p>Terima kasih banyak kepada semua orang yang telah berkontribusi pada proyek ini dengan membuka masalah untuk menyarankan perbaikan atau melaporkan bug.</p>
<table>
<tr class="section"><th colspan="2">Komponen Inti</th></tr>
<tr class="section"><th colspan="2">Komponen Utama</th></tr>
<tr>
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
<td>Mesin Unduh</td>
<td>Mesin Pengunduhan</td>
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
@@ -564,39 +569,40 @@ Proyek ini dilisensikan di bawah Lisensi MIT - lihat file [LICENSE](../LICENSE)
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Waktu proses untuk integrasi dengan yt-dlp</td>
<td>Runtime untuk integrasi yt-dlp</td>
</tr>
<tr class="section"><th colspan="2">Perpustakaan & Kerangka Kerja</th></tr>
<tr class="section"><th colspan="2">Pustaka & Framework</th></tr>
<tr>
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
<td>Kerangka GUI</td>
<td>Framework GUI</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/">Bantal</a></td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Pemrosesan Gambar</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">permintaan</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>Permintaan HTTP</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">kemasan</a></td>
<td>Penanganan Versi & Paket</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Manajemen Versi & Pemaketan</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">penurunan harga</a></td>
<td>Render Penurunan Harga</td>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Rendering Markdown</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">logguru</a></td>
<td>Pencatatan</td>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Logging</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><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 oleh Universfield</a></td>
<td>Suara Notifikasi</td>
</tr>
<tr>
<td><a href="https://github.com/viru185">virus185</a></td>
<td><a href="https://github.com/viru185">viru185</a></td>
<td>Kontributor Kode</td>
</tr>
</table>
@@ -607,7 +613,7 @@ Proyek ini dilisensikan di bawah Lisensi MIT - lihat file [LICENSE](../LICENSE)
## ⚠️ Penafian
Alat ini hanya untuk penggunaan pribadi. Harap hormati persyaratan layanan YouTube dan hak pembuat konten.
Alat ini hanya untuk penggunaan pribadi. Harap hormati Ketentuan Layanan YouTube dan hak-hak produser konten.
---
+266 -260
View File
@@ -12,81 +12,82 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
**Un downloader YouTube moderno con un'interfaccia PySide6 pulita.**
Scarica video in qualsiasi qualità, estrai audio, ottieni sottotitoli e molto altro.
### 🌍 README Lingue
### 🌍 Lingue del README
Inglese: [EN](../README.md)
| Indirizzo: [AR](README.ar.md)
| Arabo: [AR](README.ar.md)
| Tedesco: [DE](README.de.md)
| Español: [ES](README.es.md)
| Spagnolo: [ES](README.es.md)
| Francese: [FR](README.fr.md)
| Nome: [HI](README.hi.md)
| Bahasa Indonesia: [ID](README.id.md)
| Hindi: [HI](README.hi.md)
| Indonesiano: [ID](README.id.md)
| Italiano: [IT](README.it.md)
| 日本語: [JA](README.ja.md)
| Giapponese: [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)
| Turco: [TR](README.tr.md)
| Cinese: [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="#installazione">Installazione</a> •
<a href="#caratteristiche">Caratteristiche</a> •
<a href="#utilizzo">Utilizzo</a> •
<a href="#screenshot">Screenshot</a> •
<a href="#risoluzione-dei-problemi">Risoluzione dei problemi</a> •
<a href="#sponsor">Sponsor</a> •
<a href="#contributing">Contribuendo</a>
<a href="#contribuire">Contribuire</a>
</p>
</div>
---
<a id="why-ytsage"></a>
<a id="perché-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
- Un'interfaccia PySide6 moderna e pulita
- Download di video, audio e sottotitoli con un solo clic
- Funzioni avanzate come SponsorBlock, fusione dei sottotitoli e selezione della playlist
- Modalità Generica opzionale per siti diversi da YouTube supportati da yt-dlp
- Supporto multipiattaforma e installazione semplice
<a id="features"></a>
<a id="caratteristiche"></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 |
| Funzioni Base | Funzioni Avanzate | Funzioni Extra |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Tabella Formati | 🚫 Integrazione SponsorBlock | 🎞️ Visualizzazione FPS/HDR |
| 🎵 Estrazione Audio | 📝 Selezione e Fusione Sottotitoli | 🔄 Aggiornamento automatico yt-dlp |
| ✨ Interfaccia Utente Semplice | 💾 Salva Descrizione e Anteprima | 🛠️ Rilevamento FFmpeg/yt-dlp/Deno |
| 📋 Supporto e Selettore Playlist | 🚀 Limitatore di Velocità | ⚙️ Comandi Personalizzati |
| 📑 Integrazione Capitoli | ✂️ Ritaglio Sezioni Video | 🍪 Login tramite Cookie |
| 📜 Cronologia Download | 🔄 Scelta del Canale di Rilascio | 🌐 Supporto Proxy |
| 🎚️ Conversione Formato Audio | 🎬 Impostazioni Formato Video | 🆙 Tab Aggiornamento Integrato |
| 🌍 Modalità Generica | 🔊 Normalizzazione Audio (EBU R128) | 🌍 Localizzazione in 14 lingue |
| 💾 Esportazione Playlist | ⚙️ Qualità e Sottotitoli Predefiniti | |
</div>
<a id="installation"></a>
<a id="installazione"></a>
## 🚀 Installazione
### ⚡ Installazione rapida (consigliata)
### ⚡ Installazione Rapida (Consigliata)
Installa YTSage da PyPI:
Installa YTSage tramite PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 Aggiorna un'installazione esistente</summary>
<summary>🔄 Aggiornare un'installazione esistente</summary>
```bash
pip install --upgrade ytsage
@@ -94,31 +95,31 @@ pip install --upgrade ytsage
</details>
Quindi avvia l'app:
Quindi esegui l'applicazione:
```bash
ytsage
```
### 📦 Eseguibili predefiniti
### 📦 Eseguibili Pre-compilati (Executable)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Scarica l'ultima versione](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Finestre
#### 🪟 Windows
| Formato | Descrizione |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Programma di installazione standard |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Con FFmpeg in bundle |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versione portatile, nessuna installazione richiesta |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portatile con FFmpeg, zippato |
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Installer Standard |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Include FFmpeg |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versione Portable, nessuna installazione richiesta |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portable con FFmpeg, compresso (ZIP) |
<details>
<summary>🛠️ Passaggi di installazione</summary>
<summary>🛠️ Passaggi per l'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.
1. **Installer EXE (`.exe`)**: Fare doppio clic sul file e seguire la procedura guidata.
2. **Versione Portable (`.zip`)**: Estrarre l'archivio nella posizione desiderata ed eseguire `ytsage.exe`.
3. **FFmpeg integrato**: Se non hai FFmpeg sul tuo sistema, scegli le versioni con FFmpeg integrato.
</details>
#### 🐧 Linux
@@ -126,19 +127,19 @@ ytsage
| Formato | Descrizione |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Pacchetto Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portatile |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, Portable |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Pacchetto RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Pacchetto Flatpack |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Bundle Flatpak |
<details>
<summary>🛠️ Passaggi di installazione</summary>
<summary>🛠️ Passaggi per l'installazione</summary>
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Se necessario per correggere le dipendenze mancanti
```
- **Giri/min (`.rpm`)**:
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
@@ -147,7 +148,7 @@ ytsage
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: segui le istruzioni su Flathub o esegui:
- **Flatpak**: Seguire le istruzioni su Flathub o eseguire:
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -157,22 +158,22 @@ ytsage
| Formato | Descrizione |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Applicazione zippata per Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Programma di installazione dell'immagine disco per Apple Silicon |
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | App ZIP per Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Installer Disk Image per Apple Silicon |
<details>
<summary>🛠️ Passaggi di installazione</summary>
<summary>🛠️ Passaggi per l'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.
- **Installer DMG (`.dmg`)**: Fare doppio clic per montare, quindi trascinare `YTSage.app` nella cartella Applicazioni.
- **Archivio App (`.zip`)**: Estrarre lo ZIP e spostare `YTSage.app` nella cartella Applicazioni.
*Nota: se riscontri l'errore "L'app è danneggiata", consulta [macOS troubleshooting section](#troubleshooting) di seguito.*
*Nota: Se ricevi l'errore "L'app è danneggiata", consulta la sezione Risoluzione dei problemi macOS di seguito.*
</details>
---
<details>
<summary>💻 Installazione manuale dalla fonte</summary>
<summary>💻 Installazione manuale dai sorgenti</summary>
### 1. Clonare il repository
@@ -181,7 +182,7 @@ git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2. Installa le dipendenze
### 2. Installare le dipendenze
#### ⚡ Con uv
@@ -189,7 +190,7 @@ cd YTSage
uv pip install .
```
#### 📦 Oppure con pip standard
#### 📦 O con pip standard
```bash
pip install .
@@ -203,149 +204,153 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
## 📸 Schermate
<a id="screenshot"></a>
## 📸 Screenshot
<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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Impostazioni Download" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Download Playlist" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Scarica impostazioni</em></td>
<td align="center"><em>Scarica playlist</em></td>
<td align="center"><em>Impostazioni Download</em></td>
<td align="center"><em>Download 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>
<td><img src="../branding/screenshots/audio_format.png" alt="Selezione Formato Audio" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opzioni Personalizzate" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Formato audio</em></td>
<td align="center"><em>Opzioni personalizzate</em></td>
<td align="center"><em>Formato Audio</em></td>
<td align="center"><em>Opzioni Personalizzate</em></td>
</tr>
</table>
</div><a id="usage"></a>
</div>
<a id="utilizzo"></a>
## 📖 Utilizzo
<details>
<summary>🎯 Utilizzo di base</summary>
<summary>🎯 Utilizzo 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"**
2. **Incolla un URL di YouTube** (o usa il pulsante "Incolla URL")
3. **Clicca su "Analizza"**
4. **Scegli il formato:**
- `Video` per il download del video
- `Solo Audio` per l'estrazione dell'audio
5. **Seleziona le opzioni:**
- Abilita i sottotitoli e scegli la lingua
- Abilita la fusione dei sottotitoli
- Salva l'anteprima (thumbnail)
- Rimuovi sezioni sponsor
- Salva la descrizione
- Incorpora i capitoli
6. **Scegli la directory di destinazione**
7. **Clicca su "Download"**
> 💡 La directory di download predefinita è la cartella "Download" dell'utente.
</details>
<details>
<summary>📋 Download della playlist</summary>
<summary>📋 Download 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"**
2. **Clicca su "Analizza"**
3. **Seleziona i video dal selettore (opzionale, tutti per impostazione predefinita)**
4. **Scegli il formato/qualità desiderati**
5. **Clicca su "Download"**
> 💡 L'applicazione gestisce automaticamente la coda di download
> 💡 L'applicazione gestisce automaticamente la coda di download e puoi esportare le voci della playlist come file `.txt`, `.csv`, `.m3u` o `.json`.
</details>
<details>
<summary>🌍 Modalità generica per siti non YouTube</summary>
<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.
Usa la Modalità Generica quando vuoi che YTSage accetti URL da siti supportati da yt-dlp come Dailymotion, CBC Gem, TikTok e altri.
Come usarlo:
Come usarla:
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.
1. Apri `Impostazioni Download`.
2. Abilita `Modalità Generica`.
3. Incolla un URL di un video o di una playlist supportata che non sia YouTube.
4. Clicca su `Analizza`.
5. Scegli un formato e scarica normalmente.
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.
- La Modalità Generica cambia solo la validazione dell'URL all'interno di YTSage. Il sito di destinazione deve essere comunque supportato dalla versione di yt-dlp installata.
- Alcuni siti richiedono cookie, login, proxy o argomenti yt-dlp aggiuntivi a seconda dell'estrattore.
- Se un sito fallisce, aggiorna yt-dlp dal tab di aggiornamento integrato prima di segnalare il problema.
</details>
<details>
<summary>🧰 Opzioni multimediali e di download</summary>
<summary>🧰 Opzioni Media e 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`
- **Opzioni Sottotitoli:** Filtra le lingue e incorpora i sottotitoli nel file video.
- **Fusione Sottotitoli:** Fonde i sottotitoli nel file video per sottotitoli permanenti (hardcoded).
- **Salva Descrizione:** Salva la descrizione del video come file di testo.
- **Salva Anteprima:** Salva l'anteprima (thumbnail) del video come file immagine.
- **Incorpora Capitoli:** Include i segnaposti dei capitoli come metadati per i lettori video compatibili.
- **Rimuovi Sezioni Sponsor:** Usa SponsorBlock per rimuovere i segmenti sponsorizzati dal video.
- **Ritaglia Video:** Scarica solo parti specifiche del video specificando un intervallo di tempo nel formato `HH:MM:SS`.
</details>
<details>
<summary>⚙️ Impostazioni file e output</summary>
<summary>⚙️ Impostazioni Output e File</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.
- **Limitatore di Velocità:** Limita la velocità di download, ad esempio `500K` per 500 KB/s.
- **Salva Percorso Download:** Salva il percorso di download predefinito per i download futuri. Disponibile in **Impostazioni Download → Percorso Download**.
- **Risoluzione Video Predefinita:** Imposta la risoluzione video preferita per la selezione automatica (es. 1080p, 720p). Disponibile in **Impostazioni Download → Risoluzione Video Predefinita**.
- **Lingue Sottotitoli Predefinite:** Imposta le lingue dei sottotitoli predefinite per la selezione automatica (separate da virgola, es. `it,en`). Disponibile in **Impostazioni Download → Lingue Sottotitoli Predefinite**.
- **Formato Nome File:** Personalizza il formato del nome del file di output utilizzando variabili come `%(title)s`, `%(uploader)s`, `%(playlist_index)s` e `%(resolution)s`. Disponibile in **Impostazioni Download → Formato Nome File**.
- **Forza Formato Output:** Forza il download del video in un formato contenitore specifico come `mp4`, `webm` o `mkv`. Disponibile in **Impostazioni Download → Impostazioni Formato Output**.
- **Conversione Formato Audio:** Converte i download di solo audio nel formato preferito 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 di solo audio utilizzando EBU R128.
- **Connessioni Simultanee:** Aumenta significativamente la velocità di download scaricando i file in più parti contemporaneamente. Disponibile in **Impostazioni Download → Generali → Connessioni Simultanee** (predefinito 1, massimo 8-10 consigliato per evitare blocchi IP).
</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
- **Login tramite Cookie:** Accedi a YouTube utilizzando i cookie per accedere ai contenuti privati.
Utilizzo:
1. **Consigliato:** Usa l'opzione integrata nell'app `Estrai cookie dal browser`, quindi scegli il browser e opzionalmente il profilo.
2. In alternativa, estrai i cookie manualmente:
a. 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 nel formato Netscape
c. Crea un file chiamato `cookies.txt` e incolla 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**.
- **Supporto Proxy:** Usa un server proxy per i download, ad esempio `http://<server-proxy>:<porta>`
- **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>
<summary>🛠️ Strumenti 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**.
- **Comandi Personalizzati:** Accedi alle funzioni avanzate di yt-dlp tramite argomenti della riga di comando.
- **Tab Aggiornamento:** Gestisci gli strumenti di aggiornamento integrati da un unico posto nelle Opzioni Personalizzate:
- **Aggiornamento yt-dlp:** Controlla gli aggiornamenti e passa tra i canali di rilascio Stabile e Nightly.
- **Controllo Versione FFmpeg:** Verifica la tua versione di FFmpeg e apri le guide all'installazione.
- **Aggiornamento 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 dal dialogo Informazioni.
- **Cronologia Download:** Visualizza i download passati con anteprime 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**.
YTSage supporta **14 lingue** per una portata globale. Scegli la tua lingua preferita in **Opzioni Personalizzate → Lingua**.
### Lingue supportate
### Lingue Supportate
| Lingua | Codice | Lingua | Codice |
|----------|------|----------|------|
@@ -357,72 +362,72 @@ YTSage supporta **14 lingue** per l'accessibilità in tutto il mondo. Seleziona
| 🇧🇷 Portoghese | `pt` | 🇷🇺 Russo | `ru` |
| 🇹🇷 Turco | `tr` | 🇨🇳 Cinese | `zh` |
### Traduzioni README
### Traduzioni del README
| Lingua | File | Lingua | File |
|----------|------|----------|------|
| 🇺🇸 Inglese | [README.md](../README.md) | 🇪🇸Spagnolo | [README.es.md](README.es.md)
| 🇺🇸 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) |
| 🇹🇷 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!
> 💡 **Vuoi aiutare con la traduzione?** Consulta la sezione [Contribuire](#contribuire) per aiutarci ad aggiungere altre lingue!
</details>
<a id="troubleshooting"></a>
<a id="risoluzione-dei-problemi"></a>
## 🛠️ Risoluzione dei problemi
<details>
<summary>Fai clic per visualizzare problemi e soluzioni comuni</summary>
<summary>Clicca per visualizzare i problemi comuni e le soluzioni</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.
- **La tabella dei formati non appare:** Aggiorna yt-dlp all'ultima versione e prova a passare a yt-dlp Nightly.
- **Download fallito:** 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.
- **Video Privati:** Usa l'autenticazione tramite cookie per accedere ai contenuti privati.
- **Contenuti con limiti di età:** Accedi al tuo account YouTube per visualizzare i video con limiti di età.
- **Video bloccati geograficamente:** Considera l'uso di una VPN per aggirare le restrizioni regionali.
- **Video rimosso:** Il video non è più disponibile su YouTube.
- **Live Stream:** I live stream non possono essere scaricati durante la trasmissione; attendi la fine dello stream.
- **Errori di rete:** Controlla la tua connessione internet e riprova.
- **URL non valido:** Assicurati che l'URL sia corretto e provenga da una piattaforma supportata.
- **Contenuti Premium:** Richiede un abbonamento YouTube Premium.
- **Blocco Copyright:** Il contenuto è bloccato a causa di restrizioni sul copyright.
- **I file video e audio sono separati dopo il download:** Questo accade quando FFmpeg manca o non viene rilevato. YTSage richiede FFmpeg per unire i 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<versione>-ffmpeg.exe`, che include FFmpeg.
---
#### 🛡️ Avviso Windows Defender / Antivirus
Alcuni software antivirus potrebbero contrassegnare i file `.exe` come falsi positivi. Questa è una **limitazione nota** delle applicazioni in pacchetto.
Alcuni software antivirus potrebbero contrassegnare i file `.exe` come falsi positivi. Questa è una **limitazione nota** delle applicazioni pacchettizzate.
**Perché ciò accade:**
- L'euristica dell'antivirus p identificare erroneamente gli eseguibili compressi come sospetti
**Perché succede:**
- Le euristiche dell'antivirus potrebbero identificare erroneamente gli eseguibili pacchettizzati 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
**Opzioni sicure:**
- ✅ **Usa l'installazione tramite pip:** `pip install ytsage` (consigliato)
- ✅ **Compila dai sorgenti**: Seguendo questa [guida](.github/CI_CD_README.md)
- ✅ **Aggiungi l'applicazione alla whitelist** 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.
#### 🍎 macOS: "Lapp è danneggiata e non può essere aperta"
Se visualizzi questo errore su macOS Sonoma o versioni successive, devi rimuovere l'attributo di 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:
1. **Apri il Terminale** (puoi trovarlo usando 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.
3. **Trascina il file `YTSage.app` dalla finestra del Finder** e rilascialo direttamente nella finestra del Terminale. Questo incollerà automaticamente il percorso corretto del file.
4. **Premi Invio** per eseguire il comando.
5. **Prova a riaprire YTSage.app.** Ora dovrebbe avviarsi correttamente.
---
#### **Posizioni di configurazione (avanzate)**
#### **Percorsi di configurazione (Avanzato)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
@@ -432,102 +437,102 @@ Se visualizzi questo errore su macOS Sonoma o versioni successive, devi rimuover
<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.
Se YTSage ti fa risparmiare tempo, considera di sponsorizzare il progetto. Le sponsorizzazioni aiutano a coprire il tempo 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.
- GitHub Sponsors: https://github.com/sponsors/oop7
- Il link per la sponsorizzazione è disponibile direttamente tramite il dialogo Informazioni all'interno dell'app.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
<a id="contribuire"></a>
## 👥 Contribuire
Diamo il benvenuto ai contributi! Ecco come puoi aiutare:
I contributi sono benvenuti! Ecco come puoi aiutare:
1. 🍴 Effettua il fork del repository
2. 🌿 Crea il tuo ramo di funzionalità:
1. 🍴 Fork del repository
2. 🌿 Crea il tuo ramo per la funzione:
```bash
git checkout -b feature/AmazingFeature
git checkout -b feature/FunzioneIncredibile
```
3. 💾 Applica le tue modifiche:
3. 💾 Fai il commit delle tue modifiche:
```bash
git commit -m 'Add some AmazingFeature'
git commit -m 'Aggiungi FunzioneIncredibile'
```
4. 📤 Spingere verso il ramo:
4. 📤 Fai il push sul ramo:
```bash
git push origin feature/AmazingFeature
git push origin feature/FunzioneIncredibile
```
5. 🔄 Apri una richiesta di pull
5. 🔄 Apri una Pull Request
### 🌍 Contribuire alle traduzioni
- Aggiorna il file README localizzato corrispondente (ad esempio `README.es.md`)
- Aggiorna il file README localizzato pertinente (es. `readme-translations/README.it.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`
- Se la tua lingua manca, parti da `README.md` e crea `README.<code>.md`
<details>
<summary>📂 Struttura del progetto</summary>
<summary>📂 Struttura del Progetto</summary>
## YTSage - Struttura del progetto
## YTSage - Struttura del Progetto
Questo documento descrive la struttura di cartelle organizzata di YTSage.
Questo documento descrive la struttura organizzata delle cartelle di YTSage.
### 📁 Struttura del progetto
### 📁 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
├── 📁 .github/ # Configurazioni GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # Modelli per segnalazioni
│ │ └── 🐛-bug-report.md # Modello per segnalazione bug
│ ├─── 📁 workflows/ # Workflow GitHub Actions
│ │ ├── build-linux.yml # Workflow build Linux
│ │ ├── build-macos.yml # Workflow build macOS
│ │ │── build-windows.yml # Workflow build Windows
| | └── release-all.yml # Workflow release master
│ └── 📄 CI_CD_README.md # Documentazione CI/CD
├── 📁 branding/ # Asset di branding (screenshot, SVG)
│ ├── 📁 icons/ # Icone dell'app
│ ├── 📁 screenshots/ # Screenshot per la documentazione
│ └── 📁 svg/ # Asset SVG
├── 📄 LICENSE # File della licenza
├── 📄 pyproject.toml # Metadati del progetto e dipendenze
├── 📄 README.md # Documentazione del progetto
├── 📄 requirements.txt # Dipendenze Python (dev)
└── 📁 ytsage/ # Pacchetto del codice sorgente
├── 📁 assets/ # Asset runtime
│ ├── 📁 Icon/ # Icone dell'app
│ └── 📁 sound/ # File audio
├── 📁 languages/ # File di localizzazione
│ ├── 📄 ar.json # Traduzione araba
│ ├── 📄 de.json # Traduzione tedesca
│ ├── 📄 en.json # Traduzione inglese
│ └── ... # Altre lingue
├── 📁 core/ # Logica di business principale
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Integrazione Deno
│ ├── 📄 ytsage_downloader.py # Funzionalità di download
│ ├── 📄 ytsage_ffmpeg.py # Integrazione FFmpeg
│ ├── 📄 ytsage_utils.py # Funzioni di utilità
│ └── 📄 ytsage_yt_dlp.py # Integrazione yt-dlp
├── 📁 gui/ # Componenti dell'interfaccia utente
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # Finestra principale dell'app
│ └── 📁 ytsage_gui_dialogs/ # Classi per i dialoghi
├── 📁 utils/ # Moduli di utilità
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # Gestione configurazione
│ └── 📄 ytsage_logger.py # Strumenti di logging
├── 📄 __init__.py # Punto di ingresso del pacchetto
└── 📄 main.py # Script di esecuzione principale
```
</details>
## ⭐️ Storia delle stelle
## ⭐️ Cronologia Stelle
<div align="center">
## Storia delle stelle
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,7 +546,7 @@ YTSage/
## 📜 Licenza
Questo progetto è concesso in licenza con la licenza MIT: per i dettagli vedere il file [LICENSE](../LICENSE).
Questo progetto è rilasciato sotto Licenza MIT - vedi il file [LICENSE](LICENSE) per i dettagli.
## 🙏 Ringraziamenti
@@ -550,54 +555,55 @@ Questo progetto è concesso in licenza con la licenza MIT: per i dettagli vedere
<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>
<p>Un grande ringraziamento a tutti coloro che hanno contribuito a questo progetto aprendo segnalazioni per suggerire miglioramenti o segnalare bug.</p>
<table>
<tr class="section"><th colspan="2">Componenti principali</th></tr>
<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>
<td>Motore di Download</td>
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
<td>Elaborazione multimediale</td>
<td>Elaborazione Media</td>
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Runtime per integrazione con yt-dlp</td>
<td>Runtime per l'integrazione di yt-dlp</td>
</tr>
<tr class="section"><th colspan="2">Librerie e framework</th></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>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Elaborazione Immagini</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">richieste</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>Richieste HTTP</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">imballaggio</a></td>
<td>Gestione versioni e pacchetti</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Gestione Versioni e Packaging</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">ribasso</a></td>
<td>Rendering riduzione</td>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Rendering Markdown</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Registrazione</td>
<td>Logging</td>
</tr>
<tr class="section"><th colspan="2">Risorse e contributori</th></tr>
<tr class="section"><th colspan="2">Asset e Collaboratori</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>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 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>
<td>Collaboratore al Codice</td>
</tr>
</table>
@@ -607,12 +613,12 @@ Questo progetto è concesso in licenza con la licenza MIT: per i dettagli vedere
## ⚠️ Disclaimer
Questo strumento è solo per uso personale. Rispetta i termini di servizio di YouTube e i diritti dei creatori di contenuti.
Questo strumento è solo per uso personale. Rispettate i Termini di Servizio di YouTube e i diritti dei produttori di contenuti.
---
<div align="center">
Realizzato con ❤️ da [oop7](https://github.com/oop7)
Creato con ❤️ da [oop7](https://github.com/oop7)
</div>
+250 -243
View File
@@ -12,81 +12,82 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/oop7)
**クリーンな PySide6 インターフェスを備えた最新の YouTube ダウンローダー。**
任意の品質でビデオダウンロードしたり、音声を抽出したり、字幕取得したりできます。
**クリーンなPySide6インターフェスを備えたモダンなYouTubeダウンローダー。**
あらゆる品質でビデオダウンロード、オーディオ抽出、字幕取得などが可能です。
### 🌍 README 言語
英語: [EN](../README.md)
|番号: [AR](README.ar.md)
| アラビア語: [AR](README.ar.md)
| ドイツ語: [DE](README.de.md)
| スペイン語: [ES](README.es.md)
|フラン: [FR](README.fr.md)
|名前: [HI](README.hi.md)
| フランス語: [FR](README.fr.md)
| ヒンディー語: [HI](README.hi.md)
| インドネシア語: [ID](README.id.md)
|イタリアーノ: [IT](README.it.md)
| イタリア: [IT](README.it.md)
| 日本語: [JA](README.ja.md)
|ポルスキー: [PL](README.pl.md)
| ポーランド語: [PL](README.pl.md)
| ポルトガル語: [PT](README.pt.md)
| Русский: [RU](README.ru.md)
|テュルクチェ: [TR](README.tr.md)
| 中: [ZH](README.zh.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>
<a href="#インストール">インストール</a> •
<a href="#機能">機能</a> •
<a href="#使い方">使い方</a> •
<a href="#スクリーンショット">スクリーンショット</a> •
<a href="#トラブルシューティング">トラブルシューティング</a> •
<a href="#スポンサー">スポンサー</a> •
<a href="#貢献">貢献</a>
</p>
</div>
---
<a id="why-ytsage"></a>
<a id="なぜytsageなのか"></a>
## ❓ なぜ YTSage なのか?
YTSage は、**シンプルかつ強力な YouTube ダウンローダー**を求めるユーザー向けに設計されています。他のツールとは異なり、の機能を提供します
YTSageは、**シンプルでありながら強力なYouTubeダウンローダー**を求めるユーザーのために設計されています。他のツールとは異なり、以下の機能を提供します
- クリーンでモダンな PySide6 インターフェ
- ワンクリックでビデオ、オーディオ、字幕ダウンロード
- スポンサーブロック、字幕結合、プレイリスト選択などの高度な機能
- YouTube 以外の yt-dlp 対応サイト向けのオプションの汎用モード
- クロスプラットフォームのサポートと簡単なインストール
- モダンでクリーンなPySide6インターフェ
- ビデオ、オーディオ、字幕のワンクリックダウンロード
- SponsorBlock、字幕結合、プレイリスト選択などの高度な機能
- yt-dlpがサポートするYouTube以外のサイト向けのオプションのジェネリックモード
- クロスプラットフォーム対応と簡単なインストール
<a id="features"></a>
## ✨ 特徴
<a id="機能"></a>
## ✨ 機能
<div align="center">
|コア機能 |高度な機能 |追加機能 |
|---------------------------------|-------------------------------------------|-------------------------------------|
| 🎥 テーブルのフォーマット | 🚫 スポンサーブロックの統合 | 🎞️ FPS/HDR ディスプレイ |
| 🎵 オーディオ抽出 | 📝 複数字幕選択と結合 | 🔄 yt-dlp自動更新 |
| ✨シンプルなUI | 💾 説明とサムネイル保存 | 🛠️ FFmpeg/yt-dlp/Deno 検出 |
| 📋 プレイリストのサポートとセレクター | 🚀 スピードリミッター | ⚙️ カスタムコマンド |
| 📑 章を埋め込む | ✂️ ビデオセクショントリミング | 🍪 Cookie でログイン |
| 📜 ダウンロード履歴 | 🔄 チャネル選択をリリース | 🌐 プロキシサポート |
| 🎚️ オーディオ形式変換 | 🎬 ビデオ形式設定 | 🆙 内蔵アップデータブ |
| 🌍 汎用モード | 🔊 オーディオ正規化 (EBU R128) | 🌍 14 言語のローカリゼーション |
| 基本機能 | 高度な機能 | 追加機能 |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 フォーマットテーブル | 🚫 SponsorBlock統合 | 🎞️ FPS/HDR表示 |
| 🎵 オーディオ抽出 | 📝 字幕選択と結合 | 🔄 yt-dlp自動更新 |
| ✨ シンプルなユーザーインターフェース | 💾 説明とサムネイル保存 | 🛠️ FFmpeg/yt-dlp/Deno検出 |
| 📋 プレイリストのサポートと選択 | 🚀 速度制限 | ⚙️ カスタムコマンド |
| 📑 チャプター統合 | ✂️ ビデオセクショントリミング | 🍪 クッキーログイン |
| 📜 ダウンロード履歴 | 🔄 リリースチャネル選択 | 🌐 プロキシサポート |
| 🎚️ オーディオフォーマット変換 | 🎬 ビデオフォーマット設定 | 🆙 統合アップデータブ |
| 🌍 ジェネリックモード | 🔊 オーディオノーマライズ (EBU R128) | 🌍 14言語のローカライズ |
| 💾 プレイリストのエクスポート | ⚙️ デフォルトの品質と字幕 | |
</div>
<a id="installation"></a>
<a id="インストール"></a>
## 🚀 インストール
### ⚡ クイックインストール (推奨)
PyPI から YTSage をインストールします
PyPI経由でYTSageをインストールします
```bash
pip install ytsage
```
<details>
<summary>🔄 既存のインストールを更新します</summary>
<summary>🔄 既存のインストールを更新す</summary>
```bash
pip install --upgrade ytsage
@@ -94,41 +95,41 @@ pip install --upgrade ytsage
</details>
次に、アプリを起動します
その後、アプリケーションを実行します
```bash
ytsage
```
### 📦 ビルド済み実行可能ファイル
### 📦 ビルド済み実行ファイル (Executable)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 最新リリースをダウンロード](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Windows
| フォーマット | 説明 |
|----------|---------------|
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | 標準インストーラー |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg がバンドルされている |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg同梱 |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | ポータブル版、インストール不要 |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg、zip 形式でポータブル |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg同梱、ポータブル版 (ZIP縮小) |
<details>
<summary>🛠️ インストール手順</summary>
1. **EXE インストーラー (`.exe`)**: ファイルをダブルクリックし、セットアップウィザードに従います。
2. **ポータブル バージョン (`.zip`)**: アーカイブを目的の場所に解凍し、`ytsage.exe` を実行します。
3. **FFmpeg バンドル**: システムに FFmpeg がインストールされていない場合は、FFmpeg バンドル バージョンを選択します
2. **ポータブル (`.zip`)**: アーカイブを任意の場所に展開し、`ytsage.exe` を実行します。
3. **内蔵 FFmpeg**: システムに FFmpeg がインストールされていない場合は、FFmpeg 同梱版を選択してください
</details>
#### 🐧 Linux
| フォーマット | 説明 |
|----------|---------------|
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian パッケージ |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage、ポータブル |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM パッケージ |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) |フラットパックバンドル |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak バンドル |
<details>
<summary>🛠️ インストール手順</summary>
@@ -136,18 +137,18 @@ ytsage
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # 必要に応じて不足している依存関係を修正
```
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
- **アプリ画像 (`.AppImage`)**:
- **AppImage (`.AppImage`)**:
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: Flathub の指示に従うか、次のコマンドを実行します
- **Flatpak**: Flathub の指示に従うか、以下を実行します
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -156,17 +157,17 @@ ytsage
#### 🍎 macOS
| フォーマット | 説明 |
|----------|---------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 用 ZIP アプリケーション |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 用ディスク イメージ インストーラー |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 用 ZIP アプリ |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 用ディスクイメージインストーラー |
<details>
<summary>🛠️ インストール手順</summary>
- **DMG インストーラー (`.dmg`)**: ダブルクリックしてマウントし、`YTSage.app` をアプリケーション フォルダにドラッグします。
- **アプリ アーカイブ (`.zip`)**: zip を解凍し、`YTSage.app` をアプリケーション フォルダに移動します。
- **DMG インストーラー (`.dmg`)**: ダブルクリックしてマウントし、`YTSage.app` をアプリケーションフォルダにドラッグします。
- **App アーカイブ (`.zip`)**: ZIP を展開し、`YTSage.app` をアプリケーションフォルダに移動します。
*注意:「アプリが破損しています」エラーが発生した場合は、以下の[macOS troubleshooting section](#troubleshooting)を参照してください。*
*注意: 「アプリが破損しています」というエラーが表示される場合は、以下の macOS トラブルシューティング セクションを参照してください。*
</details>
---
@@ -174,7 +175,7 @@ ytsage
<details>
<summary>💻 ソースからの手動インストール</summary>
### 1. リポジトリクローンを作成しま
### 1. リポジトリクローンす
```bash
git clone https://github.com/oop7/YTSage.git
@@ -183,13 +184,13 @@ cd YTSage
### 2. 依存関係をインストールする
#### ⚡ UV あり
#### ⚡ uv を使用する場合
```bash
uv pip install .
```
#### 📦 または標準の pip を使用
#### 📦 または標準の pip を使用する場合
```bash
pip install .
@@ -203,146 +204,151 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
<a id="スクリーンショット"></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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="ダウンロード設定" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="プレイリストダウンロード" 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>
<td><img src="../branding/screenshots/audio_format.png" alt="オーディオフォーマット選択" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="カスタムオプション" width="400"/></td>
</tr>
<tr>
<td align="center"><em>オーディオフォーマット</em></td>
<td align="center"><em>カスタムオプション</em></td>
</tr>
</table>
</div><a id="usage"></a>
</div>
## 📖 使用法
<a id="使い方"></a>
## 📖 使い方
<details>
<summary>🎯 基本的な使い方</summary>
1. **YTSage を起動**
2. **YouTube URL を貼り付け** (または [URL を貼り付け] ボタンを使用)
3. **「分析」をクリックします**
4. **形式を選択します:**
- `Video` ビデオダウンロード用
- `Audio Only` 音声抽出用
5. **オプションを選択します:**
- 字幕を有効にし言語を選択します
- 字幕のマージを有効にする
- サムネイル保存
- スポンサーセグメントの削除
- 説明保存
- を埋め込む
6. **出力ディレクトリを選択**
7. **「ダウンロード」をクリックします**
1. **YTSage を起動する**
2. **YouTube URL を貼り付け** (またはURL を貼り付けボタンを使用)
3. **「分析」をクリックす**
4. **フォーマットを選択する:**
- ビデオダウンロードの場合は `Video`
- オーディオ抽出の場合は `Audio Only`
5. **オプションを選択する:**
- 字幕を有効にし言語を選択
- 字幕結合を有効化
- サムネイル保存
- スポンサーセクションを削除
- 説明保存
- チャプターを埋め込む
6. **出力ディレクトリを選択する**
7. **「ダウンロード」をクリックす**
> 💡 デフォルトのダウンロード ディレクトリは、ユーザーの「ダウンロード」フォルダです。
> 💡 デフォルトのダウンロードディレクトリは、ユーザーの「ダウンロード」フォルダです。
</details>
<details>
<summary>📋 プレイリストのダウンロード</summary>
1. **プレイリストの URL を貼り付け**
2. **「分析」をクリックします**
3. **プレイリスト セレクターからビデオを選択します (オプション、デフォルトはすべて)**
4. **希望の形式/品質を選択します**
5. **「ダウンロード」をクリック**
1. **プレイリストの URL を貼り付け**
2. **「分析」をクリックす**
3. **プレイリストセレクターからビデオを選択する (任意、デフォルトはすべて)**
4. **希望のフォーマット/品質を選択す**
5. **「ダウンロード」をクリックする**
> 💡 アプリケーションはダウンロードキューを自動的に理します
> 💡 アプリケーションはダウンロードキューを自動的に理し、プレイリストのエントリを `.txt`, `.csv`, `.m3u`, または `.json` ファイルとしてエクスポートできます
</details>
<details>
<summary>🌍 YouTube 以外のサイトの汎用モード</summary>
<summary>🌍 YouTube 以外のサイト向けのジェネリックモード</summary>
Dailymotion、CBC Gem、TikTok など、yt-dlp サポートされているサイトからの URL を YTSage 受け入れるようにする場合は、ジェネリック モードを使用します。
Dailymotion、CBC Gem、TikTok など、yt-dlp サポートるサイトからの URL を YTSage 受け入れさせたい場合は、ジェネリックモードを使用します。
使用方法:
使用方法
1. `Download Settings` を開きます。
2. `Generic Mode` を有効にします。
3. サポートされている YouTube 以外のビデオまたはプレイリストの URL を貼り付けます。
4. `Analyze`をクリックします。
5. 形式を選択し、通常どおりダウンロードします。
3. YouTube 以外のサポートされているビデオまたはプレイリストの URL を貼り付けます。
4. `Analyze` をクリックします。
5. フォーマットを選択し、通常りダウンロードします。
:
意:
- 汎用モードは、YTSage 内の URL 検証のみ変更されます。ターゲット サイトは、インストールされている yt-dlp バージョンでサポートされている必要があります。
- 一部のサイトでは、エクストラクターに応じて、Cookie、ログイン セッション、プロキシ、または追加の yt-dlp 引数が必要す。
- サイトに障害が発生した場合は、問題を報告する前に、まず組み込みのアップデーター タブから yt-dlp を更新してください。
- ジェネリックモードは、YTSage 内の URL バリデーションのみ変更ます。対象サイトは、インストールされている yt-dlp バージョンでサポートされている必要があります。
- サイトによっては、エクストラクターに応じてクッキー、ログイン、プロキシ、または追加の yt-dlp 引数が必要になる場合があります。
- サイトが失敗する場合は、問題を報告する前に統合アップデータブから yt-dlp を更新してください。
</details>
<details>
<summary>🧰 メディアとダウンロードのオプション</summary>
- **字幕オプション:** 言語をフィルターし、ビデオ ファイルに字幕を埋め込みます。
- **字幕結合:** ハードコードされた字幕ビデオ ファイルに字幕を結合します。
- **字幕オプション:** 言語をフィルタリングし、字幕をビデオファイルに埋め込みます。
- **字幕結合:** 字幕ビデオファイルにマージして、焼き付け字幕(ハードコード)にします。
- **説明の保存:** ビデオの説明をテキストファイルとして保存します。
- **サムネイルの保存:** ビデオのサムネイルを画像ファイルとして保存します。
- **チャプターの埋め込み:** 互換性のあるビデオ プレーヤーのメタデータとしてチャプター マーカーを埋め込みます。
- **スポンサー セグメントの削除:** SponsorBlock を使用してビデオからスポンサー セグメントを削除します。
- **ビデオのトリミング:** `HH:MM:SS` 形式で時間範囲を指定して、ビデオの特定の部分のみをダウンロードします
- **チャプターの埋め込み:** 対応しているビデオプレーヤー用に、チャプターマーカーをメタデータとして含めます。
- **スポンサーセクションを削除:** 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 を使用して、オーディオのみのダウンロードの音量を標準化します。
- **速度制限:** ダウンロード速度を制限します(例:500 KB/s の場合は `500K`)。
- **ダウンロードパスの保存:** 将来のダウンロードのためにデフォルトのダウンロードパスを保存します。**Download Settings → Download Path** で設定可能です。
- **デフォルトのビデオ解像度:** 自動選択のために好みのビデオ解像度を設定します(例:1080p, 720p)。**Download Settings → Default Video Resolution** で設定可能です。
- **デフォルトの字幕言語:** 自動選択のためにデフォルトの字幕言語を設定します(カンマ区切り、例:`ja,en`)。**Download Settings → Default Subtitle Languages** で設定可能です。
- **ファイル名形式:** `%(title)s`, `%(uploader)s`, `%(playlist_index)s`, `%(resolution)s` などの変数を使用して出力ファイル名の形式をカスタマイズします。**Download Settings → Filename Format** で設定可能です。
- **出力形式の強制:** ビデオダウンロードを `mp4`, `webm`, `mkv` などの特定のコンテナ形式に強制します。**Download Settings → Output Format Settings** で設定可能です。
- **オーディオ形式の変換:** オーディオのみのダウンロードを `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, または `Best` などの好みの形式に変換します。**Download Settings → Audio Format Settings** で設定可能です。
- **オーディオノーマライズ:** EBU R128 を使用して、オーディオのみのダウンロードの音量を標準化します。
- **同時接続数:** ファイルを複数のパーツで同時にダウンロードすることで、ダウンロード速度を大幅に向上させます。**Download Settings → General → Concurrent Connections** で設定可能です(デフォルトは 1。IP ブロックを避けるため最大 8-10 を推奨)。
</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 以外のサイトから分析してダウンロードできるようにします。 **[ダウンロード設定] → [汎用モード]** から有効にします。
- **クッキーログイン:** クッキーを使用して YouTube にログインし、非公開コンテンツにアクセスします。
使用方法
1. **推奨:** アプリ内蔵の `Extract cookies from browser` オプションを使用し、ブラウザと(必要に応じて)プロフィールを選択します。
2. あるいは、クッキーを手動で抽出します
a. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) などの拡張機能を使用してブラウザからクッキーをエクスポートします。
b. Netscape 形式でクッキーをコピーします。
c. `cookies.txt` という名前のファイルを作成し、クッキーを貼り付けます。
d. アプリで `cookies.txt` ファイルを選択します
- **プロキシサポート:** ダウンロードにプロキシサーバーを使用します(例:`http://<proxy-server>:<port>`)。
- **ジェネリックモード:** YTSage が yt-dlp でサポートされている YouTube 以外のサイトから分析およびダウンロードできるようにします。**Download Settings → Generic Mode** から有効にします。
</details>
<details>
<summary>🛠️ ツールとメンテナンス</summary>
- **カスタム コマンド:** コマンドライン引数を介して高度な yt-dlp 機能にアクセスします
- **アップデータ」タブ:** カスタム オプションの 1 か所から組み込みの更新ツールを管理します
- **yt-dlp アップデート:** アップデートを確認し、安定リリース チャネルと夜間リリース チャネルを切り替えます。
- **FFmpeg バージョン チェッカー:** FFmpeg バージョンを確認し、インストール ガイドを開きます
- **Deno の更新:** Deno ランタイムを確認して更新します
- **FFmpeg/yt-dlp/Deno 検出:** [バージョン情報] ダイアログから FFmpeg、yt-dlp、および Deno のパスとバージョンを自動的に検出します。
- **ダウンロード履歴:** **履歴** ボタンから過去のダウンロードをサムネイルとステータスとともに表示します。
- **カスタムコマンド:** コマンドライン引数を介して高度な yt-dlp 機能にアクセスします
- **アップデータブ:** カスタムオプション内の一箇所で内蔵のアップデートツールを管理します
- **yt-dlp アップデート:** アップデートを確認し、Stable と Nightly リリースチャネルを切り替えます。
- **FFmpeg バージョンチェッカー:** FFmpeg バージョンを確認し、インストールガイドを開きます
- **Deno アップデート:** Deno ランタイムを確認し、アップデートします
- **FFmpeg/yt-dlp/Deno 検出:** About ダイアログから FFmpeg、yt-dlp、Deno のパスとバージョンを自動的に検出します。
- **ダウンロード履歴:** **History** ボタンからサムネイルとステータス付きで過去のダウンロードを表示します。
</details>
<details>
<summary>🌍 ローカリゼーション</summary>
<summary>🌍 ローカライズ</summary>
YTSage は **14 言語**をサポートしており、世界中からアクセスできます。 **カスタム オプション → 言語** から希望の言語を選択します
YTSage はグローバルに対応するため、**14 言語**をサポートしてます。**Custom Options → Language** で好みの言語を選択してください
### サポートされている言語
@@ -356,11 +362,11 @@ YTSage は **14 の言語**をサポートしており、世界中からアク
| 🇧🇷 ポルトガル語 | `pt` | 🇷🇺 ロシア語 | `ru` |
| 🇹🇷 トルコ語 | `tr` | 🇨🇳 中国語 | `zh` |
### README 翻訳
### README 翻訳
| 言語 | ファイル | 言語 | ファイル |
|----------|------|----------|------|
| 🇺🇸 英語 | [README.md](../README.md) | 🇪🇸 スペイン語 | [README.es.md](README.es.md)
| 🇺🇸 英語 | [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) |
@@ -368,165 +374,165 @@ YTSage は **14 の言語**をサポートしており、世界中からアク
| 🇧🇷 ポルトガル語 | [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>
<a id="トラブルシューティング"></a>
## 🛠️ トラブルシューティング
<details>
<summary>クリックすると一般的な問題と解決策表示されます</summary>
<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` ファイルをダウンロードすることです。
- **フォーマットテーブルが表示されない:** yt-dlp を最新バージョンに更新し、yt-dlp Nightly への切り替えを試してください
- **ダウンロードが失敗する:** インターネット接続を確認し、ビデオが利用可能であることを確認してください。
- **特定のダウンロードエラー**
- **非公開ビデオ:** 非公開コンテンツにアクセスするには、クッキー認証を使用してください
- **年齢制限のあるコンテンツ:** YouTube アカウントにログインして、年齢制限のあるビデオを表示してください。
- **ジオブロックされたビデオ:** 地域制限を回避するために VPN の使用を検討してください。
- **削除されたビデオ:** ビデオは YouTube で利用できなくなっています
- **ライブストリーム:** ライブストリームは放送中にダウンロードできません。ストリームが終了するまで待ってください
- **ネットワークエラー:** インターネット接続を確認して再試行してください。
- **無効な URL:** URL が正しく、サポートされているプラットフォームのものであることを確認してください。
- **プレミアムコンテンツ:** YouTube Premium のサブスクリプションが必要です。
- **著作権ブロック:** 著作権制限のため、コンテンツがブロックされています。
- **ダウンロード後にビデオとオーディオファイルが分かれている:** これは FFmpeg が不足しているか、検出されない場合に発生します。YTSage は、高品質のビデオとオーディオストリームを結合するために FFmpeg 必要とします。
- **解決策:** FFmpeg がインストールされており、システムの PATH でアクセス可能であることを確認してください。Windows ユーザーにとって最も簡単なオプションは、FFmpeg が同梱されている `YTSage-v<version>-ffmpeg.exe` ファイルをダウンロードすることです。
---
#### 🛡️ Windows Defender / ウイルス対策の警告
#### 🛡️ Windows Defender / アンチウイルス警告
一部のウイルス対策ソフトウェアは、`.exe` ファイル誤検知フラグ立てられる場合があります。これは、パッケージ化されたアプリケーションの**既知の制限**です。
一部のアンチウイルスソフトウェアは、`.exe` ファイル誤検知False Positive)としてフラグ立てる場合があります。これは、パッケージ化されたアプリケーションの**既知の制限**です。
**これが起こる理由:**
- ウイルス対策ヒューリスティックにより、パックされた実行可能ファイル疑わしいものとして誤認識される可能性がある
**なぜ発生するのか:**
- アンチウイルスヒューリスティック機能が、パッケージ化された実行ファイル疑わしいものとして誤認することがあります。
**安全な代替品:**
- ✅ **pip インストールを使用します:** `pip install ytsage` (推奨)
- ✅ **ソースからビルド**: これに従ってください [guide](../.github/CI_CD_README.md)
- ✅ **ウイルス対策ソフトウェアでアプリケーションをホワイトリストに登録**
**安全な選択肢:**
- ✅ **pip インストールを使用す:** `pip install ytsage` (推奨)
- ✅ **ソースからビルドする**: この[ガイド](.github/CI_CD_README.md)に従ってください。
- ✅ **アプリケーションをホワイトリストに追加する** (アンチウイルスソフトウェアの設定)。
#### 🍎 macOS: 「アプリが破損しているため開けません」
macOS Sonoma 以降でこのエラーが発生した場合は、隔離属性を削除する必要があります。
macOS Sonoma 以降でこのエラーが表示される場合は、 quarantine(隔離属性を削除する必要があります。
1. **ターミナルを開きます** (Spotlight を使用して見つけることができます)。
2. **次のコマンドを入力します**。**まだ Enter キーは押さないでください**。必ず末尾にスペースを含めてください
1. **ターミナルを開きます** (Spotlight で検索できます)。
2. **次のコマンドを入力します** が、まだ Enter は押さないでください。最後にスペースを含めるようにしてください
```bash
xattr -d com.apple.quarantine
```
3. **`YTSage.app` ファイル**を Finder ウィンドウからドラッグし、ターミナル ウィンドウに直接ドロップします。これにより、正しいファイル パスが自動的に貼り付けられます。
4. **Enter キーを押して**コマンドを実行します。
5. **YTSage.app をもう一度開いてみてください。** これで正しく起動するはずです。
3. **Finder ウィンドウから `YTSage.app` ファイルドラッグし**、ターミナルウィンドウに直接ドロップします。これにより、正しいファイルパスが自動的に貼り付けられます。
4. **Enter を押して** コマンドを実行します。
5. **YTSage.app を度開いてみてください。** 正しく起動するはずです。
---
#### **構成の場所 (詳細)**
#### **設定ファイルの場所 (上級者向け)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
<a id="スポンサー"></a>
## 💖 スポンサー
YTSage によって時間を節約できる場合は、プロジェクトのスポンサーになることを検討してください。スポンサーシップは、開発時間、プラットフォーム全体のテスト、将来の改善をカバーするのに役立ちます。
YTSage があなたの時間を節約できたなら、プロジェクトのスポンサーになることを検討してください。スポンサーシップは、開発時間、プラットフォームのテスト、および将来の改善に役立てられます。
- GitHub スポンサー: https://github.com/sponsors/oop7
- スポンサー リンクは、アプリ内の [バージョン情報] ダイアログから直接利用することもできます。
- GitHub Sponsors: https://github.com/sponsors/oop7
- スポンサーリンクは、アプリ内の About ダイアログから直接利用可能です。
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 貢献しています
<a id="貢献"></a>
## 👥 貢献
寄付を歓迎します!お手伝いできる方法は次のとおりです。
貢献を歓迎します!以下のように手助けができます:
1. 🍴 リポジトリをフォークする
2. 🌿 機能ブランチを作成します。
2. 🌿 フィーチャーブランチを作成する:
```bash
git checkout -b feature/AmazingFeature
```
3. 💾 変更をコミットします。
3. 💾 変更をコミットする:
```bash
git commit -m 'Add some AmazingFeature'
```
4. 📤 ブランチにプッシュします。
4. 📤 ブランチにプッシュする:
```bash
git push origin feature/AmazingFeature
```
5. 🔄 プルリクエストを開く
5. 🔄 プルリクエストを作成する
### 🌍 翻訳に貢献
### 🌍 翻訳に貢献する
- 一致するローカライズされた README ファイルを更新します (例: `README.es.md`)
- `ytsage/languages/<code>.json` を編集してアプリ文字列を同期させます
- 言語が見つからない場合は、`README.md` から開始して `README.<code>.md` を作成します
- 関連するローカライズ README ファイルを更新す (例: `readme-translations/README.ja.md`)
- `ytsage/languages/<code>.json` を編集してアプリ文字列を同期させ
- お使いの言語がない場合は、 `README.md` をベースに `README.<code>.md` を作成してください。
<details>
<summary>📂 プロジェクト構造</summary>
## YTSage - プロジェクト構造
このドキュメントでは、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
├── 📁 .github/ # GitHub 設定
│ ├── 📁 ISSUE_TEMPLATE/ # イシューテンプレート
│ │ └── 🐛-bug-report.md # バグレポートテンプレート
│ ├─── 📁 workflows/ # GitHub Actions ワークフロー
│ │ ├── build-linux.yml # Linux ビルドワークフロー
│ │ ├── build-macos.yml # macOS ビルドワークフロー
│ │ │── build-windows.yml # Windows ビルドワークフロー
| | └── release-all.yml # マスターリリースワークフロー
│ └── 📄 CI_CD_README.md # CI/CD ドキュメント
├── 📁 branding/ # ブランディングアセット (スクリーンショット, SVG)
│ ├── 📁 icons/ # アプリアイコン
│ ├── 📁 screenshots/ # ドキュメント用スクリーンショット
│ └── 📁 svg/ # SVG アセット
├── 📄 LICENSE # ライセンスファイル
├── 📄 pyproject.toml # プロジェクトメタデータと依存関係
├── 📄 README.md # プロジェクトドキュメント
├── 📄 requirements.txt # Python 依存関係 (dev)
└── 📁 ytsage/ # ソースコードパッケージ
├── 📁 assets/ # ランタイムアセット
│ ├── 📁 Icon/ # アプリアイコン
│ └── 📁 sound/ # オーディオファイル
├── 📁 languages/ # ローカライズファイル
│ ├── 📄 ar.json # アラビア語翻訳
│ ├── 📄 de.json # ドイツ語翻訳
│ ├── 📄 en.json # 英語翻訳
│ └── ... # その他の言語
├── 📁 core/ # コアビジネスロジック
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Deno 統合
│ ├── 📄 ytsage_downloader.py # ダウンロード機能
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg 統合
│ ├── 📄 ytsage_utils.py # ユーティリティ関数
│ └── 📄 ytsage_yt_dlp.py # yt-dlp 統合
├── 📁 gui/ # ユーザーインターフェースコンポーネント
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # アプリメインウィンドウ
│ └── 📁 ytsage_gui_dialogs/ # ダイアログクラス
├── 📁 utils/ # ユーティリティモジュール
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # 設定管理
│ └── 📄 ytsage_logger.py # ロギングツール
├── 📄 __init__.py # パッケージエントリポイント
└── 📄 main.py # メイン実行スクリプト
```
</details>
## ⭐️スターの歴史
## ⭐️ スター履歴
<div align="center">
## スターの歴史
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -540,7 +546,7 @@ YTSage/
## 📜 ライセンス
このプロジェクトは MIT ライセンスに基づいてライセンスされています。詳細については、[LICENSE](../LICENSE) ファイルを参照してください。
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は [LICENSE](LICENSE) ファイルを参照してください。
## 🙏 謝辞
@@ -549,10 +555,10 @@ YTSage/
<div align="center">
<p>改善の提案やバグの報告のために問題を開いてこのプロジェクトに貢献してくださった皆様に心から感謝します。</p>
<p>改善の提案やバグの報告のためにイシューを開いてこのプロジェクトに貢献してくださったすべての方々に感謝いたします。</p>
<table>
<tr class="section"><th colspan="2">コアコンポーネント</th></tr>
<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>
@@ -562,8 +568,8 @@ YTSage/
<td>メディア処理</td>
</tr>
<tr>
<td><a href="https://deno.com/">デノ</a></td>
<td>yt-dlp との統合用ランタイム</td>
<td><a href="https://deno.com/">Deno</a></td>
<td>yt-dlp 統合用ランタイム</td>
</tr>
<tr class="section"><th colspan="2">ライブラリとフレームワーク</th></tr>
<tr>
@@ -571,32 +577,33 @@ YTSage/
<td>GUI フレームワーク</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/"></a></td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>画像処理</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">リクエスト</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>HTTP リクエスト</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">梱包</a></td>
<td>バージョンとパッケージの取り扱い</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>バージョン管理とパッケージ</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">値下げ</a></td>
<td>マークダウン レンダリング</td>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Markdown レンダリング</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">ろぐる</a></td>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>ロギング</td>
</tr>
<tr class="section"><th colspan="2">アセットと寄稿者</th></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><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 by Universfield</a></td>
<td>通知音</td>
</tr>
<tr>
<td><a href="https://github.com/viru185">ウイルス185</a></td>
<td>コード寄稿者</td>
<td><a href="https://github.com/viru185">viru185</a></td>
<td>コード貢献者</td>
</tr>
</table>
@@ -606,12 +613,12 @@ YTSage/
## ⚠️ 免責事項
このツールは個人使用のみを目的としています。 YouTube の利用規約コンテンツ作者の権利を尊重してください。
このツールは個人用のみを目的としています。YouTube の利用規約およびコンテンツ作者の権利を尊重してください。
---
<div align="center">
[oop7](https://github.com/oop7) によって ❤️ で作られました
Created with ❤️ by [oop7](https://github.com/oop7)
</div>
+258 -252
View File
@@ -12,81 +12,82 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
**Nowoczesny downloader YouTube z czystym interfejsem PySide6.**
Pobieraj wideo w dowolnej jakości, wyodrębniaj audio, pobieraj napisy i wiele więcej.
### 🌍 PRZECZYTAJ Języki
### 🌍 Języki README
Angielski: [EN](../README.md)
| Numer telefonu: [AR](README.ar.md)
| Arabski: [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)
| Francuski: [FR](README.fr.md)
| Hindi: [HI](README.hi.md)
| Indonezyjski: [ID](README.id.md)
| Włoski: [IT](README.it.md)
| Japoński: [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)
| Chiński: [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="#instalacja">Instalacja</a> •
<a href="#funkcje">Funkcje</a> •
<a href="#użycie">Użycie</a> •
<a href="#zrzuty-ekranu">Zrzuty ekranu</a> •
<a href="#rozwiązywanie-problemów">Rozwiązywanie problemów</a> •
<a href="#sponsor">Sponsor</a> •
<a href="#contributing">Wspieranie</a>
<a href="#współpraca">Współpraca</a>
</p>
</div>
---
<a id="why-ytsage"></a>
<a id="dlaczego-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:
YTSage został zaprojektowany dla użytkowników, którzy chcą **prostego, ale potężnego downloadera YouTube**. W przeciwieństwie do innych narzędzi oferuje:
- Czysty, nowoczesny interfejs PySide6
- Nowoczesny i czysty 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
- Zaawansowane funkcje, takie jak SponsorBlock, scalanie napisów i wybór playlisty
- Opcjonalny tryb ogólny (Generic Mode) dla stron spoza YouTube obsługiwanych przez yt-dlp
- Obsługa wielu platform i łatwa instalacja
<a id="features"></a>
<a id="funkcje"></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 |
| Funkcje podstawowe | Funkcje zaawansowane | Funkcje dodatkowe |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Tabela formatów | 🚫 Integracja SponsorBlock | 🎞️ Wyświetlanie FPS/HDR |
| 🎵 Wyodrębnianie audio | 📝 Wybór i scalanie napisów | 🔄 Auto-aktualizacja yt-dlp |
| ✨ Prosty interfejs użytkownika | 💾 Zapis opisu i miniatur | 🛠️ Wykrywanie FFmpeg/yt-dlp/Deno |
| 📋 Obsługa i wybór playlist | 🚀 Ogranicznik prędkości | ⚙️ Własne komendy |
| 📑 Integracja rozdziałów | ✂️ Przycinanie sekcji wideo | 🍪 Logowanie przez ciasteczka |
| 📜 Historia pobierania | 🔄 Wybór kanału wydań | 🌐 Obsługa proxy |
| 🎚️ Konwersja formatów audio | 🎬 Ustawienia formatu wideo | 🆙 Zintegrowana karta aktualizacji |
| 🌍 Tryb ogólny | 🔊 Normalizacja audio (EBU R128) | 🌍 Lokalizacja w 14 językach |
| 💾 Eksport playlisty | ⚙️ Domyślna jakość i napisy | |
</div>
<a id="installation"></a>
<a id="instalacja"></a>
## 🚀 Instalacja
### ⚡ Szybka instalacja (zalecane)
### ⚡ Szybka instalacja (zalecana)
Zainstaluj YTSage z PyPI:
Zainstaluj YTSage przez PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 Zaktualizuj istniejącą instalację</summary>
<summary>🔄 Aktualizacja istniejącej instalacji</summary>
```bash
pip install --upgrade ytsage
@@ -100,33 +101,33 @@ Następnie uruchom aplikację:
ytsage
```
### 📦 Gotowe pliki wykonywalne
### 📦 Gotowe pliki wykonywalne (Executable)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Pobierz najnowsze wydanie](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Okna
#### 🪟 Windows
| Formatuj | Opis |
|------------|------------|
| Format | Opis |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standardowy instalator |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Z pakietem FFmpeg |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Z dołączonym FFmpeg |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Wersja przenośna, nie wymaga instalacji |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Przenośny z FFmpeg, spakowany |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Przenośna z FFmpeg, skompresowana (ZIP) |
<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.
1. **Instalator EXE (`.exe`)**: Kliknij dwukrotnie plik i postępuj zgodnie z instrukcjami kreatora.
2. **Wersja przenośna (`.zip`)**: Rozpakuj archiwum w wybranym miejscu i uruchom `ytsage.exe`.
3. **Wbudowany FFmpeg**: Jeśli nie masz zainstalowanego FFmpeg w systemie, wybierz wersję z dołączonym FFmpeg.
</details>
#### 🐧 Linux
| Formatuj | Opis |
|------------|------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Pakiet Debiana |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Obraz aplikacji, przenośny |
| Format | Opis |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Pakiet Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, przenośny |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Pakiet RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Pakiet Flatpak |
@@ -136,18 +137,18 @@ ytsage
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Jeśli trzeba naprawić brakujące zależności
```
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
- **Obraz aplikacji (`.AppImage`)**:
- **AppImage (`.AppImage`)**:
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: Postępuj zgodnie z instrukcjami na Flathubie lub uruchom:
- **Flatpak**: Postępuj zgodnie z instrukcjami na Flathub lub uruchom:
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -155,24 +156,24 @@ ytsage
#### 🍎 macOS
| Formatuj | Opis |
|------------|------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Spakowana aplikacja dla Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Instalator obrazu dysku dla Apple Silicon |
| Format | Opis |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Aplikacja ZIP dla Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Instalator Disk Image 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.
- **Archiwum aplikacji (`.zip`)**: Rozpakuj ZIP i przenieś `YTSage.app` do folderu Aplikacje.
*Uwaga: jeśli napotkasz błąd Aplikacja jest uszkodzona, zobacz [macOS troubleshooting section](#troubleshooting) poniżej.*
*Uwaga: Jeśli otrzymasz błąd "Aplikacja jest uszkodzona", zapoznaj się z sekcją rozwiązywania problemów macOS poniżej.*
</details>
---
<details>
<summary>💻 Instalacja ręczna ze źródła</summary>
<summary>💻 Ręczna instalacja ze źródeł</summary>
### 1. Sklonuj repozytorium
@@ -183,13 +184,13 @@ cd YTSage
### 2. Zainstaluj zależności
#### ⚡ Z uv
#### ⚡ Z użyciem uv
```bash
uv pip install .
```
#### 📦 Lub ze standardową końcówką
#### 📦 Lub ze standardowym pip
```bash
pip install .
@@ -203,226 +204,230 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
<a id="zrzuty-ekranu"></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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Ustawienia pobierania" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Pobieranie playlisty" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Pobierz ustawienia</em></td>
<td align="center"><em>Pobieranie listy odtwarzania</em></td>
<td align="center"><em>Ustawienia pobierania</em></td>
<td align="center"><em>Pobieranie playlisty</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>
<td><img src="../branding/screenshots/audio_format.png" alt="Wybór formatu audio" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opcje niestandardowe" 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>
</div>
<a id="użycie"></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**
2. **Wklej URL z YouTube** (lub użyj przycisku "Wklej URL")
3. **Kliknij "Analizuj"**
4. **Wybierz format:**
- `Video` do pobierania plików wideo
- `Audio Only` do ekstrakcji dźwięku
- `Wideo` dla pobierania wideo
- `Tylko audio` dla wyodrębniania dźwięku
5. **Wybierz opcje:**
- Włącz napisy i wybierz język
- Włącz scalanie napisów
- Zapisz miniaturę
- Usuń segmenty sponsorów
- Usuń sekcje sponsorowane
- Zapisz opis
- Osadzaj rozdziały
6. **Wybierz katalog wyjściowy**
7. **Kliknij Pobierz**
- Osadź rozdziały
6. **Wybierz folder wyjściowy**
7. **Kliknij "Pobierz"**
> 💡 Domyślnym katalogiem pobierania jest folder Pobrane użytkownika.
> 💡 Domyślny folder pobierania to folder "Pobrane" użytkownika.
</details>
<details>
<summary>📋 Pobieranie listy odtwarzania</summary>
<summary>📋 Pobieranie playlisty</summary>
1. **Wklej adres URL listy odtwarzania**
2. **Kliknij Analizuj**
3. **Wybierz filmy z selektora playlist (opcjonalnie, domyślnie wszystkie)**
1. **Wklej URL playlisty**
2. **Kliknij "Analizuj"**
3. **Wybierz filmy z selektora (opcjonalnie, domyślnie wszystkie)**
4. **Wybierz żądany format/jakość**
5. **Kliknij Pobierz**
5. **Kliknij "Pobierz"**
> 💡 Aplikacja automatycznie obsługuje kolejkę pobierania
> 💡 Aplikacja automatycznie zarządza kolejką pobierania, a wpisy playlisty możesz eksportować do plików `.txt`, `.csv`, `.m3u` lub `.json`.
</details>
<details>
<summary>🌍 Tryb ogólny dla witryn innych niż YouTube</summary>
<summary>🌍 Tryb ogólny dla stron 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.
Użyj trybu ogólnego (Generic Mode), gdy chcesz, aby YTSage akceptował adresy URL ze stron obsługiwanych przez yt-dlp, takich jak Dailymotion, CBC Gem, TikTok i inne.
Jak z niego korzystać:
Jak go użyć:
1. Otwórz `Download Settings`.
2. Włącz `Generic Mode`.
3. Wklej obsługiwany adres URL filmu lub listy odtwarzania spoza YouTube.
3. Wklej obsługiwany URL wideo lub playlisty 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.
- Tryb ogólny zmienia tylko walidację adresu URL wewnątrz YTSage. Strona docelowa musi być nadal obsługiwana przez zainstalowaną wersję yt-dlp.
- Niektóre strony wymagają ciasteczek, logowania, proxy lub dodatkowych argumentów yt-dlp w zależności od ekstraktora.
- Jeśli strona nie działa, zaktualizuj yt-dlp ze zintegrowanej karty aktualizacji przed zgłoszeniem problemu.
</details>
<details>
<summary>🧰 Opcje multimediów i pobierania</summary>
<summary>🧰 Opcje medió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`
- **Opcje napisów:** Filtruj języki i osadzaj napisy w pliku wideo.
- **Scalanie napisów:** Scala napisy z plikiem wideo (hardcoded).
- **Zapis opisu:** Zapisuje opis wideo jako plik tekstowy.
- **Zapis miniatury:** Zapisuje miniaturę wideo jako plik graficzny.
- **Osadź rozdziały:** Dołącza znaczniki rozdziałów jako metadane dla kompatybilnych odtwarzaczy.
- **Usuń sekcje sponsorowane:** Używa SponsorBlock do usuwania segmentów sponsorowanych z filmu.
- **Przycinanie wideo:** Pobieraj tylko określone części filmu, określając zakres czasu w formacie `GG:MM:SS`.
</details>
<details>
<summary>⚙️ Ustawienia wyjściowe i plikowe</summary>
<summary>⚙️ Ustawienia wyjściowe i plików</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.
- **Ogranicznik prędkości:** Ogranicz prędkość pobierania, np. `500K` dla 500 KB/s.
- **Zapisz ścieżkę pobierania:** Zapisuje domyślną ścieżkę dla przyszłych pobrań. Dostępne w **Download Settings → Download Path**.
- **Domyślna rozdzielczość wideo:** Ustaw preferowaną rozdzielczość dla automatycznego wyboru (np. 1080p, 720p). Dostępne w **Download Settings → Default Video Resolution**.
- **Domyślne języki napisów:** Ustaw domyślne języki dla automatycznego wyboru (rozdzielone przecinkami, np. `pl,en`). Dostępne w **Download Settings → Default Subtitle Languages**.
- **Format nazwy pliku:** Dostosuj format nazwy pliku wyjściowego, używając zmiennych takich jak `%(title)s`, `%(uploader)s`, `%(playlist_index)s` i `%(resolution)s`. Dostępne w **Download Settings → Filename Format**.
- **Wymuś format wyjściowy:** Wymuś pobieranie wideo do konkretnego formatu kontenera, jak `mp4`, `webm` lub `mkv`. Dostępne w **Download Settings → Output Format Settings**.
- **Konwersja formatów audio:** Konwertuj pobierany dźwięk do preferowanego formatu, takiego jak `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` lub `Best`. Dostępne w **Download Settings → Audio Format Settings**.
- **Normalizacja audio:** Ujednolica głośność pobieranego dźwięku przy użyciu EBU R128.
- **Jednoczesne połączenia:** Znacznie zwiększa prędkość pobierania, pobierając pliki w kilku częściach naraz. Dostępne w **Download Settings → General → Concurrent Connections** (domyślnie 1, zalecane maks. 8-10, aby uniknąć blokad IP).
</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
- **Logowanie przez ciasteczka:** Zaloguj się do YouTube, używając ciasteczek, aby uzyskać dostęp do prywatnych treści.
Użycie:
1. **Zalecane:** Użyj wbudowanej opcji `Eksportuj ciasteczka z przeglądarki`, a następnie wybierz przeglądarkę i opcjonalnie profil.
2. Alternatywnie, wyeksportuj ciasteczka ręcznie:
a. Eksportuj ciasteczka z przeglądarki, używając rozszerzenia typu [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
b. Skopiuj ciasteczka w formacie Netscape
c. Utwórz plik o nazwie `cookies.txt` i wklej ciasteczka
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**.
- **Obsługa proxy:** Użyj serwera proxy do pobierania, np. `http://<serwer-proxy>:<port>`
- **Tryb ogólny:** Pozwala YTSage na analizę i pobieranie z witryn innych niż YouTube obsługiwanych przez yt-dlp. Włącz w **Download Settings → Generic Mode**.
</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**.
- **Własne komendy:** Dostęp do zaawansowanych funkcji yt-dlp poprzez argumenty wiersza poleceń.
- **Karta aktualizacji:** Zarządzaj wbudowanymi narzędziami aktualizacji z jednego miejsca w opcjach niestandardowych:
- **Aktualizacja yt-dlp:** Sprawdzaj aktualizacje i przełączaj się między kanałami Stable i Nightly.
- **Sprawdzanie wersji FFmpeg:** Weryfikuj wersję FFmpeg i otwieraj przewodniki instalacji.
- **Aktualizacja Deno:** Sprawdzaj i aktualizuj środowisko uruchomieniowe Deno.
- **Wykrywanie FFmpeg/yt-dlp/Deno:** Automatycznie wykrywa ścieżki i wersje FFmpeg, yt-dlp i Deno w oknie "O programie".
- **Historia pobierania:** Przeglądaj poprzednie pobrania z miniaturami i statusami za pomocą przycisku **History**.
</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**.
YTSage obsługuje **14 języków**. Wybierz preferowany język w **Custom Options → Language**.
### 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` |
| 🇸🇦 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) |
|----------|------|----------|------|
| 🇺🇸 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!
> 💡 **Chcesz pomóc w tłumaczeniu?** Sprawdź sekcję [Współpraca](#współpraca), aby pomóc nam dodać więcej języków!
</details>
<a id="troubleshooting"></a>
<a id="rozwiązywanie-problemów"></a>
## 🛠️ Rozwiązywanie problemów
<details>
<summary>Kliknij, aby wyświetlić typowe problemy i rozwiązania</summary>
<summary>Kliknij, aby zobaczyć 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.
- **Tabela formatów nie pojawia się:** Zaktualizuj yt-dlp do najnowszej wersji i spróbuj przełącz się na kanał yt-dlp Nightly.
- **Pobieranie nie powiodło się:** Sprawdź połączenie z internetem i upewnij się, że wideo jest dostępne.
- **Konkretne błędy pobierania:**
- **Prywatne wideo:** Użyj uwierzytelniania przez ciasteczka, aby uzyskać dostęp do prywatnych treści.
- **Treści z ograniczeniem wiekowym:** Zaloguj się na swoje konto YouTube, aby wyświetlić filmy z ograniczeniem wiekowym.
- **Wideo z blokadą regionalną:** Rozważ użycie VPN, aby obejść ograniczenia regionalne.
- **Usunięte wideo:** Film nie jest już dostępny na YouTube.
- **Transmisje na żywo:** Transmisji na żywo nie można pobierać w trakcie ich trwania; poczekaj, aż transmisja się zakończy.
- **Błędy sieciowe:** Sprawdź połączenie z internetem i spróbuj ponownie.
- **Nieprawidłowy URL:** Upewnij się, że adres URL jest poprawny i pochodzi z obsługiwanej platformy.
- **Treść Premium:** Wymaga subskrypcji YouTube Premium.
- **Blokada praw autorskich:** Treść jest zablokowana z powodu ograniczeń praw autorskich.
- **Pliki wideo i audio są oddzielne po pobraniu:** Dzieje się tak, gdy brakuje FFmpeg lub nie został on wykryty. YTSage wymaga FFmpeg do scalania strumieni wideo i audio wysokiej jakości.
- **Rozwiązanie:** Upewnij się, że FFmpeg jest zainstalowany i dostępny w zmiennej PATH systemu. Dla użytkowników Windows najprostszą opcją jest pobranie pliku `YTSage-v<wersja>-ffmpeg.exe`, który zawiera FFmpeg.
---
#### 🛡️ Ostrzeżenie o programie Windows Defender/antywirusie
#### 🛡️ Ostrzeżenie Windows Defender / Antywirus
Niektóre programy antywirusowe mogą oznaczać pliki `.exe` jako fałszywe alarmy. Jest to **znane ograniczenie** aplikacji w pakietach.
Niektóre programy antywirusowe mogą oznaczać pliki `.exe` jako fałszywe alarmy (false positive). Jest to **znane ograniczenie** pakowanych aplikacji.
**Dlaczego tak się dzieje:**
- Heurystyka antywirusowa może błędnie zidentyfikować spakowane pliki wykonywalne jako podejrzane
- Heurystyka antywirusa 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
- ✅ **Użyj instalacji przez pip:** `pip install ytsage` (zalecane)
- ✅ **Zbuduj ze źródeł**: Postępując zgodnie z tym [przewodnikiem](.github/CI_CD_README.md)
- ✅ **Dodaj aplikację do wyjątków** w swoim programie antywirusowym.
#### 🍎 macOS: Aplikacja jest uszkodzona i nie można jej otworzyć
#### 🍎 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:
1. **Otwórz Terminal** (możesz go znaleźć przez Spotlight).
2. **Wpisz następującą komendę**, ale jeszcze **NIE** naciskaj Enter. Pamiętaj o spacjach 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.
3. **Przeciągnij plik `YTSage.app` z okna Findera** i upuść go bezpośrednio w oknie Terminala. To automatycznie wklei poprawną ścieżkę do pliku.
4. **Naciśnij Enter**, aby uruchomić komendę.
5. **Spróbuj ponownie otworzyć YTSage.app.** Powinien uruchomić się poprawnie.
---
#### **Lokacje konfiguracji (zaawansowane)**
#### **Lokalizacja konfiguracji (zaawansowane)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
@@ -432,102 +437,102 @@ Jeśli widzisz ten błąd w systemie macOS Sonoma lub nowszym, musisz usunąć a
<a id="sponsor"></a>
## 💖 Sponsor
Jeśli YTSage pozwoli Ci zaoszczędz czas, rozważ sponsorowanie projektu. Sponsoring pomaga pokryć czas opracowywania, testowania na różnych platformach i przyszłych ulepszeń.
Jeśli YTSage oszczędza Twój czas, rozważ wsparcie projektu. Sponsoring pomaga pokryć czas programistyczny, testy na wszystkich platformach i przyszłe ulepszenia.
- Sponsorzy GitHuba: https://github.com/sponsors/oop7
- Link sponsora jest również dostępny bezpośrednio w aplikacji, w oknie dialogowym Informacje.
- GitHub Sponsors: https://github.com/sponsors/oop7
- Link do wsparcia jest dostępny bezpośrednio przez okno "O programie" w aplikacji.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Wkład
<a id="współpraca"></a>
## 👥 Współpraca
Zapraszamy do wpłat! Oto jak możesz pomóc:
Zapraszamy do współpracy! Oto jak możesz pomóc:
1. 🍴Rozwidl repozytorium
2. 🌿 Utwórz gałąź funkcji:
1. 🍴 Skonfiguruj fork repozytorium
2. 🌿 Utwórz gałąź (branch) dla swojej funkcji:
```bash
git checkout -b feature/AmazingFeature
git checkout -b feature/NiesamowitaFunkcja
```
3. 💾 Zatwierdź zmiany:
3. 💾 Zatwierdź zmiany (commit):
```bash
git commit -m 'Add some AmazingFeature'
git commit -m 'Dodaj NiesamowitaFunkcja'
```
4. 📤 Pchnij do oddziału:
4. 📤 Wyślij zmiany do gałęzi (push):
```bash
git push origin feature/AmazingFeature
git push origin feature/NiesamowitaFunkcja
```
5. 🔄 Otwórz żądanie ściągnięcia
5. 🔄 Otwórz Pull Request
### 🌍 Tłumaczenia wspierające
### 🌍 Pomóż w tłumaczeniach
- 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`
- Zaktualizuj odpowiedni lokalny plik README (np. `readme-translations/README.pl.md`)
- Dbaj o synchronizację komunikatów aplikacji, edytując `ytsage/languages/<code>.json`
- Jeśli brakuje Twojego języka, zacznij od `README.md` i stwórz `README.<code>.md`
<details>
<summary>📂 Struktura projektu</summary>
## YTSage Struktura projektu
## YTSage - Struktura projektu
Ten dokument opisuje zorganizowaną strukturę folderów YTSage.
Ten dokument opisuje zorganizowaną strukturę folderów projektu 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
├── 📁 .github/ # Konfiguracja GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # Szablony zgłoszeń
│ │ └── 🐛-bug-report.md # Szablon zgłoszenia błędu
│ ├─── 📁 workflows/ # Procesy GitHub Actions
│ │ ├── build-linux.yml # Proces budowania dla Linux
│ │ ├── build-macos.yml # Proces budowania dla macOS
│ │ │── build-windows.yml # Proces budowania dla Windows
| | └── release-all.yml # Proces głównego wydania
│ └── 📄 CI_CD_README.md # Dokumentacja CI/CD
├── 📁 branding/ # Materiały graficzne (zrzuty ekranu, SVG)
│ ├── 📁 icons/ # Ikony aplikacji
│ ├── 📁 screenshots/ # Zrzuty ekranu do dokumentacji
│ └── 📁 svg/ # Zasoby SVG
├── 📄 LICENSE # Plik licencji
├── 📄 pyproject.toml # Metadane projektu i zależności
├── 📄 README.md # Dokumentacja projektu
├── 📄 requirements.txt # Zależności Python (dev)
└── 📁 ytsage/ # Pakiet kodu źródłowego
├── 📁 assets/ # Zasoby czasu wykonywania
│ ├── 📁 Icon/ # Ikony aplikacji
│ └── 📁 sound/ # Pliki dźwiękowe
├── 📁 languages/ # Pliki lokalizacji
│ ├── 📄 ar.json # Tłumaczenie arabskie
│ ├── 📄 de.json # Tłumaczenie niemieckie
│ ├── 📄 en.json # Tłumaczenie angielskie
│ └── ... # Inne języki
├── 📁 core/ # Główna logika biznesowa
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Integracja Deno
│ ├── 📄 ytsage_downloader.py # Funkcjonalność pobierania
│ ├── 📄 ytsage_ffmpeg.py # Integracja FFmpeg
│ ├── 📄 ytsage_utils.py # Funkcje pomocnicze
│ └── 📄 ytsage_yt_dlp.py # Integrasi yt-dlp
├── 📁 gui/ # Komponenty interfejsu użytkownika
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # Główne okno aplikacji
│ └── 📁 ytsage_gui_dialogs/ # Klasy okien dialogowych
├── 📁 utils/ # Moduły pomocnicze
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # Zarządzanie konfiguracją
│ └── 📄 ytsage_logger.py # Narzędzia logowania
├── 📄 __init__.py # Punkt wejścia pakietu
└── 📄 main.py # Główny skrypt wykonawczy
```
</details>
## ⭐️ Historia gwiazd
## ⭐️ Historia gwiazdek
<div align="center">
## Historia gwiazd
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,7 +546,7 @@ YTSage/
## 📜 Licencja
Ten projekt jest objęty licencją MIT — szczegółowe informacje można znaleźć w pliku [LICENSE](../LICENSE).
Ten projekt jest udostępniany na licencji MIT - zobacz plik [LICENSE](LICENSE), aby poznać szczegóły.
## 🙏 Podziękowania
@@ -550,54 +555,55 @@ Ten projekt jest objęty licencją MIT — szczegółowe informacje można znale
<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>
<p>Wielkie podziękowania dla wszystkich, którzy przyczynili się do rozwoju projektu poprzez zgłaszanie sugestii i błędów.</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>
<td>Silnik pobierania</td>
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
<td>Przetwarzanie multimediów</td>
<td>Przetwarzanie mediów</td>
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Środowisko wykonawcze do integracji z yt-dlp</td>
<td>Środowisko dla integracji yt-dlp</td>
</tr>
<tr class="section"><th colspan="2">Biblioteki i struktury</th></tr>
<tr class="section"><th colspan="2">Biblioteki i frameworki</th></tr>
<tr>
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
<td>Struktura GUI</td>
<td>Framework GUI</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/">Poduszka</a></td>
<td>Przetwarzanie obrazu</td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Przetwarzanie obrazów</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">żądania</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</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>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Zarządzanie wersjami i pakowanie</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">przecena</a></td>
<td><a href="https://python-markdown.github.io/">markdown</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 class="section"><th colspan="2">Zasoby i współpracownicy</th></tr>
<tr>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nowe powiadomienie 09 od Universfield</a></td>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 by 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>
<td>Współpracownik kodu</td>
</tr>
</table>
@@ -607,12 +613,12 @@ Ten projekt jest objęty licencją MIT — szczegółowe informacje można znale
## ⚠️ 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.
To narzędzie służy wyłącznie do użytku osobistego. Prosimy o przestrzeganie Warunków świadczenia usług YouTube i praw twórców treści.
---
<div align="center">
Wykonane z ❤️ przez [oop7](https://github.com/oop7)
Stworzone z ❤️ przez [oop7](https://github.com/oop7)
</div>
+259 -253
View File
@@ -12,81 +12,82 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
**Um downloader de YouTube moderno com uma interface PySide6 limpa.**
Baixe vídeos em qualquer qualidade, extraia áudio, obtenha legendas e muito mais.
### 🌍 LEIA-ME Idiomas
### 🌍 Idiomas do README
Inglês: [EN](../README.md)
| Nome: [AR](README.ar.md)
| Árabe: [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)
| Hindi: [HI](README.hi.md)
| Indonésio: [ID](README.id.md)
| Italiano: [IT](README.it.md)
| Nome do usuário: [JA](README.ja.md)
| Polaco: [PL](README.pl.md)
| Japonês: [JA](README.ja.md)
| Polonês: [PL](README.pl.md)
| Português: [PT](README.pt.md)
| Russo: [RU](README.ru.md)
| Turco: [TR](README.tr.md)
| 中文: [ZH](README.zh.md)
| Chinês: [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>
<a href="#instalação">Instalação</a> •
<a href="#funcionalidades">Funcionalidades</a> •
<a href="#uso">Uso</a> •
<a href="#capturas-de-tela">Capturas de Tela</a> •
<a href="#solução-de-problemas">Solução de Problemas</a> •
<a href="#patrocinar">Patrocinar</a> •
<a href="#contribuindo">Contribuindo</a>
</p>
</div>
---
<a id="why-ytsage"></a>
<a id="por-que-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:
O YTSage foi projetado para usuários que desejam um **downloader de YouTube simples, mas poderoso**. Ao contrário de outras ferramentas, ele oferece:
- Uma interface PySide6 limpa e moderna
- Downloads com um clique para vídeo, áudio e legendas
- Uma interface PySide6 moderna e limpa
- Download de vídeo, áudio e legendas com um clique
- 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
- Modo Genérico opcional para sites além do YouTube suportados pelo yt-dlp
- Suporte multiplataforma e instalação fácil
<a id="features"></a>
## ✨ Recursos
<a id="funcionalidades"></a>
## ✨ Funcionalidades
<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 |
| Recursos Básicos | Recursos Avançados | Recursos Extras |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Tabela de Formatos | 🚫 Integração SponsorBlock | 🎞️ Exibição de FPS/HDR |
| 🎵 Extração de Áudio | 📝 Seleção e Mesclagem de Legendas | 🔄 Atualização Automática do yt-dlp |
| ✨ Interface de Usuário Simples | 💾 Salvar Descrição e Miniatura | 🛠️ Detecção de FFmpeg/yt-dlp/Deno |
| 📋 Suporte e Seletor de Playlist | 🚀 Limitador de Velocidade | ⚙️ Comandos Personalizados |
| 📑 Integração de Capítulos | ✂️ Cortar Seções de Vídeo | 🍪 Login por Cookies |
| 📜 Histórico de Downloads | 🔄 Escolha do Canal de Lançamento | 🌐 Suporte a Proxy |
| 🎚️ Conversão de Formato de Áudio | 🎬 Configurações de Formato de Vídeo | 🆙 Aba de Atualização Integrada |
| 🌍 Modo Genérico | 🔊 Normalização de Áudio (EBU R128) | 🌍 Localização em 14 idiomas |
| 💾 Exportação de Playlist | ⚙️ Qualidade e Legendas Padrão | |
</div>
<a id="installation"></a>
<a id="instalação"></a>
## 🚀 Instalação
### ⚡ Instalação rápida (recomendado)
### ⚡ Instalação Rápida (Recomendada)
Instale YTSage do PyPI:
Instale o YTSage via PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 Atualizar uma instalação existente</summary>
<summary>🔄 Atualizar Instalação Existente</summary>
```bash
pip install --upgrade ytsage
@@ -94,49 +95,49 @@ pip install --upgrade ytsage
</details>
Em seguida, inicie o aplicativo:
Em seguida, execute o aplicativo:
```bash
ytsage
```
### 📦 Executáveis pré-construídos
### 📦 Executáveis Pré-compilados (Executable)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Baixar Lançamento Mais Recente](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Janelas
#### 🪟 Windows
| Formato | Descrição |
|--------|------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Instalador padrão |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Instalador Padrão |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Com FFmpeg incluído |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versão portátil, sem necessidade de instalação |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portátil com FFmpeg, compactado |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Versão Portátil, sem necessidade de instalação |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Portátil com FFmpeg, compactado (ZIP) |
<details>
<summary>🛠️ Etapas de instalação</summary>
<summary>🛠️ Passos para 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.
1. **Instalador EXE (`.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 Integrado**: Se você não possui o FFmpeg instalado no sistema, escolha as versões com FFmpeg integrado.
</details>
#### 🐧 Linux
| Formato | Descrição |
|--------|------------|
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Pacote Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, portátil |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, Portátil |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Pacote RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Pacote Flatpak |
<details>
<summary>🛠️ Etapas de instalação</summary>
<summary>🛠️ Passos para Instalação</summary>
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Se necessário para corrigir dependências ausentes
```
- **RPM (`.rpm`)**:
```bash
@@ -156,34 +157,34 @@ ytsage
#### 🍎 macOS
| Formato | Descrição |
|--------|------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Aplicativo compactado para Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Instalador de imagem de disco para Apple Silicon |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Aplicativo ZIP para Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Instalador Disk Image para Apple Silicon |
<details>
<summary>🛠️ Etapas de instalação</summary>
<summary>🛠️ Passos para 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.
- **Instalador DMG (`.dmg`)**: Clique duas vezes para montar e arraste `YTSage.app` para a sua pasta Aplicativos.
- **Arquivo do Aplicativo (`.zip`)**: Extraia o ZIP e mova `YTSage.app` para a sua pasta Aplicativos.
*Observação: se você encontrar um erro "O aplicativo está danificado", consulte [macOS troubleshooting section](#troubleshooting) abaixo.*
*Nota: Se você receber o erro "App está danificado", veja a seção de Problemos no macOS abaixo.*
</details>
---
<details>
<summary>💻 Instalação manual da fonte</summary>
<summary>💻 Instalação Manual a partir do Código-Fonte</summary>
### 1. Clone o repositório
### 1. Clonar o Repositório
```bash
git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2. Instalar dependências
### 2. Instalar Dependências
#### ⚡ Com UV
#### ⚡ Com uv
```bash
uv pip install .
@@ -195,7 +196,7 @@ uv pip install .
pip install .
```
### 3. Execute o aplicativo
### 3. Executar o Aplicativo
```bash
python -m ytsage.main
@@ -203,147 +204,151 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
## 📸 Capturas de tela
<a id="capturas-de-tela"></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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Configurações de Download" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Download de Playlist" 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>
<td align="center"><em>Configurações de Download</em></td>
<td align="center"><em>Download de 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>
<td><img src="../branding/screenshots/audio_format.png" alt="Seleção de Formato de Áudio" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opções Personalizadas" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Formato de áudio</em></td>
<td align="center"><em>Opções personalizadas</em></td>
<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>
</div>
<a id="uso"></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
2. **Cole uma URL do YouTube** (ou use o botão "Paste URL")
3. **Clique em "Analyze"**
4. **Escolha o Formato:**
- `Video` para download de vídeo
- `Audio Only` para extração de áudio
5. **Escolha Opções:**
- Ative legendas e selecione o idioma
- Ativar mesclagem de legendas
5. **Selecione Opções:**
- Habilite legendas e escolha o idioma
- Habilite a mesclagem de legendas
- Salvar miniatura
- Remover segmentos de patrocinadores
- Remover seções de patrocinadores
- Salvar descrição
- Incorporar capítulos
6. **Selecione Diretório de Saída**
7. **Clique em "Baixar"**
6. **Escolha o Diretório de Saída**
7. **Clique em "Download"**
> 💡 O diretório de download padrão é a pasta "Downloads" do usuário.
</details>
<details>
<summary>📋 Baixar lista de reprodução</summary>
<summary>📋 Download de Playlist</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)**
1. **Cole a URL da Playlist**
2. **Clique em "Analyze"**
3. **Selecione vídeos do seletor (opcional, padrão todos)**
4. **Escolha o formato/qualidade desejado**
5. **Clique em "Baixar"**
5. **Clique em "Download"**
> 💡 O aplicativo gerencia automaticamente a fila de download
> 💡 O aplicativo gerencia automaticamente a fila de download, e você pode exportar as entradas da playlist como arquivos `.txt`, `.csv`, `.m3u` ou `.json`.
</details>
<details>
<summary>🌍 Modo genérico para sites que não são do YouTube</summary>
<summary>🌍 Modo Genérico para Sites além 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.
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.
2. Habilite `Generic Mode`.
3. Cole uma URL de vídeo ou playlist suportada 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.
- O Modo Genérico apenas altera a validação da URL dentro do YTSage. O site de destino ainda deve ser suportado pela sua versão instalada do yt-dlp.
- Alguns sites exigem cookies, login, proxy ou argumentos adicionais do yt-dlp, dependendo do extrator.
- Se um site falhar, atualize o yt-dlp na aba de atualização integrada antes de relatar o problema.
</details>
<details>
<summary>🧰 Opções de mídia e download</summary>
<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`
- **Opções de Legendas:** Filtre idiomas e incorpore legendas no arquivo de vídeo.
- **Mesclagem de Legendas:** Mescla legendas no arquivo de vídeo para legendas fixas (hardcoded).
- **Salvar Descrição:** Salva a descrição do vídeo como um arquivo de texto.
- **Salvar Miniatura:** Salva a miniatura do vídeo como um arquivo de imagem.
- **Incorporar Capítulos:** Inclui marcadores de capítulo como metadados para players de vídeo compatíveis.
- **Remover Seções de Patrocinadores:** Usa o SponsorBlock para remover segmentos patrocinados do vídeo.
- **Cortar Vídeo:** Baixe apenas partes específicas do vídeo, especificando o intervalo de tempo no formato `HH:MM:SS`.
</details>
<details>
<summary>⚙️ Configurações de saída e arquivo</summary>
<summary>⚙️ Configurações de Saída e Arquivos</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.
- **Limitador de Velocidade:** Limite a velocidade de download, por exemplo, `500K` para 500 KB/s.
- **Salvar Caminho de Download:** Salva o caminho de download padrão para downloads futuros. Disponível em **Download Settings → Download Path**.
- **Resolução de Vídeo Padrão:** Defina sua resolução de vídeo preferida para seleção automática (ex: 1080p, 720p). Disponível em **Download Settings → Default Video Resolution**.
- **Idiomas de Legendas Padrão:** Defina idiomas de legendas padrão para seleção automática (separados por vírgula, ex: `pt,en`). Disponível em **Download Settings → Default Subtitle Languages**.
- **Formato de Nome de Arquivo:** Personalize o formato do nome do arquivo de saída usando variáveis como `%(title)s`, `%(uploader)s`, `%(playlist_index)s` e `%(resolution)s`. Disponível em **Download Settings → Filename Format**.
- **Forçar Formato de Saída:** Força o download do vídeo em um formato de contêiner específico, como `mp4`, `webm` ou `mkv`. Disponível em **Download Settings → Output Format Settings**.
- **Conversão de Formato de Áudio:** Converta downloads de apenas áudio para formatos preferidos como `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, ou `Best`. Disponível em **Download Settings → Audio Format Settings**.
- **Normalização de Áudio:** Padroniza o volume para downloads de apenas áudio usando EBU R128.
- **Conexões Simultâneas:** Aumente significativamente a velocidade de download baixando arquivos em várias partes ao mesmo tempo. Disponível em **Download Settings → General → Concurrent Connections** (padrão 1, máximo 8-10 recomendado para evitar bloqueios de IP).
</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)
- **Login por Cookies:** Faça login no YouTube usando cookies para acessar conteúdo privado.
Uso:
1. **Recomendado:** Use a opção integrada `Extract cookies from browser` no aplicativo, selecione o navegador e, opcionalmente, o perfil.
2. Opcionalmente, extraia cookies manualmente:
a. 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
c. Crie um arquivo chamado `cookies.txt` e cole os cookies
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**.
- **Suporte a Proxy:** Use um servidor proxy para downloads, ex: `http://<proxy-server>:<port>`
- **Modo Genérico:** Permite que o YTSage analise e baixe de sites além do YouTube suportados pelo yt-dlp. Habilite em **Download Settings → Generic Mode**.
</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**.
- **Comandos Personalizados:** Acesse recursos avançados do yt-dlp via argumentos de linha de comando.
- **Aba de Atualização:** Gerencie as ferramentas de atualização integradas em um só lugar nas Opções Personalizadas:
- **Atualização do yt-dlp:** Verifique atualizações e alterne entre os canais de lançamento Stable e Nightly.
- **Verificador de Versão do FFmpeg:** Verifique sua versão do FFmpeg e abra guias de instalação.
- **Atualização do Deno:** Verifique e atualize o runtime do Deno.
- **Detecção de FFmpeg/yt-dlp/Deno:** Detecta automaticamente caminhos e versões de FFmpeg, yt-dlp e Deno no diálogo Sobre.
- **Histórico de Downloads:** Veja downloads anteriores com miniaturas e status no botão **History**.
</details>
<details>
<summary>🌍 Localização</summary>
YTSage oferece suporte a **14 idiomas** para acessibilidade mundial. Selecione seu idioma preferido em **Opções personalizadas → Idioma**.
O YTSage suporta **14 idiomas** para alcance global. Escolha o seu idioma preferido em **Custom Options → Language**.
### Idiomas Suportados
@@ -357,11 +362,11 @@ YTSage oferece suporte a **14 idiomas** para acessibilidade mundial. Selecione s
| 🇧🇷 Português | `pt` | 🇷🇺 Russo | `ru` |
| 🇹🇷 Turco | `tr` | 🇨🇳 Chinês | `zh` |
### LEIA-ME Traduções
### Traduções do README
| Idioma | Arquivo | Idioma | Arquivo |
|----------|------|----------|------|
| 🇺🇸 Inglês | [README.md](../README.md) | 🇪🇸 Espanhol | [README.es.md](README.es.md)
| 🇺🇸 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) |
@@ -369,101 +374,101 @@ YTSage oferece suporte a **14 idiomas** para acessibilidade mundial. Selecione s
| 🇧🇷 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!
> 💡 **Quer ajudar na tradução?** Veja a seção [Contribuindo](#contribuindo) para nos ajudar a adicionar mais idiomas!
</details>
<a id="troubleshooting"></a>
## 🛠️ Solução de problemas
<a id="solução-de-problemas"></a>
## 🛠️ Solução de Problemas
<details>
<summary>Clique para ver problemas e soluções comuns</summary>
<summary>Clique para ver problemas comuns e soluções</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.
- **Tabela de formatos não aparece:** Atualize o yt-dlp para a versão mais recente e tente alternar para o yt-dlp Nightly.
- **Download falhou:** Verifique sua conexão com a internet e certifique-se de que o vídeo está disponível.
- **Erros de Download Específicos:**
- **Vídeos Privados:** Use a autenticação por cookies para acessar conteúdo privado.
- **Conteúdo com Restrição de Idade:** Faça login na sua conta do YouTube para visualizar vídeos com restrição de idade.
- **Vídeos com Bloqueio Geográfico:** Considere usar uma VPN para contornar restrições regionais.
- **Vídeo Removido:** O vídeo não está mais disponível no YouTube.
- **Live Streams:** Transmissões ao vivo não podem ser baixadas enquanto estão sendo transmitidas; aguarde até que a transmissão termine.
- **Erros de Rede:** Verifique sua conexão com a internet e tente novamente.
- **URL Inválida:** Certifique-se de que a URL está correta e pertence a uma plataforma suportada.
- **Conteúdo Premium:** Requer uma assinatura do YouTube Premium.
- **Bloqueio por Direitos Autorais:** O conteúdo está bloqueado devido a restrições de direitos autorais.
- **Arquivos de vídeo e áudio estão separados após o download:** Isso acontece quando o FFmpeg está ausente ou não foi detectado. O YTSage requer o FFmpeg para mesclar streams de vídeo e áudio de alta qualidade.
- **Solução:** Certifique-se de que o FFmpeg está 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<versão>-ffmpeg.exe`, que vem 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.
Alguns softwares antivírus podem sinalizar arquivos `.exe` como falsos positivos. Esta é uma **limitação conhecida** de aplicativos empacotados.
**Por que isso acontece:**
- A heurística antivírus pode identificar erroneamente executáveis compactados como suspeitos
- As heurísticas do antivírus podem identificar incorretamente executáveis empacotados 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
**Opções Seguras:**
- ✅ **Use a instalação via pip:** `pip install ytsage` (recomendado)
- ✅ **Compile a partir do código-fonte**: Seguindo este [guia](.github/CI_CD_README.md)
- ✅ **Adicione o aplicativo à lista de permissões** do 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.
#### 🍎 macOS: "App está danificado e não pode ser aberto"
Se você vir este erro no macOS Sonoma ou mais recente, você precisa 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:
2. **Digite o seguinte comando**, mas ainda **NÃO** pressione Enter. 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.
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.
5. **Tente abrir o YTSage.app novamente.** Ele agora deve iniciar corretamente.
---
#### **Locais de configuração (avançado)**
- **Janelas:** `%LOCALAPPDATA%\YTSage`
#### **Localização da Configuração (Avançado)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
## 💖 Patrocinador
<a id="patrocinar"></a>
## 💖 Patrocinar
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.
Se o YTSage economiza seu tempo, considere patrocinar o projeto. Os patrocínios ajudam a cobrir o tempo de desenvolvimento, testes em todas as 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.
- GitHub Sponsors: https://github.com/sponsors/oop7
- O link de patrocínio está disponível diretamente através do diálogo Sobre no aplicativo.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
<a id="contribuindo"></a>
## 👥 Contribuindo
Aceitamos contribuições! Veja como você pode ajudar:
Contribuições são bem-vindas! Veja como você pode ajudar:
1. 🍴 Bifurque o repositório
2. 🌿 Crie seu branch de recursos:
1. 🍴 Faça um Fork do repositório
2. 🌿 Crie sua branch de recurso:
```bash
git checkout -b feature/AmazingFeature
git checkout -b feature/RecursoIncrivel
```
3. 💾 Confirme suas alterações:
3. 💾 Faça o commit de suas alterações:
```bash
git commit -m 'Add some AmazingFeature'
git commit -m 'Adicionar RecursoIncrivel'
```
4. 📤 Empurre para o galho:
4. 📤 Faça o push para a branch:
```bash
git push origin feature/AmazingFeature
git push origin feature/RecursoIncrivel
```
5. 🔄 Abra uma solicitação pull
5. 🔄 Abra um Pull Request
### 🌍 Contribuindo com traduções
### 🌍 Contribua 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`
- Atualize o arquivo README localizado relevante (ex: `readme-translations/README.pt.md`)
- Mantenha as strings do aplicativo em sincronia editando `ytsage/languages/<code>.json`
- Se o seu idioma estiver ausente, comece pelo `README.md` e crie `README.<code>.md`
<details>
<summary>📂 Estrutura do Projeto</summary>
@@ -476,58 +481,58 @@ Este documento descreve a estrutura de pastas organizada do 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
├── 📁 .github/ # Configurações do GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # Modelos de problemas
│ │ └── 🐛-bug-report.md # Modelo de relatório de erro
│ ├─── 📁 workflows/ # Fluxos de trabalho do GitHub Actions
│ │ ├── build-linux.yml # Fluxo de build para Linux
│ │ ├── build-macos.yml # Fluxo de build para macOS
│ │ │── build-windows.yml # Fluxo de build para Windows
| | └── release-all.yml # Fluxo de lançamento principal
│ └── 📄 CI_CD_README.md # Documentação CI/CD
├── 📁 branding/ # Ativos de marca (capturas de tela, SVGs)
│ ├── 📁 icons/ # Ícones do aplicativo
│ ├── 📁 screenshots/ # Capturas de tela para documentação
│ └── 📁 svg/ # Ativos SVG
├── 📄 LICENSE # Arquivo de licença
├── 📄 pyproject.toml # Metadados do projeto e dependências
├── 📄 README.md # Documentação do projeto
├── 📄 requirements.txt # Dependências Python (dev)
└── 📁 ytsage/ # Pacote de código-fonte
├── 📁 assets/ # Ativos de tempo de execução
│ ├── 📁 Icon/ # Ícones do aplicativo
│ └── 📁 sound/ # Arquivos de áudio
├── 📁 languages/ # Arquivos de localização
│ ├── 📄 ar.json # Tradução em árabe
│ ├── 📄 de.json # Tradução em alemão
│ ├── 📄 en.json # Tradução em inglês
│ └── ... # Outros idiomas
├── 📁 core/ # Lógica de negócios principal
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Integração Deno
│ ├── 📄 ytsage_downloader.py # Funcionalidade de download
│ ├── 📄 ytsage_ffmpeg.py # Integração FFmpeg
│ ├── 📄 ytsage_utils.py # Funções utilitárias
│ └── 📄 ytsage_yt_dlp.py # Integração yt-dlp
├── 📁 gui/ # Componentes de interface do usuário
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # Janela principal do aplicativo
│ └── 📁 ytsage_gui_dialogs/ # Classes de diálogo
├── 📁 utils/ # Módulos utilitários
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # Gerenciamento de configuração
│ └── 📄 ytsage_logger.py # Ferramentas de registro
├── 📄 __init__.py # Ponto de entrada do pacote
└── 📄 main.py # Script de execução principal
```
</details>
## ⭐️ História da estrela
## ⭐️ Histórico de Estrelas
<div align="center">
## História da estrela
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,63 +546,64 @@ YTSage/
## 📜 Licença
Este projeto está licenciado sob a licença MIT - consulte o arquivo [LICENSE](../LICENSE) para obter detalhes.
Este projeto é licenciado sob a Licença MIT - consulte o arquivo [LICENSE](LICENSE) para mais detalhes.
## 🙏 Agradecimentos
<details>
<summary>Mostrar agradecimentos</summary>
<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>
<p>Muito obrigado a todos que contribuíram para este projeto abrindo problemas para sugerir melhorias ou relatar erros.</p>
<table>
<tr class="section"><th colspan="2">Componentes principais</th></tr>
<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>
<td>Mecanismo de Download</td>
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
<td>Processamento de mídia</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>
<td>Runtime para integração do yt-dlp</td>
</tr>
<tr class="section"><th colspan="2">Bibliotecas e Estruturas</th></tr>
<tr class="section"><th colspan="2">Bibliotecas e Frameworks</th></tr>
<tr>
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
<td>Estrutura GUI</td>
<td>Framework 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>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Processamento de Imagens</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">embalagem</a></td>
<td>Manuseio de versões e pacotes</td>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>Requisições HTTP</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">remarcação</a></td>
<td>Renderização de redução</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Gerenciamento de Versão e Empacotamento</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Renderização de Markdown</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Registro</td>
<td>Registro de Logs</td>
</tr>
<tr class="section"><th colspan="2">Ativos e Contribuintes</th></tr>
<tr class="section"><th colspan="2">Ativos e Contribuidores</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>
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 de 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>
<td>Contribuidor de Código</td>
</tr>
</table>
@@ -605,14 +611,14 @@ Este projeto está licenciado sob a licença MIT - consulte o arquivo [LICENSE](
</details>
## ⚠️ Isenção de responsabilidade
## ⚠️ 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.
Esta ferramenta é apenas para uso pessoal. Respeite os Termos de Serviço do YouTube e os direitos dos produtores de conteúdo.
---
<div align="center">
Feito com ❤️ por [oop7](https://github.com/oop7)
Criado com ❤️ por [oop7](https://github.com/oop7)
</div>
+267 -272
View File
@@ -1,7 +1,7 @@
<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"/>
<img src="../branding/screenshots/main.png" width="800" alt="Интерфейс YTSage"/>
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-1f2937?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/downloads/)
[![PyPI Downloads](https://img.shields.io/pepy/dt/ytsage?color=1f2937&style=for-the-badge&label=downloads&logo=python&logoColor=white)](https://pepy.tech/project/ytsage)
@@ -12,81 +12,82 @@
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/oop7)
**Современный загрузчик YouTube с чистым интерфейсом PySide6.**
Скачивайте видео в любом качестве, извлекайте аудио, получайте субтитры и многое другое.
**Современный загрузчик с YouTube с чистым интерфейсом на PySide6.**
Загружайте видео в любом качестве, извлекайте аудио, получайте субтитры и многое другое.
### 🌍 README Языки
### 🌍 Языки README
Английский: [EN](../README.md)
| Сообщение: [AR](README.ar.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)
| Хинди: [HI](README.hi.md)
| Индонезийский: [ID](README.id.md)
| Итальянский: [IT](README.it.md)
| 日本語: [JA](README.ja.md)
| Польски: [PL](README.pl.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)
| Турецкий: [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>
<a href="#установка">Установка</a> •
<a href="#функции">Функции</a> •
<a href="#использование">Использование</a> •
<a href="#скриншоты">Скриншоты</a> •
<a href="#решение-проблем">Решение проблем</a> •
<a href="#спонсорство">Спонсорство</a> •
<a href="#участие-в-проекте">Участие в проекте</a>
</p>
</div>
---
<a id="why-ytsage"></a>
<a id="почему-ytsage"></a>
## ❓ Почему YTSage?
YTSage предназначен для пользователей, которым нужен **простой, но мощный загрузчик YouTube**. В отличие от других инструментов, он предлагает:
YTSage создан для пользователей, которым нужен **простой, но мощный загрузчик с YouTube**. В отличие от других инструментов, он предлагает:
- Чистый, современный интерфейс PySide6.
- Загрузка видео, аудио и субтитров в один клик.
- Расширенные функции, такие как SponsorBlock, объединение субтитров и выбор списка воспроизведения.
Дополнительный общий режим для сайтов, поддерживаемых yt-dlp, за пределами YouTube.
- Кроссплатформенная поддержка и простота установки.
- Современный и чистый интерфейс PySide6
- Загрузку видео, аудио и субтитров одним щелчком мыши
- Дополнительные функции, такие как SponsorBlock, объединение субтитров и выбор плейлиста
- Опциональный "Общий режим" (Generic Mode) для сайтов помимо YouTube, поддерживаемых yt-dlp
- Кроссплатформенную поддержку и простую установку
<a id="features"></a>
## ✨ Особенности
<a id="функции"></a>
## ✨ Функции
<div align="center">
| Основные возможности | Расширенные возможности | Дополнительные возможности |
| Основные функции | Продвинутые функции | Дополнительные возможности |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Формат таблицы | 🚫 Интеграция SponsorBlock | 🎞️ Отображение FPS/HDR |
| 🎵 Извлечение аудио | 📝 Выбор и объединение нескольких субтитров | 🔄 Автоматическое обновление yt-dlp |
| ✨ Простой интерфейс | 💾 Сохранить описание и миниатюру | 🛠️ Обнаружение FFmpeg/yt-dlp/Deno |
| 📋 Поддержка и выбор плейлистов | 🚀 Ограничитель скорости | ⚙️ Пользовательские команды |
| 📑 Встроить главы | ✂️ Обрезать разделы видео | 🍪 Вход с помощью файлов cookie |
| 🎥 Таблица форматов | 🚫 Интеграция SponsorBlock | 🎞️ Отображение FPS/HDR |
| 🎵 Извлечение аудио | 📝 Выбор и объединение субтитров | 🔄 Автообновление yt-dlp |
| ✨ Простой пользовательский интерфейс | 💾 Сохранение описания и обложки | 🛠️ Обнаружение FFmpeg/yt-dlp/Deno |
| 📋 Поддержка и выбор плейлиста | 🚀 Ограничение скорости | ⚙️ Пользовательские команды |
| 📑 Интеграция разделов | ✂️ Обрезка видео | 🍪 Вход через Cookies |
| 📜 История загрузок | 🔄 Выбор канала выпуска | 🌐 Поддержка прокси |
| 🎚️ Преобразование аудиоформатов | 🎬 Настройки формата видео | 🆙 Встроенная вкладка «Обновление» |
| 🌍 Общий режим | 🔊 Нормализация звука (EBU R128) | 🌍 Локализация на 14 языках |
| 🎚️ Конвертация аудиоформатов | 🎬 Настройки видеоформата | 🆙 Встроенная вкладка обновления |
| 🌍 Общий режим | 🔊 Нормализация звука (EBU R128) | 🌍 Локализация на 14 языков |
| 💾 Экспорт плейлиста | ⚙️ Качество и субтитры по умолчанию | |
</div>
<a id="installation"></a>
<a id="установка"></a>
## 🚀 Установка
### ⚡ Быстрая установка (рекомендуется)
### ⚡ Быстрая установка (Рекомендуется)
Установите YTSage из PyPI:
Установите YTSage через PyPI:
```bash
pip install ytsage
```
<details>
<summary>🔄 Обновите существующую установку</summary>
<summary>🔄 Обновить существующую установку</summary>
```bash
pip install --upgrade ytsage
@@ -100,45 +101,45 @@ pip install --upgrade ytsage
ytsage
```
### 📦 Готовые исполняемые файлы
### 📦 Готовые исполняемые файлы (Executable)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 Скачать последний релиз](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Окна
#### 🪟 Windows
| Формат | Описание |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Стандартный установщик |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | В комплекте FFmpeg |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Портативная версия, установка не требуется |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Портативный с FFmpeg, в архиве |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | С включенным FFmpeg |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Портативная версия (не требует установки) |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Портативная с FFmpeg, сжатая (ZIP) |
<details>
<summary>🛠️ Этапы установки</summary>
<summary>🛠️ Шаги по установке</summary>
1. **Установщик EXE (`.exe`)**: дважды щелкните файл и следуйте указаниям мастера установки.
2. **Портативная версия (`.zip`)**: распакуйте архив в нужное место и запустите `ytsage.exe`.
3. **FFmpeg Bundled**: выберите версии в комплекте FFmpeg, если в вашей системе не установлен FFmpeg.
1. **EXE установщик (`.exe`)**: Дважды щелкните файл и следуйте инструкциям мастера установки.
2. **Портативная версия (`.zip`)**: Распакуйте файл в нужное место и запустите `ytsage.exe`.
3. **Встроенный FFmpeg**: Если в вашей системе не установлен FFmpeg, выбирайте версии со встроенным FFmpeg.
</details>
#### 🐧 Линукс
#### 🐧 Linux
| Формат | Описание |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Пакет Debian |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, портативный |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | пакет RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Комплект Flatpak |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, Портативный |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Пакет RPM |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Пакет Flatpak |
<details>
<summary>🛠️ Этапы установки</summary>
<summary>🛠️ Шаги по установке</summary>
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Если нужно исправить зависимости
```
- **Об/мин (`.rpm`)**:
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
@@ -147,7 +148,7 @@ ytsage
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: следуйте инструкциям на Flathub или запустите:
- **Flatpak**: Следуйте инструкциям на Flathub или выполните:
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -157,16 +158,16 @@ ytsage
| Формат | Описание |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Заархивированное приложение для Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Установщик образа диска для Apple Silicon |
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Приложение ZIP для Apple Silicon |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Установщик DMG для Apple Silicon |
<details>
<summary>🛠️ Этапы установки</summary>
<summary>🛠️ Шаги по установке</summary>
- **Установщик DMG (`.dmg`)**: дважды щелкните, чтобы смонтировать, затем перетащите `YTSage.app` в папку «Приложения».
- **Архив приложений (`.zip`)**: распакуйте zip-архив и переместите `YTSage.app` в папку «Приложения».
- **DMG установщик (`.dmg`)**: Дважды щелкните, чтобы смонтировать, и перетащите `YTSage.app` в папку Applications (Программы).
- **Приложение в архиве (`.zip`)**: Распакуйте ZIP и переместите `YTSage.app` в папку Applications.
*Примечание. Если вы столкнулись с ошибкой «Приложение повреждено», см. [macOS troubleshooting section](#troubleshooting) ниже.*
*Примечание: Если вы получили ошибку "App is damaged", см. раздел по macOS ниже.*
</details>
---
@@ -181,21 +182,21 @@ git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2. Установите зависимости
### 2. Установить зависимости
#### ⚡ С уф
#### ⚡ С помощью uv
```bash
uv pip install .
```
#### 📦 Или со стандартным пипом
#### 📦 Или через стандартный pip
```bash
pip install .
```
### 3. Запустите приложение
### 3. Запустить приложение
```bash
python -m ytsage.main
@@ -203,147 +204,151 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
<a id="скриншоты"></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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="Настройки загрузки" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Загрузка плейлиста" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Настройки загрузки</em></td>
<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>
<td><img src="../branding/screenshots/audio_format.png" alt="Выбор аудиоформата" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Пользовательские опции" width="400"/></td>
</tr>
<tr>
<td align="center"><em>Аудиоформат</em></td>
<td align="center"><em>Пользовательские параметры</em></td>
<td align="center"><em>Пользовательские опции</em></td>
</tr>
</table>
</div><a id="usage"></a>
</div>
<a id="использование"></a>
## 📖 Использование
<details>
<summary>🎯 Базовое использование</summary>
1. **Запустите YTSage**
2. **Вставьте URL-адрес YouTube** (или нажмите кнопку «Вставить URL-адрес»).
3. **Нажмите «Анализ»**.
2. **Вставьте ссылку на YouTube** (или используйте кнопку "Paste URL")
3. **Нажмите "Analyze"**
4. **Выберите формат:**
- `Video` для загрузки видео.
- `Audio Only` для извлечения звука
5. **Выберите параметры:**
- Включить субтитры и выбрать язык
- Включить объединение субтитров
- Сохранить миниатюру
- Удалить спонсорские сегменты
- Сохранить описание
- Вставлять главы
6. **Выберите выходной каталог**
7. **Нажмите «Загрузить»**.
- `Video` для загрузки видео
- `Audio Only` для извлечения аудио
5. **Выберите опции:**
- Включите субтитры и выберите язык
- Включите объединение субтитров (Merge)
- Сохранить обложку (Save Thumbnail)
- Удалить спонсорские вставки (SponsorBlock)
- Сохранить описание (Save Description)
- Внедрить главы (Embed Chapters)
6. **Выберите папку для сохранения**
7. **Нажмите "Download"**
> 💡 Каталогом загрузки по умолчанию является папка «Загрузки» пользователя.
> 💡 Папка загрузок по умолчанию папка "Загрузки" текущего пользователя.
</details>
<details>
<summary>📋 Скачать плейлист</summary>
<summary>📋 Загрузка плейлиста</summary>
1. **Вставьте URL-адрес плейлиста**
2. **Нажмите «Анализ»**.
3. **Выберите видео в селекторе плейлиста (необязательно, по умолчанию все)**
4. **Выберите желаемый формат/качество**
5. **Нажмите «Загрузить»**.
1. **Вставьте ссылку на плейлист**
2. **Нажмите "Analyze"**
3. **Выберите видео в селекторе (по умолчанию выбраны все)**
4. **Выберите нужный формат/качество**
5. **Нажмите "Download"**
> 💡 Приложение автоматически обрабатывает очередь загрузки
> 💡 Приложение автоматически управляет очередью загрузки, и вы можете экспортировать записи плейлиста в файлы `.txt`, `.csv`, `.m3u` или `.json`.
</details>
<details>
<summary>🌍 Общий режим для сайтов, не принадлежащих YouTube</summary>
<summary>🌍 Общий режим для сайтов помимо YouTube</summary>
Используйте общий режим, если хотите, чтобы YTSage принимал URL-адреса с сайтов, поддерживаемых yt-dlp, таких как Dailymotion, CBC Gem, TikTok и других.
Используйте Общий режим (Generic Mode), когда хотите, чтобы YTSage принимал ссылки с других сайтов, поддерживаемых yt-dlp, таких как Dailymotion, TikTok и другие.
Как его использовать:
Как использовать:
1. Откройте `Download Settings`.
2. Включите `Generic Mode`.
3. Вставьте поддерживаемый URL-адрес видео или списка воспроизведения, не относящегося к YouTube.
3. Вставьте ссылку на видео или плейлист с поддерживаемого сайта (не YouTube).
4. Нажмите `Analyze`.
5. Выберите формат и загрузите как обычно.
5. Выберите формат и скачайте как обычно.
Примечания:
- Общий режим изменяет только проверку URL-адреса внутри YTSage. Целевой сайт по-прежнему должен поддерживаться установленной версией yt-dlp.
Некоторым сайтам требуются файлы cookie, сеанс входа в систему, прокси-сервер или дополнительные аргументы yt-dlp в зависимости от экстрактора.
Если на сайте произошел сбой, сначала обновите yt-dlp на вкладке встроенного средства обновления, прежде чем сообщать о проблеме.
- Общий режим только отключает строгую проверку URL внутри YTSage. Сайт все равно должен поддерживаться установленной версией yt-dlp.
- Некоторым сайтам требуются cookies, вход, прокси или дополнительные аргументы yt-dlp.
- Если сайт перестал работать, обновите yt-dlp во встроенной вкладке обновления, прежде чем сообщать о проблеме.
</details>
<details>
<summary>🧰 Параметры мультимедиа и загрузки</summary>
<summary>🧰 Опции медиа и загрузки</summary>
- **Параметры субтитров:** фильтруйте языки и встраивайте субтитры в видеофайл.
- **Объединение субтитров:** объединение субтитров в видеофайл для жестко запрограммированных субтитров.
- **Сохранить описание:** сохранить описание видео в виде текстового файла.
- **Сохранить миниатюру:** сохраните миниатюру видео как файл изображения.
- **Встроить главы.** Встраивайте маркеры глав в качестве метаданных для совместимых видеопроигрывателей.
- **Удалить спонсорские сегменты.** Удалите спонсорские сегменты из видео с помощью SponsorBlock.
- **Обрезать видео:** загружайте только определенные части видео, указав временные диапазоны в формате `HH:MM:SS`.
- **Опции субтитров:** Фильтруйте языки и внедряйте субтитры в видеофайл.
- **Объединение субтитров:** "Вшивает" субтитры в видеофайл (hardcode).
- **Сохранить описание:** Сохраняет описание видео в текстовый файл.
- **Сохранить обложку:** Сохраняет превью видео как изображение.
- **Внедрить главы:** Добавляет маркеры глав в метаданные для совместимых медиаплееров.
- **Удалить спонсорские вставки:** Использует SponsorBlock для удаления рекламных сегментов из видео.
- **Обрезать видео:** Загружайте только части видео, указав временной интервал в формате `HH:MM:SS`.
</details>
<details>
<summary>⚙️ Настройки вывода и файла</summary>
<summary>⚙️ Настройки вывода и файлов</summary>
- **Ограничитель скорости:** Ограничьте скорость загрузки, например `500K` до 500 КБ/с.
- **Сохранить путь загрузки:** сохраните путь загрузки по умолчанию для будущих загрузок. Доступно в **Настройки загрузки → Путь загрузки**.
- **Формат имени выходного файла:** Настройте формат имени выходного файла, используя такие переменные, как `%(title)s`, `%(uploader)s` и `%(resolution)s`. Доступно в **Настройки загрузки → Формат имени файла**.
- **Принудительный формат вывода.** Принудительно загружайте видео в определенный формат контейнера, например `mp4`, `webm` или `mkv`. Доступно в **Настройки загрузки → Настройки формата вывода**.
- **Преобразование аудиоформата:** конвертируйте загрузки, содержащие только аудио, в предпочтительные форматы, такие как `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` или `Best`. Доступно в **Настройки загрузки → Настройки аудиоформата**.
- **Нормализация звука:** Стандартизируйте громкость для загрузок, содержащих только аудио, используя EBU R128.
- **Ограничение скорости:** Ограничьте скорость загрузки, например, `500K` для 500 КБ/с.
- **Путь загрузки:** Сохраните путь по умолчанию для будущих загрузок. Доступно в **Download Settings → Download Path**.
- **Разрешение по умолчанию:** Установите предпочитаемое разрешение для автовыбора (например, 1080p, 720p). Доступно в **Download Settings → Default Video Resolution**.
- **Языки субтитров по умолчанию:** Установите языки по умолчанию для автовыбора (через запятую, например, `ru,en`). Доступно в **Download Settings → Default Subtitle Languages**.
- **Формат имени файла:** Настройте формат имени выходного файла, используя переменные типа `%(title)s`, `%(uploader)s` и др. Доступно в **Download Settings → Filename Format**.
- **Принудительный формат вывода:** Принудительно скачивайте видео в определенном контейнере, например `mp4`, `webm` или `mkv`. Доступно в **Download Settings → Output Format Settings**.
- **Конвертация аудио:** Конвертируйте аудио в форматы `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, или `Best`. Доступно в **Download Settings → Audio Format Settings**.
- **Нормализация звука:** Выравнивает громкость аудио загрузок согласно EBU R128.
- **Одновременные соединения:** Значительно увеличивает скорость за счет загрузки в несколько потоков. Доступно в **Download Settings → General → Concurrent Connections** (рекомендуется 8-10).
</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. Включите его в разделе **Настройки загрузки → Общий режим**.
- **Вход через Cookies:** Войдите в YouTube через куки для доступа к приватному контенту.
Как использовать:
1. **Рекомендуется:** Используйте встроенную опцию `Extract cookies from browser`, выберите браузер и профиль.
2. Или вручную:
a. Экспортируйте куки через расширение [cookie-editor](https://github.com/moustachauve/cookie-editor).
b. Скопируйте куки в формате Netscape.
c. Создайте файл `cookies.txt` и вставьте их туда.
d. Выберите этот файл в приложении.
- **Поддержка прокси:** Используйте прокси-сервер для загрузок, например: `http://<proxy-server>:<port>`
- **Общий режим:** Позволяет скачивать с сайтов помимо YouTube. Включите в **Download Settings → Generic Mode**.
</details>
<details>
<summary>🛠️ Инструменты и уход</summary>
<summary>🛠️ Инструменты и обслуживание</summary>
**Пользовательские команды.** Доступ к расширенным функциям yt-dlp с помощью аргументов командной строки.
- **Вкладка «Обновление».** Управляйте встроенными инструментами обновления из одного места в пользовательских настройках:
- **Обновления yt-dlp:** проверяйте наличие обновлений и переключайтесь между стабильными и ночными выпусками.
- **Проверка версии FFmpeg:** проверьте версию FFmpeg и откройте руководства по установке.
- **Обновления Deno:** проверьте и обновите среду выполнения Deno.
- **Обнаружение FFmpeg/yt-dlp/Deno:** автоматическое определение путей и версий FFmpeg, yt-dlp и Deno в диалоговом окне «О программе».
- **История загрузок.** Просматривайте прошлые загрузки с помощью миниатюр и статусов с помощью кнопки **История**.
- **Пользовательские команды:** Доступ к продвинутым функциям yt-dlp через аргументы командной строки.
- **Вкладка обновления:** Управляйте инструментами в одном месте (Custom Options):
- **Обновление yt-dlp:** Проверка обновлений, переключение между Stable и Nightly ветками.
- **Версия FFmpeg:** Проверка версии и инструкции по установке.
- **Обновление Deno:** Проверка и обновление Deno.
- **Обнаружение FFmpeg/yt-dlp/Deno:** Автоматически находит пути и версии в окне "About".
- **История загрузок:** Просматривайте историю с обложками и статусом через кнопку **History**.
</details>
<details>
<summary>🌍 Локализация</summary>
YTSage поддерживает **14 языков**, что обеспечивает доступность по всему миру. Выберите предпочитаемый язык в меню **Пользовательские параметры → Язык**.
YTSage поддерживает **14 языков**. Выберите нужный в **Custom Options → Language**.
### Поддерживаемые языки
@@ -351,183 +356,174 @@ YTSage поддерживает **14 языков**, что обеспечива
|----------|------|----------|------|
| 🇺🇸 Английский | `en` | 🇪🇸 Испанский | `es` |
| 🇸🇦 Арабский | `ar` | 🇫🇷 Французский | `fr` |
| 🇩🇪 немецкий | `de` | 🇮🇳 Хинди | `hi` |
| 🇩🇪 Немецкий | `de` | 🇮🇳 Хинди | `hi` |
| 🇮🇩 Индонезийский | `id` | 🇮🇹 Итальянский | `it` |
| 🇯🇵 Японский | `ja` | 🇵🇱 Польский | `pl` |
| 🇧🇷 Португальский | `pt` | 🇷🇺 Русский | `ru` |
| 🇹🇷 Турецкий | `tr` | 🇨🇳 Китайский | `zh` |
### README Переводы
### Переводы README
| Язык | Файл | Язык | Файл |
|----------|------|----------|------|
| 🇺🇸 Английский | [README.md](../README.md) | 🇪🇸 Испанский | [README.es.md](README.es.md)
| 🇺🇸 Английский | [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.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>
## 🛠️ Устранение неполадок
<a id="решение-проблем"></a>
## 🛠️ Решение проблем
<details>
<summary>Нажмите, чтобы просмотреть распространенные проблемы и решения</summary>
<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.
- **Не появляется таблица форматов:** Обновите yt-dlp до последней версии и попробуйте переключиться на канал Nightly.
- **Загрузка не удалась:** Проверьте интернет-соединение и доступность видео.
- **Специфические ошибки:**
- **Приватные видео:** Используйте вход через Cookies.
- **Ограничение по возрасту:** Войдите в аккаунт YouTube.
- **Геоблокировка:** Используйте VPN.
- **Видео удалено:** Видео больше недоступно на YouTube.
- **Прямые трансляции:** Стримы нельзя скачать, пока они идут; дождитесь завершения.
- **Сетевые ошибки:** Проверьте подключение к интернету и повторите попытку.
- **Неверный URL:** Убедитесь, что URL указан правильно и принадлежит поддерживаемой платформе.
- **Премиум-контент:** Требуется подписка YouTube Premium.
- **Блокировка авторских прав:** Контент заблокирован из-за ограничений авторского права.
- **Видео и аудио разделены после загрузки:** Это происходит, если FFmpeg отсутствует или не обнаружен. YTSage нужен FFmpeg для объединения потоков.
- **Решение:** Убедитесь, что FFmpeg установлен и добавлен в PATH. Пользователям Windows проще всего скачать версию с `-ffmpeg.exe`.
---
#### 🛡️ Предупреждение Защитника Windows/антивируса
#### 🛡️ Предупреждение Windows Defender / Антивируса
Некоторые антивирусные программы могут помечать файлы `.exe` как ложные срабатывания. Это **известное ограничение** пакетных приложений.
Некоторые антивирусы могут помечать `.exe` файлы как ложные срабатывания. Это **известная особенность** упакованных приложений.
**Почему это происходит:**
- Антивирусная эвристика может ошибочно идентифицировать упакованные исполняемые файлы как подозрительные.
**Причины:**
- Эвристические алгоритмы антивирусов могут ошибочно идентифицировать упакованные исполняемые файлы как подозрительные.
**Безопасные альтернативы:**
- ✅ **Используйте установку pip:** `pip install ytsage` (рекомендуется)
- ✅ **Сборка из исходного кода**: следуя этому [guide](../.github/CI_CD_README.md)
- ✅ **Внесите приложение в белый список** в антивирусном программном обеспечении.
**Безопасные варианты:**
- ✅ **Установка через pip:** `pip install ytsage` (рекомендуется)
- ✅ **Сборка из исходников**: Инструкция [здесь](.github/CI_CD_README.md)
- ✅ **Добавить в исключения** антивируса.
#### 🍎 macOS: «Приложение повреждено и его невозможно открыть»
Если вы видите эту ошибку в macOS Sonoma или более поздней версии, вам необходимо удалить атрибут карантина.
#### 🍎 macOS: "App is damaged and cannot be opened"
Если вы видите эту ошибку на macOS Sonoma или новее:
1. **Откройте терминал** (его можно найти с помощью Spotlight).
2. **Введите следующую команду**, но **не** пока нажимайте Enter. Обязательно добавьте пробел в конце:
1. **Откройте Терминал**.
2. **Введите команду** (с пробелом в конце):
```bash
xattr -d com.apple.quarantine
```
3. **Перетащите файл `YTSage.app`** из окна Finder и поместите его прямо в окно терминала. Это автоматически вставит правильный путь к файлу.
4. **Нажмите Enter**, чтобы запустить команду.
5. **Попробуйте снова открыть YTSage.app.** Теперь оно должно запуститься правильно.
3. **Перетащите `YTSage.app`** из Finder в окно Терминала.
4. **Нажмите Enter**.
5. Попробуйте открыть программу снова.
---
#### **Места конфигурации (дополнительно)**
#### **Пути конфигурации (Продвинутым)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
## 💖 Спонсор
<a id="спонсорство"></a>
## 💖 Спонсорство
Если YTSage сэкономит вам время, рассмотрите возможность спонсирования проекта. Спонсорство помогает покрыть время разработки, тестирования на разных платформах и будущих улучшений.
Если YTSage экономит ваше время, поддержите разработку проекта. Спонсорство помогает поддерживать тестирование на всех платформах и внедрять новые функции.
- Спонсоры GitHub: https://github.com/sponsors/oop7
- Спонсорская ссылка также доступна непосредственно внутри приложения из диалогового окна «О программе».
- GitHub Sponsors: https://github.com/sponsors/oop7
- Ссылка на спонсорство также есть в окне "About" в приложении.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Вклад
<a id="участие-в-проекте"></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. 🔄 Откройте запрос на включение
1. 🍴 Сделайте Fork репозитория
2. 🌿 Создайте ветку: `git checkout -b feature/NewFeature`
3. 💾 Сделайте коммит: `git commit -m 'Add NewFeature'`
4. 📤 Отправите изменения: `git push origin feature/NewFeature`
5. 🔄 Создайте Pull Request
### 🌍 Участие в переводах
### 🌍 Помощь с переводами
- Обновите соответствующий локализованный файл README (например, `README.es.md`).
- Синхронизируйте строки приложения, отредактировав `ytsage/languages/<code>.json`.
- Если ваш язык отсутствует, начните с `README.md` и создайте `README.<code>.md`.
- Обновите файл README (например, `readme-translations/README.ru.md`)
- Обновите строки интерфейса в `ytsage/languages/<code>.json`
- Если ваш язык отсутствует, начните с `README.md` и создайте `README.<code>.md`
<details>
<summary>📂 Структура проекта</summary>
## YTSage Структура проекта
## YTSage - Структура проекта
В этом документе описывается организованная структура папок 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
├── 📁 .github/ # Настройки GitHub
│ ├── 📁 ISSUE_TEMPLATE/ # Шаблоны проблем
│ │ └── 🐛-bug-report.md # Шаблон отчета об ошибке
│ ├─── 📁 workflows/ # Рабочие процессы GitHub Actions
│ │ ├── build-linux.yml # Сборка для Linux
│ │ ├── build-macos.yml # Сборка для macOS
│ │ │── build-windows.yml # Сборка для Windows
| | └── release-all.yml # Основной процесс выпуска
│ └── 📄 CI_CD_README.md # Документация CI/CD
├── 📁 branding/ # Брендинг (скриншоты, SVG)
│ ├── 📁 icons/ # Иконки приложения
│ ├── 📁 screenshots/ # Скриншоты для документации
│ └── 📁 svg/ # SVG ассеты
├── 📄 LICENSE # Файл лицензии
├── 📄 pyproject.toml # Метаданные проекта и зависимости
├── 📄 README.md # Документация проекта
├── 📄 requirements.txt # Зависимости Python (разработка)
└── 📁 ytsage/ # Исходный код
├── 📁 assets/ # Ресурсы времени выполнения
│ ├── 📁 Icon/ # Иконки приложения
│ └── 📁 sound/ # Звуковые файлы
├── 📁 languages/ # Файлы локализации
│ ├── 📄 ar.json # Перевод на арабский
│ ├── 📄 de.json # Перевод на немецкий
│ ├── 📄 en.json # Перевод на английский
│ └── ... # Другие языки
├── 📁 core/ # Основная бизнес-логика
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Интеграция Deno
│ ├── 📄 ytsage_downloader.py # Функционал загрузки
│ ├── 📄 ytsage_ffmpeg.py # Интеграция FFmpeg
│ ├── 📄 ytsage_utils.py # Вспомогательные функции
│ └── 📄 ytsage_yt_dlp.py # Интеграция yt-dlp
├── 📁 gui/ # Компоненты интерфейса
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # Главное окно приложения
│ └── 📁 ytsage_gui_dialogs/ # Классы диалогов
├── 📁 utils/ # Утилиты
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # Управление конфигурацией
│ └── 📄 ytsage_logger.py # Логирование
├── 📄 __init__.py # Точка входа в пакет
└── 📄 main.py # Основной скрипт запуска
```
</details>
## ⭐️ Звездная история
## ⭐️ История звезд
<div align="center">
## Звездная история
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -541,7 +537,7 @@ YTSage/
## 📜 Лицензия
Этот проект лицензируется по лицензии MIT — подробности см. в файле [LICENSE](../LICENSE).
Проект распространяется под лицензией MIT — подробности в файле [LICENSE](LICENSE).
## 🙏 Благодарности
@@ -550,54 +546,55 @@ YTSage/
<div align="center">
<p>Сердечное спасибо всем, кто внес свой вклад в этот проект, открыв проблему, чтобы предложить улучшения или сообщить об ошибке.</p>
<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>
<td>Движок загрузки</td>
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
<td>Обработка мультимедиа</td>
<td>Обработка медиа</td>
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Среда выполнения для интеграции с yt-dlp</td>
<td>Среда для интеграции yt-dlp</td>
</tr>
<tr class="section"><th colspan="2">Библиотеки и платформы</th></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>
<td>GUI фреймворк</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/">Подушка</a></td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Обработка изображений</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">запросы</a></td>
<td>HTTP-запросы</td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>HTTP запросы</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">упаковка</a></td>
<td>Обработка версий и пакетов</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Управление версиями</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">уценка</a></td>
<td>Рендеринг уценки</td>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Рендеринг Markdown</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Ведение журнала</td>
<td>Логирование</td>
</tr>
<tr class="section"><th colspan="2">Активы и участники</th></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><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">New Notification 09 от Universfield</a></td>
<td>Звук уведомления</td>
</tr>
<tr>
<td><a href="https://github.com/viru185">viru185</a></td>
<td>Соавтор кода</td>
<td>Участник разработки</td>
</tr>
</table>
@@ -607,12 +604,10 @@ YTSage/
## ⚠️ Отказ от ответственности
Этот инструмент предназначен только для личного использования. Пожалуйста, соблюдайте условия обслуживания YouTube и права создателей контента.
Этот инструмент предназначен только для личного использования. Пожалуйста, соблюдайте Условия использования YouTube и права создателей контента.
---
<div align="center">
Сделано с ❤️ автором [oop7](https://github.com/oop7)
Сделано с ❤️ от [oop7](https://github.com/oop7)
</div>
+254 -247
View File
@@ -1,7 +1,7 @@
<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"/>
<img src="../branding/screenshots/main.png" width="800" alt="YTSage Arayüzü"/>
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-1f2937?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/downloads/)
[![PyPI Downloads](https://img.shields.io/pepy/dt/ytsage?color=1f2937&style=for-the-badge&label=downloads&logo=python&logoColor=white)](https://pepy.tech/project/ytsage)
@@ -13,80 +13,81 @@
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](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.
Videoları herhangi bir kalitede indirin, sesleri çıkarın, altyazıları alın ve daha fazlasını yapın.
### 🌍 BENİOKU Diller
### 🌍 README Dilleri
İngilizce: [EN](../README.md)
| Cevap: [AR](README.ar.md)
| Arapça: [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)
| Hintçe: [HI](README.hi.md)
| Endonezce: [ID](README.id.md)
| İtalyanca: [IT](README.it.md)
| Şarkı sözü: [JA](README.ja.md)
| Polski: [PL](README.pl.md)
| Japonca: [JA](README.ja.md)
| Lehçe: [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)
| Çince: [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>
<a href="#kurulum">Kurulum</a> •
<a href="#özellikler">Özellikler</a> •
<a href="#kullanım">Kullanım</a> •
<a href="#ekran-görüntüleri">Ekran Görüntüleri</a> •
<a href="#sorun-giderme">Sorun Giderme</a> •
<a href="#sponsor-olun">Sponsor Olun</a> •
<a href="#katkıda-bulunma">Katkıda Bulunma</a>
</p>
</div>
---
<a id="why-ytsage"></a>
<a id="neden-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
- Modern ve temiz bir PySide6 arayüzü
- Tek tıkla video, ses ve altyazı indirme
- 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
- yt-dlp tarafından desteklenen YouTube dışındaki siteler için isteğe bağlı "Genel Mod"
- Çoklu platform desteği ve kolay kurulum
<a id="features"></a>
<a id="özellikler"></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 |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 Format Tablosu | 🚫 SponsorBlock Entegrasyonu | 🎞️ FPS/HDR Gösterimi |
| 🎵 Ses Çıkarma | 📝 Altyazı Seçimi ve Birleştirme | 🔄 Otomatik yt-dlp Güncellemesi |
| ✨ Basit Kullanıcı Arayüzü | 💾 Açıklama ve Küçük Resim Kaydetme | 🛠️ FFmpeg/yt-dlp/Deno Algılama |
| 📋 Oynatma Listesi Desteği | 🚀 Hız Sınırlayıcı | ⚙️ Özel Komutlar |
| 📑 Bölüm Entegrasyonu | ✂️ Video Kırpma | 🍪 Çerez ile Giriş |
| 📜 İndirme Geçmişi | 🔄 Yayın Kanalı Seçimi | 🌐 Proxy Desteği |
| 🎚️ Ses Formatı Dönüştürme | 🎬 Video Format Ayarları | 🆙 Entegre Güncelleme Sekmesi |
| 🌍 Genel Mod | 🔊 Ses Normalizasyonu (EBU R128) | 🌍 14 Dilde Yerelleştirme |
| 💾 Oynatma Listesi Dışa Aktarma | ⚙️ Varsayılan Kalite ve Altyazı | |
</div>
<a id="installation"></a>
<a id="kurulum"></a>
## 🚀 Kurulum
### ⚡ Hızlı Kurulum (Önerilir)
### ⚡ Hızlı Kurulum (Önerilen)
YTSage'i PyPI'den yükleyin:
YTSage'i PyPI üzerinden yükleyin:
```bash
pip install ytsage
```
<details>
<summary>🔄 Mevcut bir kurulumu güncelleyin</summary>
<summary>🔄 Mevcut Kurulumu Güncelle</summary>
```bash
pip install --upgrade ytsage
@@ -94,41 +95,41 @@ pip install --upgrade ytsage
</details>
Ardından uygulamayı başlatın:
Ardından uygulamayı çalıştırın:
```bash
ytsage
```
### 📦 Önceden Oluşturulmuş Yürütülebilir Dosyalar
### 📦 Hazır Çalıştırılabilir Dosyalar (Executable)
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 En Son Sürümü İndir](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Windows
| Biçim | Açıklama |
|----------|----------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standart yükleyici |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg paketiyle birlikte |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Taşınabilir versiyon, kurulum gerektirmez |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg ile taşınabilir, sıkıştırılmış |
| Format | Açıklama |
|--------|-------------|
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Standart Kurulum Dosyası |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg Dahil |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | Taşınabilir Sürüm, kuruluma gerek yok |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg Dahil Taşınabilir, sıkıştırılmış (ZIP) |
<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.
1. **EXE Yükleyici (`.exe`)**: Dosyaya çift tıklayın ve kurulum sihirbazını takip edin.
2. **Taşınabilir Sürüm (`.zip`)**: Dosyayı istediğiniz yere çıkarın ve `ytsage.exe` dosyasını çalıştırın.
3. **Dahili FFmpeg**: Sisteminizde FFmpeg kurulu değilse, FFmpeg dahil olan sürümleri seçin.
</details>
#### 🐧 Linux
| Biçim | Açıklama |
|----------|----------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian paketi |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, taşınabilir |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM paketi |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Düz Paket Paketi |
| Format | Açıklama |
|--------|-------------|
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian Paketi |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage, Taşınabilir |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM Paketi |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak Paketi |
<details>
<summary>🛠️ Kurulum Adımları</summary>
@@ -136,7 +137,7 @@ ytsage
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # Gerekirse eksik bağımlılıkları gidermek için
```
- **RPM (`.rpm`)**:
```bash
@@ -147,7 +148,7 @@ ytsage
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**: Flathub'daki talimatları izleyin veya şunu çalıştırın:
- **Flatpak**: Flathub üzerindeki talimatları izleyin veya şunu çalıştırın:
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -155,24 +156,24 @@ ytsage
#### 🍎 macOS
| Biçim | Açıklama |
|----------|----------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon için sıkıştırılmış uygulama |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon için disk görüntüsü yükleyici |
| Format | Açıklama |
|--------|-------------|
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon için ZIP Uygulaması |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon için Disk Image Kurulum Dosyası |
<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.
- **DMG Yükleyici (`.dmg`)**: Bağlamak için çift tıklayın ve `YTSage.app` dosyasını Uygulamalar klasörünüze sürükleyin.
- **Uygulama Arşivi (`.zip`)**: ZIP dosyasını çıkarın ve `YTSage.app` dosyasını 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.*
*Not: "Uygulama hasarlı" hatası alırsanız, aşağıdaki macOS Sorun Giderme bölümüne bakın.*
</details>
---
<details>
<summary>💻 Kaynaktan Manuel Kurulum</summary>
<summary>💻 Kaynak Kodundan Manuel Kurulum</summary>
### 1. Depoyu Klonlayın
@@ -181,9 +182,9 @@ git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2. Bağımlılıkları Kurun
### 2. Bağımlılıkları Yükleyin
#### ⚡UV ile
#### ⚡ uv ile
```bash
uv pip install .
@@ -195,7 +196,7 @@ uv pip install .
pip install .
```
### 3. Uygulamayı çalıştırın
### 3. Uygulamayı Çalıştırın
```bash
python -m ytsage.main
@@ -203,146 +204,151 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
## 📸 Ekran görüntüleri
<a id="ekran-görüntüleri"></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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="İndirme Ayarları" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="Oynatma Listesi İndirme" width="400"/></td>
</tr>
<tr>
<td align="center"><em>İndirme Ayarları</em></td>
<td align="center"><em>Çalma Listesi İndir</em></td>
<td align="center"><em>Oynatma Listesi İndirme</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>
<td><img src="../branding/screenshots/audio_format.png" alt="Ses Formatı Seçimi" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="Özel Seçenekler" 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>
</div>
<a id="kullanım"></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:**
2. **Bir YouTube URL'si yapıştırın** (veya "Paste URL" düğmesini kullanın)
3. **"Analyze" düğmesine tıklayın**
4. **Formatı Seçin:**
- Video indirmek için `Video`
- Sadece ses çıkarmak için `Audio Only`
5. **Seçenekleri Belirleyin:**
- 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**
- Altyazı birleştirmeyi (Merge subs) etkinleştirin
- Küçük resmi kaydet (Save thumbnail)
- Sponsor bölümlerini kaldır (SponsorBlock)
- Açıklamayı kaydet (Save description)
- Bölümleri göm (Embed chapters)
6. **Çıkış Dizinini Seçin**
7. **"Download" düğmesine tıklayın**
> 💡 Varsayılan indirme dizini kullanıcının "İndirilenler" klasörüdür.
> 💡 Varsayılan indirme dizini kullanıcının "İndirmeler" klasörüdür.
</details>
<details>
<summary>📋 Çalma Listesi İndir</summary>
<summary>📋 Oynatma Listesi İndirme</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ü)**
2. **"Analyze" düğmesine tıklayın**
3. **Seçiciden videoları seçin (varsayılan olarak tümü seçilidir)**
4. **İstediğiniz formatı/kaliteyi seçin**
5. **"İndir"e tıklayın**
5. **"Download" düğmesine tıklayın**
> 💡 Uygulama indirme sırasını otomatik olarak yönetir
> 💡 Uygulama indirme kuyruğunu otomatik olarak yönetir ve oynatma listesi girişlerini `.txt`, `.csv`, `.m3u` veya `.json` dosyaları olarak dışa aktarabilirsiniz.
</details>
<details>
<summary>🌍 YouTube dışı siteler için Genel Mod</summary>
<summary>🌍 YouTube Dışındaki Siteler İç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.
YTSage'in Dailymotion, TikTok ve diğerleri gibi yt-dlp tarafından desteklenen sitelerden gelen URL'leri kabul etmesini istediğinizde 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.
1. `Download Settings` bölümünü açın.
2. `Generic Mode` seçeneğini etkinleştirin.
3. YouTube dışındaki desteklenen bir video veya oynatma listesi URL'sini yapıştırın.
4. `Analyze` düğmesine tıklayın.
5. Bir format seçin ve normal şekilde 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.
- Genel Mod sadece YTSage içindeki URL doğrulamasını değiştirir. Hedef site hala yüklü yt-dlp sürümünüz tarafından desteklenmelidir.
- Bazı siteler, çıkarıcıya bağlı olarak çerezler, giriş, proxy veya ek yt-dlp argümanları gerektirebilir.
- Bir site hata verirse, sorun bildirmeden önce entegre güncelleme 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
- **Altyazı Seçenekleri:** Dilleri filtreleyin ve altyazıları video dosyasına gömün.
- **Altyazı Birleştirme:** Altyazıları video dosyasına kalıcı olarak (hardcode) birleştirir.
- **Açıklamayı Kaydet:** Video açıklamasını bir metin dosyası olarak kaydeder.
- **Küçük Resmi Kaydet:** Video küçük resmini bir resim dosyası olarak kaydeder.
- **Bölümleri Göm:** Uyumlu video oynatıcılar için meta veri olarak bölüm işaretlerini ekler.
- **Sponsor Bölümlerini Kaldır:** Videodaki sponsorlu bölümleri kaldırmak için SponsorBlock kullanır.
- **Videoyu Kırp:** Zaman aralığını `SA:DA:SA` formatında belirterek videonun sadece belirli bölümlerini indirin.
</details>
<details>
<summary>⚙️ Çıktı ve Dosya Ayarları</summary>
<summary>⚙️ Çıkış 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.
- **Hız Sınırlayıcı:** İndirme hızını sınırlandırın, örneğin 500 KB/s için `500K`.
- **İndirme Yolunu Kaydet:** Gelecekteki indirmeler için varsayılan indirme yolunu kaydeder. **Download Settings → Download Path** bölümünde mevcuttur.
- **Varsayılan Video Çözünürlüğü:** Otomatik seçim için tercih ettiğiniz video çözünürlüğünü ayarlayın (örn: 1080p, 720p). **Download Settings → Default Video Resolution** bölümünde mevcuttur.
- **Varsayılan Altyazı Dilleri:** Otomatik seçim için varsayılan altyazı dillerini ayarlayın (virgülle ayrılmış, örn: `tr,en`). **Download Settings → Default Subtitle Languages** bölümünde mevcuttur.
- **Dosya Adı Formatı:** Çıkış dosyası adı formatını `%(title)s`, `%(uploader)s` gibi değişkenler kullanarak özelleştirin. **Download Settings → Filename Format** bölümünde mevcuttur.
- **Çıkış Formatını Zorla:** Videoyu `mp4`, `webm` veya `mkv` gibi belirli bir konteyner formatında indirmeye zorlar. **Download Settings → Output Format Settings** bölümünde mevcuttur.
- **Ses Formatı Dönüştürme:** Sadece ses indirmelerini `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` veya `Best` gibi tercih edilen formatlara dönüştürün. **Download Settings → Audio Format Settings** bölümünde mevcuttur.
- **Ses Normalizasyonu:** EBU R128 kullanarak sadece ses indirmeleri için ses seviyesini standartlaştırır.
- **Eşzamanlı Bağlantılar:** Dosyaları aynı anda birden fazla parça halinde indirerek indirme hızını önemli ölçüde artırın. **Download Settings → General → Concurrent Connections** bölümünde mevcuttur (Varsayılan 1, IP engellemelerini önlemek için maksimum 8-10 önerilir).
</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.
- **Çerez ile Giriş:** Özel içeriğe erişmek için çerezleri kullanarak YouTube'da oturum açın.
Kullanım:
1. **Önerilen:** Uygulamadaki entegre `Extract cookies from browser` seçeneğini kullanın, tarayıcıyı ve isteğe bağlı olarak profili seçin.
2. İsteğe bağlı olarak çerezleri manuel olarak çıkarın:
a. [cookie-editor](https://github.com/moustachauve/cookie-editor) gibi bir uzantı kullanarak tarayıcınızdan çerezleri dışa aktarın.
b. Çerezleri Netscape formatında kopyalayın.
c. `cookies.txt` adlı bir dosya oluşturun ve çerezleri yapıştırın.
d. Uygulamada `cookies.txt` dosyasını seçin.
- **Proxy Desteği:** İndirmeler için bir proxy sunucusu kullanın, örn: `http://<proxy-server>:<port>`
- **Genel Mod:** YTSage'in yt-dlp tarafından desteklenen YouTube dışındaki siteleri analiz etmesine ve indirmesine olanak tanır. **Download Settings → Generic Mode** bölümünden 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.
- **Özel Komutlar:** Komut satırı argümanları aracılığıyla gelişmiş yt-dlp özelliklerine erişin.
- **Güncelleme Sekmesi:** Entegre güncelleme araçlarını Özel Seçenekler altındaki tek bir yerden yönetin:
- **yt-dlp Güncelleme:** Güncellemeleri kontrol edin ve Stable ile Nightly yayın kanalları arasında geçiş yapın.
- **FFmpeg Sürüm Kontrolü:** FFmpeg sürümünüzü kontrol edin ve kurulum kılavuzlarını açın.
- **Deno Güncelleme:** Deno çalışma zamanını kontrol edin ve güncelleyin.
- **FFmpeg/yt-dlp/Deno Algılama:** Hakkında diyaloğunda FFmpeg, yt-dlp ve Deno yollarını ve sürümlerini otomatik olarak algılar.
- **İndirme Geçmişi:** **History** düğmesi aracılığıyla küçük resimler ve durumlarla birlikte geçmiş indirmeleri görün.
</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.
YTSage, küresel erişim için **14 dili** destekler. Tercih ettiğiniz dili **Custom Options → Language** bölümünden seçin.
### Desteklenen Diller
@@ -360,7 +366,7 @@ YTSage, dünya çapında erişilebilirlik için **14 dili** destekler. **Özel S
| Dil | Dosya | Dil | Dosya |
|----------|------|----------|------|
| 🇺🇸 İngilizce | [README.md](../README.md) | 🇪🇸 İspanyolca | [README.es.md](README.es.md)
| 🇺🇸 İ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) |
@@ -368,165 +374,165 @@ YTSage, dünya çapında erişilebilirlik için **14 dili** destekler. **Özel S
| 🇧🇷 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!
> 💡 **Çeviriye yardımcı olmak ister misiniz?** Daha fazla dil eklememize yardımcı olmak için [Katkıda Bulunma](#katkıda-bulunma) bölümüne bakın!
</details>
<a id="troubleshooting"></a>
## 🛠️ Sorun giderme
<a id="sorun-giderme"></a>
## 🛠️ Sorun Giderme
<details>
<summary>Genel sorunları ve çözümleri görüntülemek için tıklayın</summary>
<summary>Yaygın sorunlar ve çözümler 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.
- **Format tablosu görünyor:** yt-dlp'yi en son sürüme güncelleyin ve yt-dlp Nightly kanalına geçmeyi deneyin.
- **İndirme başarısız oldu:** İnternet bağlantınızı kontrol edin ve videonun erişilebilir olduğundan emin olun.
- **Belirli İndirme Hataları:**
- **Özel Videolar:** Özel içeriğe erişmek için çerez kimlik doğrulamasını kullanın.
- **Yaş Sınırlı İçerik:** Yaş sınırlı videoları görüntülemek için YouTube hesabınızda oturum açın.
- **Coğrafi Engelli Videolar:** Bölgesel kısıtlamaları aşmak için bir VPN kullanmayı düşünün.
- **Video Kaldırıldı:** Video artık YouTube'da mevcut değildir.
- **Canlı Yayınlar:** Canlı yayınlar yayınlanırken indirilemez; yayın bitene kadar bekleyin.
- **Ağ Hataları:** İnternet bağlantınızı kontrol edin ve tekrar deneyin.
- **Geçersiz URL:** URL'nin doğru olduğundan ve desteklenen bir platforma ait olduğundan emin olun.
- **Premium İçerik:** YouTube Premium aboneliği gerektirir.
- **Telif Hakkı Engeli:** İçerik telif hakkı kısıtlamaları nedeniyle engellenmiştir.
- **İndirme sonrası video ve ses dosyaları ayrı:** Bu durum FFmpeg eksik olduğunda veya algılanmadığında olur. YTSage, yüksek kaliteli video ve ses akışlarını birleştirmek için FFmpeg gerektirir.
- **Çözüm:** FFmpeg'in kurulu olduğundan ve sistem PATH'inizde erişilebilir olduğundan emin olun. Windows kullanıcıları için en kolay seçenek, FFmpeg ile birlikte gelen `YTSage-v<sürüm>-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**.
Bazı antivirüs yazılımları `.exe` dosyalarını yanlış pozitif olarak işaretleyebilir. Bu, paketlenmiş 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
**Neden olur:**
- Antivirüs sezgiselleri paketlenmiş yürütülebilir dosyaları hatalı bir şekilde şüpheli olarak 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**
**Güvenli Seçenekler:**
- ✅ **pip kurulumunu kullanın:** `pip install ytsage` (önerilir)
- ✅ **Kaynaktan derleyin**: Bu [kılavuzu](.github/CI_CD_README.md) takip ederek
- ✅ **Uygulamayı antivirüs yazılımınızın beyaz listesine ekleyin**.
#### 🍎 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.
macOS Sonoma veya daha yeni sürümlerde bu hatayı görüyorsanız, karantina özniteliğ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:
1. **Terminal'i açın** (Spotlight kullanarak bulabilirsiniz).
2. **Aşağıdaki komutu yazın**, ancak henüz Enter tuşuna **BASMAYIN**. Sonundaki 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.
3. **`YTSage.app` dosyasını Finder penceresinden sürükleyin** ve 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 düzgün bir şekilde çalışmalıdır.
---
#### **Yapılandırma Konumları (Gelişmiş)**
#### **Yapılandırma Konumu (Gelişmiş)**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
## 💖 Sponsor
<a id="sponsor-olun"></a>
## 💖 Sponsor Olun
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.
YTSage size zaman kazandırıyorsa, projeye sponsor olmayı düşünün. Sponsorluklar geliştirme süresini, tüm platformlarda test yapmayı ve gelecekteki iyileştirmeleri karşılamaya 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.
- GitHub Sponsors: https://github.com/sponsors/oop7
- Sponsorluk bağlantısı uygulamadaki Hakkında diyaloğu üzerinden doğrudan mevcuttur.
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
## 👥 Katkıda Bulunmak
<a id="katkıda-bulunma"></a>
## 👥 Katkıda Bulunma
Katkılarınızı bekliyoruz! İşte nasıl yardımcı olabileceğiniz:
Katkılarınız bekliyoruz! İşte nasıl yardımcı olabileceğiniz:
1. 🍴 Depoyu çatallayın
1. 🍴 Depoyu Fork'layın
2. 🌿 Özellik dalınızı oluşturun:
```bash
git checkout -b feature/AmazingFeature
```
3. 💾 Değişikliklerinizi gerçekleştirin:
3. 💾 Değişikliklerinizi commit'leyin:
```bash
git commit -m 'Add some AmazingFeature'
git commit -m ' AmazingFeature Ekle'
```
4. 📤 Şubeye itin:
4. 📤 Dalı push'layın:
```bash
git push origin feature/AmazingFeature
```
5. 🔄 Bir Çekme İsteği Açın
5. 🔄 Bir Pull Request açın
### 🌍 Çevirilere Katkıda Bulunmak
### 🌍 Çevirilerle Katkıda Bulunun
- 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
- İlgili yerelleştirilmiş README dosyasını güncelleyin (örn: `readme-translations/README.tr.md`)
- Uygulama dizelerini `ytsage/languages/<code>.json` dosyasını düzenleyerek senkronize tutun
- Diliniz eksikse, `README.md` dosyasından başlayın ve `README.<code>.md` dosyasını 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.
Bu belge YTSage'in düzenli klasör yapısını detaylandırır.
### 📁 Proje Yapısı
### 📁 Proje Düzeni
```
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
├── 📁 .github/ # GitHub konfigürasyonları
│ ├── 📁 ISSUE_TEMPLATE/ # Sorun şablonları
│ │ └── 🐛-bug-report.md # Hata raporu şablonu
│ ├─── 📁 workflows/ # GitHub Actions iş akışları
│ │ ├── build-linux.yml # Linux derleme akışı
│ │ ├── build-macos.yml # macOS derleme akışı
│ │ │── build-windows.yml # Windows derleme akışı
| | └── release-all.yml # Ana yayın akışı
│ └── 📄 CI_CD_README.md # CI/CD dökümantasyonu
├── 📁 branding/ # Marka varlıkları (ekran görüntüleri, SVG'ler)
│ ├── 📁 icons/ # Uygulama ikonları
│ ├── 📁 screenshots/ # Dökümantasyon için ekran görüntüleri
│ └── 📁 svg/ # SVG varlıkları
├── 📄 LICENSE # Lisans dosyası
├── 📄 pyproject.toml # Proje metadatası ve bağımlılıklar
├── 📄 README.md # Proje dökümantasyonu
├── 📄 requirements.txt # Python bağımlılıkları (dev)
└── 📁 ytsage/ # Kaynak kod paketi
├── 📁 assets/ # Çalışma zamanı varlıkları
│ ├── 📁 Icon/ # Uygulama ikonları
│ └── 📁 sound/ # Ses dosyaları
├── 📁 languages/ # Yerelleştirme dosyaları
│ ├── 📄 ar.json # Arapça çeviri
│ ├── 📄 de.json # Almanca çeviri
│ ├── 📄 en.json # İngilizce çeviri
│ └── ... # Diğer diller
├── 📁 core/ # Temel iş mantığı
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_deno.py # Deno entegrasyonu
│ ├── 📄 ytsage_downloader.py # İndirme işlevselliği
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg entegrasyonu
│ ├── 📄 ytsage_utils.py # Yardımcı fonksiyonlar
│ └── 📄 ytsage_yt_dlp.py # yt-dlp entegrasyonu
├── 📁 gui/ # Kullanıcı arayüzü bileşenleri
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_gui_main.py # Ana uygulama penceresi
│ └── 📁 ytsage_gui_dialogs/ # Diyalog sınıfları
├── 📁 utils/ # Yardımcı modüller
│ ├── 📄 __init__.py
│ ├── 📄 ytsage_config_manager.py # Yapılandırma yönetimi
│ └── 📄 ytsage_logger.py # Günlük tutma araçları
├── 📄 __init__.py # Paket giriş noktası
└── 📄 main.py # Ana yürütme scripti
```
</details>
## ⭐️ Yıldız Tarihi
## ⭐️ Yıldız Geçmişi
<div align="center">
## Yıldız Geçmişi
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -540,7 +546,7 @@ YTSage/
## 📜 Lisans
Bu proje MIT Lisansı kapsamında lisanslıdır; ayrıntılar için [LICENSE](../LICENSE) dosyasına bakın.
Bu proje MIT Lisansı altında lisanslanmıştır - detaylar için [LICENSE](LICENSE) dosyasına bakın.
## 🙏 Teşekkürler
@@ -549,7 +555,7 @@ Bu proje MIT Lisansı kapsamında lisanslıdır; ayrıntılar için [LICENSE](..
<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>
<p>İyileştirmeler önermek veya hataları bildirmek için sorunlar açarak bu projeye katkıda bulunan herkese çok teşekkürler.</p>
<table>
<tr class="section"><th colspan="2">Temel Bileşenler</th></tr>
@@ -563,40 +569,41 @@ Bu proje MIT Lisansı kapsamında lisanslıdır; ayrıntılar için [LICENSE](..
</tr>
<tr>
<td><a href="https://deno.com/">Deno</a></td>
<td>Yt-dlp</td> ile entegrasyon için çalışma zamanı
<td>yt-dlp entegrasyonu için runtime</td>
</tr>
<tr class="section"><th colspan="2">Kütüphaneler ve Çerçeveler</th></tr>
<tr class="section"><th colspan="2">Kütüphaneler ve Frameworkler</th></tr>
<tr>
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
<td>GUI Çerçevesi</td>
<td>GUI Framework</td>
</tr>
<tr>
<td><a href="https://python-pillow.org/">Yastık</a></td>
<td>Görüntü İşleme</td>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>Resim İşleme</td>
</tr>
<tr><td><a href="https://requests.readthedocs.io/">istekler</a></td>
<tr>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>HTTP İstekleri</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">paketleme</a></td>
<td>Versiyon ve Paket İşleme</td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>Sürüm ve Paket Yönetimi</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Markdown Oluşturma</td>
<td>Markdown İşleme</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>Günlüğe kaydetme</td>
<td>Günlük Kaydı</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><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Universfield'dan New Notification 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>
<td>Kod Katkıda Bulunan</td>
</tr>
</table>
@@ -604,14 +611,14 @@ Bu proje MIT Lisansı kapsamında lisanslıdır; ayrıntılar için [LICENSE](..
</details>
## ⚠️ Yasal Uyarı
## ⚠️ Feragatname
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.
Bu araç sadece 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
[oop7](https://github.com/oop7) tarafından ❤️ ile yapıldı
</div>
+265 -306
View File
@@ -1,85 +1,86 @@
<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"/>
<img src="../branding/screenshots/main.png" width="800" alt="YTSage 界面"/>
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-1f2937?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/downloads/)
[![PyPI Downloads](https://img.shields.io/pepy/dt/ytsage?color=1f2937&style=for-the-badge&label=downloads&logo=python&logoColor=white)](https://pepy.tech/project/ytsage)
[![GitHub Downloads](https://img.shields.io/github/downloads/oop7/YTSage/total?color=1f2937&style=for-the-badge&label=downloads&logo=github&logoColor=white)](https://github.com/oop7/YTSage/releases)
[![License: MIT](https://img.shields.io/badge/License-MIT-1f2937?style=for-the-badge&logo=opensource&logoColor=white)](https://opensource.org/licenses/MIT)
[![Supported Platforms](https://img.shields.io/badge/platform-cross--platform-1f2937?style=for-the-badge&logo=github&logoColor=white)](https://github.com/oop7/YTSage/releases)
[![PyPI 下载量](https://img.shields.io/pepy/dt/ytsage?color=1f2937&style=for-the-badge&label=downloads&logo=python&logoColor=white)](https://pepy.tech/project/ytsage)
[![GitHub 下载量](https://img.shields.io/github/downloads/oop7/YTSage/total?color=1f2937&style=for-the-badge&label=downloads&logo=github&logoColor=white)](https://github.com/oop7/YTSage/releases)
[![许可证: MIT](https://img.shields.io/badge/License-MIT-1f2937?style=for-the-badge&logo=opensource&logoColor=white)](https://opensource.org/licenses/MIT)
[![支持平台](https://img.shields.io/badge/platform-cross--platform-1f2937?style=for-the-badge&logo=github&logoColor=white)](https://github.com/oop7/YTSage/releases)
[![GitHub Stars](https://img.shields.io/github/stars/oop7/YTSage?color=c90000&style=for-the-badge&logo=github&logoColor=white)](https://github.com/oop7/YTSage/stargazers)
[![PyPI version](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/oop7)
[![PyPI 版本](https://img.shields.io/pypi/v/ytsage?color=c90000&style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/ytsage/)
[![GitHub 赞助](https://img.shields.io/github/sponsors/oop7?color=c90000&style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/oop7)
**具有干净 PySide6 界面的现代 YouTube 下载器。**
下载任质量的视频、提取音频、获取字幕等
**一款现代、整洁、基于 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)
语: [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>
<a href="#安装">安装</a> •
<a href="#功能">功能</a> •
<a href="#使用说明">使用说明</a> •
<a href="#屏幕截图">屏幕截图</a> •
<a href="#故障排除">故障排除</a> •
<a href="#赞助支持">赞助支持</a> •
<a href="#贡献">贡献</a>
</p>
</div>
---
<a id="why-ytsage"></a>
## ❓ 为什么选择 YTSage
<a id="为什么选择-ytsage"></a>
## ❓ 为什么选择 YTSage?
YTSage 专为想要**简单但功能强大的 YouTube 下载器**的用户而设计。与其他工具不同,它提供:
YTSage 专为寻找 **简单但强大** 的 YouTube 下载器的用户而设计。与其他工具不同,它提供:
- 干净、现代的 PySide6 界面
- 视频、音频和字幕一键下载
- SponsorBlock、字幕合并和播放列表选择等高级功能
- 适用于 YouTube 以外支持 yt-dlp 的网站的可选通用模式
- 跨平台支持且易于安装
- 现代、整洁的 PySide6 用户界面
- 一键下载视频、音频和字幕
- 支持 SponsorBlock、字幕合并和播放列表选择等高级功能
- 可选的“通用模式”,支持 yt-dlp 兼容的其他非 YouTube 网站
- 跨平台支持,安装简单
<a id="features"></a>
## ✨ 特点
<a id="功能"></a>
## ✨ 功能
<div align="center">
|核心特点|高级功能 |额外功能 |
|------------------------------------------------|--------------------------------------------------------|------------------------------------|
| 🎥 格式化表格 | 🚫 SponsorBlock 集成 | 🎞️ FPS/HDR 显示 |
| 🎵 音频提取 | 📝 字幕选择合并 | 🔄 自动更新 yt-dlp |
| ✨ 简单的用户界面 | 💾 保存描述缩略图 | 🛠️ FFmpeg/yt-dlp/Deno 检测 |
| 📋 播放列表支持选择 | 🚀 限速 | ⚙️ 自定义命令 |
| 📑 嵌入章节 | ✂️ 修剪视频部分 | 🍪 使用 Cookie 登录 |
| 📜 下载历史记录 | 🔄 发布渠道选择 | 🌐 代理支持 |
| 🎚️ 音频格式转换 | 🎬 视频格式设置 | 🆙 内置更新程序选项卡 |
| 🌍 通用模式 | 🔊 音频标准化 (EBU R128) | 🌍 14 种语言本地化 |
| 核心功能 | 高级功能 | 更多功能 |
|-----------------------------------|-----------------------------------------|------------------------------------|
| 🎥 格式选择列表 | 🚫 集成 SponsorBlock | 🎞️ FPS / HDR 显示 |
| 🎵 音频提取 | 📝 字幕选择合并 | 🔄 yt-dlp 自动更新 |
| ✨ 现代 UI 体验 | 💾 保存描述缩略图 | 🛠️ FFmpeg/yt-dlp/Deno 检测 |
| 📋 播放列表支持选择 | 🚀 下载限速 | ⚙️ 自定义参数支持 |
| 📑 视频列表集成 | ✂️ 视频剪辑 | 🍪 Cookie 登录集成 |
| 📜 下载历史记录 | 🔄 更新版本分支选择 | 🌐 代理支持 |
| 🎚️ 音频格式转换 | 🎬 视频格式设置 | 🆙 内置更新页签 |
| 🌍 通用模式 | 🔊 音频归一化 (EBU R128) | 🌍 支持 14 种语言 |
| 💾 播放列表导出 | ⚙️ 默认质量与字幕设置 | |
</div>
<a id="installation"></a>
<a id="安装"></a>
## 🚀 安装
### ⚡ 快速安装推荐
### ⚡ 快速安装 (推荐)
PyPI 安装 YTSage
通过 PyPI 安装 YTSage
```bash
pip install ytsage
@@ -94,60 +95,60 @@ pip install --upgrade ytsage
</details>
然后启动应用程序
然后通过以下命令运行
```bash
ytsage
```
### 📦 预构建的可执行文件
### 📦 独立可执行文件
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
> [👉 下载最新版本](https://github.com/oop7/YTSage/releases/latest)
#### 🪟 Windows
|格式|描述 |
| 格式 | 说明 |
|--------|-------------|
| [Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) |标准安装程序 |
| [Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | FFmpeg 捆绑 |
| [Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) |便携版无需安装|
| [Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) |带有 FFmpeg 的便携式,压缩 |
| ![Windows EXE](https://img.shields.io/badge/Windows-EXE-0078D6?style=for-the-badge&logo=windows&logoColor=white) | 标准安装程序 |
| ![Windows FFmpeg](https://img.shields.io/badge/Windows-FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | 包含 FFmpeg 的安装程序 |
| ![Windows Portable](https://img.shields.io/badge/Windows-Portable-0078D6?style=for-the-badge&logo=windows&logoColor=white) | 便携版 (无需安装) |
| ![Windows Portable FFmpeg](https://img.shields.io/badge/Windows-Portable%20FFmpeg-0078D6?style=for-the-badge&logo=windows&logoColor=white) | 包含 FFmpeg 的便携版 (ZIP) |
<details>
<summary>🛠️ 安装步骤</summary>
1. **EXE 安装程序 (`.exe`)**:双击该文件并按照安装向导进行操作。
2. **便携式版本(`.zip`**:将存档解压到所需位置并运行`ytsage.exe`
3. **FFmpeg Bundled**:如果您的系统没有安装 FFmpeg,请选择 FFmpeg 捆绑版本。
1. **EXE 安装程序 (`.exe`)**: 双击并按照安装向导进行操作。
2. **便携版 (`.zip`)**: 解压到所需位置并运行 `ytsage.exe`
3. **内置 FFmpeg**: 如果系统没有安装 FFmpeg,请选择`-ffmpeg`版本。
</details>
#### 🐧 Linux
|格式|描述 |
| 格式 | 说明 |
|--------|-------------|
| [Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian 软件包 |
| [Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | AppImage,便携式|
| [Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) |包 |
| [Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak 捆绑包 |
| ![Linux DEB](https://img.shields.io/badge/Linux-DEB-FCC624?style=for-the-badge&logo=linux&logoColor=black) | Debian 软件包 |
| ![Linux AppImage](https://img.shields.io/badge/Linux-AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black) | 便携 AppImage |
| ![Linux RPM](https://img.shields.io/badge/Linux-RPM-FCC624?style=for-the-badge&logo=linux&logoColor=black) | RPM 软件包 |
| ![Flathub](https://img.shields.io/badge/Linux-Flatpak-FCC624?style=for-the-badge&logo=flathub&logoColor=black) | Flatpak 软件包 |
<details>
<summary>🛠️ 安装步骤</summary>
- **DEB (`.deb`)**
- **DEB (`.deb`)**:
```bash
sudo dpkg -i ytsage_*.deb
sudo apt-get install -f # Fix missing dependencies if any
sudo apt-get install -f # 如有依赖问题请运行
```
- **转速(`.rpm`**
- **RPM (`.rpm`)**:
```bash
sudo rpm -i ytsage-*.rpm
```
- **应用程序图像(`.AppImage`**
- **AppImage (`.AppImage`)**:
```bash
chmod +x YTSage-*.AppImage
./YTSage-*.AppImage
```
- **Flatpak**按照 Flathub 的说明进行操作或运行:
- **Flatpak**: 按照 Flathub 的说明或运行:
```bash
flatpak install flathub io.github.oop7.ytsage
```
@@ -155,47 +156,47 @@ ytsage
#### 🍎 macOS
|格式|描述 |
| 格式 | 说明 |
|--------|-------------|
| [macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 的压缩应用程序 |
| [macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 的磁盘映像安装程序 |
| ![macOS ARM64 APP](https://img.shields.io/badge/macOS-ARM64%20APP-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 专用 ZIP 压缩包 |
| ![macOS ARM64 DMG](https://img.shields.io/badge/macOS-ARM64%20DMG-000000?style=for-the-badge&logo=apple&logoColor=white) | Apple Silicon 专用 DMG 安装程序 |
<details>
<summary>🛠️ 安装步骤</summary>
- **DMG 安装程序 (`.dmg`)**:双击安装,然后将 `YTSage.app` 拖到您的应用程序文件夹
- **应用程序存档 (`.zip`)**:解压 zip 并将 `YTSage.app` 移动到您的应用程序文件夹。
- **DMG 安装程序 (`.dmg`)**: 双击挂载,然后将 `YTSage.app` 拖入 Applications 文件夹。
- **ZIP 应用包 (`.zip`)**: 解压并移动 `YTSage.app` 到 Applications 文件夹。
*注意:如果遇到“应用程序已损坏”错误,请参阅下面的[macOS troubleshooting section](#troubleshooting)。*
*注意:如果遇到“应用已损坏”的提示,请参阅下方的 macOS 解决办法。*
</details>
---
<details>
<summary>💻从源手动安装</summary>
<summary>💻 从源手动安装</summary>
### 1.克隆存储
### 1. 克隆
```bash
git clone https://github.com/oop7/YTSage.git
cd YTSage
```
### 2.安装依赖
### 2. 安装依赖
#### ⚡ 有紫外线
#### ⚡ 使用 uv
```bash
uv pip install .
```
#### 📦 或使用标准
#### 📦 或使用标准 pip
```bash
pip install .
```
### 3. 运行应用程序
### 3. 运行程序
```bash
python -m ytsage.main
@@ -203,330 +204,289 @@ python -m ytsage.main
</details>
<a id="screenshots"></a>
## 📸 截图
<a id="屏幕截图"></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>
<td><img src="../branding/screenshots/Download-Settings.png" alt="下载设置" width="400"/></td>
<td><img src="../branding/screenshots/playlist.png" alt="播放列表下载" width="400"/></td>
</tr>
<tr>
<td align="center"><em>下载设置</em></td>
<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>
<td><img src="../branding/screenshots/audio_format.png" alt="音频格式选择" width="400"/></td>
<td><img src="../branding/screenshots/Custom-Option.png" alt="自定义选项" width="400"/></td>
</tr>
<tr>
<td align="center"><em>音频格式</em></td>
<td align="center"><em>音频格式设置</em></td>
<td align="center"><em>自定义选项</em></td>
</tr>
</table>
</div><a id="usage"></a>
</div>
## 📖 用法
<a id="使用说明"></a>
## 📖 使用说明
<details>
<summary>🎯基本法</summary>
<summary>🎯 基本使用方法</summary>
1. **启动 YTSage**
2. **粘贴 YouTube URL**(或使用“粘贴 URL”按钮)
3. **点击分析**
4. **选择格式:**
- `Video` 用于视频下载
- `Audio Only` 用于音频提取
5. **选择选项:**
1. **运行 YTSage**
2. **粘贴 YouTube 地址** (或点击 "Paste URL")
3. **点击 "Analyze" (分析)**
4. **选择下载模式:**
- `Video` 下载视频
- `Audio Only` 仅提取音频
5. **配置下载项:**
- 启用字幕并选择语言
- 启用字幕合并
- 保存缩略图
- 删除赞助商部分
- 保存描述
- 嵌入章节
6. **选择输出目录**
7. **点击下载**
- 启用字幕合并 (Merge)
- 保存缩略图 (Save Thumbnail)
- 启用赞助内容跳过 (SponsorBlock)
- 下载描述文本 (Save Description)
- 嵌入视频章节 (Embed Chapters)
6. **选择路径**
7. **点击 "Download" (下载)**
> 💡 默认下载目录是用户的“Downloads”文件夹。
> 💡 默认下载到系统的“下载”文件夹。
</details>
<details>
<summary>📋播放列表下载</summary>
<summary>📋 下载播放列表</summary>
1. **粘贴播放列表 URL**
2. **点击“分析**
3. **从播放列表选择器中选择视频(可选,默认为全部)**
4. **选择所需的格式/质量**
5. **点击“下载**
1. **粘贴播放列表地址**
2. **添加并分析**
3. **在弹出窗口中选择视频 (默认全选)**
4. **设置质量方案**
5. **开始下载**
> 💡 应用程序自动理下载队列
> 💡 程序自动理下载队列。您可以将列表导出为 `.txt`, `.csv`, `.m3u` 或 `.json` 格式。
</details>
<details>
<summary>🌍非 YouTube 网站通用模式</summary>
<summary>🌍 非 YouTube 网站 (通用模式)</summary>
当您希望 YTSage 接受来自 yt-dlp 支持的网站(如 Dailymotion、CBC Gem、TikTok 等)的 URL 时,请使用通用模式。
当您想从被 yt-dlp 支持的其他网站(如 TikTok、Dailymotion 等)下载时,请开启通用模式。
使用方法
如何使用:
1. 打开`Download Settings`。
2. 启用`Generic Mode`。
3. 粘贴受支持的非 YouTube 视频或播放列表 URL
4. 单击`Analyze`。
5. 选择格式并照常下载。
1. 打开 `Download Settings` (下载设置)
2. 启用 `Generic Mode` (通用模式)
3. 输入非 YouTube 的支持网站链接
4. 点击 `Analyze` (分析)
5. 常下载。
注意事项
说明
- 通用模式仅更改 YTSage 内的 URL 验证。您安装的 yt-dlp 版本仍必须支持目标站点
- 些站点需要 cookie、登录会话、代理或额外的 yt-dlp 参数,具体取决于提取器
- 如果站点出现故障,请先内置更新程序选项卡更新 yt-dlp,然后再报告问题
- 通用模式仅关闭了 YTSage 内的 URL 类型检查。网站支持程度仍取决于您安装的 yt-dlp
- 些站点可能需要特定的 Cookie 或代理配置
- 如果某个网站无法分析,请先内置更新程序更新 yt-dlp。
</details>
<details>
<summary>🧰媒体下载选项</summary>
<summary>🧰 媒体下载选项</summary>
- **字幕选项** 过滤语言并将字幕嵌入到视频文件
- **字幕合并** 将字幕合并到视频文件中以获取硬编码字幕
- **保存描述** 将视频描述保存为文本文
- **保存缩略图** 将视频缩略图保存为图像文件
- **嵌入章节** 将章节标记嵌入为兼容视频播放器的元数据
- **删除赞助商片段:** 使用 SponsorBlock 从视频中删除赞助商片段
- **修剪视频:** 通过以 `HH:MM:SS` 格式指定时间范围,仅下载视频的特定部分
- **字幕选项:** 过滤特定语言并支持嵌入到视频中
- **字幕合并:** 将字幕“烧录”到视频中(硬字幕)。
- **保存描述:** 将视频描述保存为独立的文本文档。
- **保存缩略图:** 下载视频的高清封面。
- **嵌入章节:** 允许将视频章节标记写入媒体元数据
- **赞助商跳过:** 配合 SponsorBlock 自动跳过或剪辑掉广告段落。
- **视频剪裁:** 输入 `HH:MM:SS` 时间点来实现部分下载。
</details>
<details>
<summary>⚙️输出和文件设置</summary>
<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 标准化纯音频下载的音量
- **下载限速:** 输入如 `500K` 表示限制为 500 KB/s
- **保存路径:** 在 **Download Settings → Download Path** 中保存您的默认位置
- **默认分辨率:** 设置您首选的清晰度(如 1080p, 720p
- **默认字幕语言:** 输入语言代码(如 `zh,en`)来自动选择默认字幕
- **文件命名模板:** 通过 `%(title)s` 等变量自定义文件名格式
- **强制输出格式:** 强制转换输出容器,如 `mp4`, `webm` 或 `mkv`。
- **音频转换:** 将音频转换为 `AAC`, `MP3`, `FLAC` 等格式。
- **音量归一化:** 使用 EBU R128 标准使下载的音量均衡。
- **多线程连接:** 设置 **Concurrent Connections** 为 8-10 以最大化下载速度。
</details>
<details>
<summary>🌐接入和网络</summary>
<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 网站分析和下载。从**下载设置 → 通用模式**启用它。
- **Cookie 登录:** 允许通过 Cookie 下载私人内容或绕过限制
推荐方法:
1. 在设置中点击 `Extract cookies from browser`选择您的浏览器。
2. 或:导出 Netscape 格式的 `cookies.txt` 文件并手动载入。
- **代理支持:** 支持设置 HTTP 代理,例如 `http://127.0.0.1:8080`。
</details>
<details>
<summary>🛠️工具与维护</summary>
<summary>🛠️ 系统工具与维护</summary>
- **自定义命令:** 通过命令行参数访问高级 yt-dlp 功能
- **更新程序选项卡:** 从自定义选项中的一处管理内置更新工具:
- **yt-dlp 更新** 检查更新并在稳定版和夜间发布频道之间切换
- **FFmpeg 版本检查器:** 检查您的 FFmpeg 版本并打开安装指南
- **Deno 更新** 检查并更新 Deno 运行时
- **FFmpeg/yt-dlp/Deno 检测:** 从“关于”对话框中自动检测 FFmpeg、yt-dlp 和 Deno 路径和版本
- **下载历史记录:** 通过“**历史记录**”按钮查看过去的下载,其中包含缩略图和状态。
- **自定义参数:** 为 yt-dlp 传递特定的命令行参数。
- **内置更新器:** (在 Custom Options 中)
- **yt-dlp 更新:** 在稳定版和测试版之间切换
- **FFmpeg 检测:** 验证安装路劲。
- **Deno 更新:** 维护相关的集成环境。
- **下载历史:** 管理您的所有下载历史记录,包含缩略图和状态
</details>
<details>
<summary>🌍本地化</summary>
<summary>🌍 语言支持</summary>
YTSage 支持**14 种语言**,可在全球范围内访问。从**自定义选项 → 语言**中选择您的首选语言
YTSage 支持 **14 种语言**。您可以在 **Custom Options → Language** 中更改
### 支持的语言
### 支持的界面语言
| 语言 | 代码 | 语言 | 代码 |
|----------|------|----------|------|
| 🇺🇸 英语 | `en` | 🇪🇸 西班牙语 | `es` |
| 🇸🇦 阿拉伯语 | `ar` | 🇫🇷 法语 | `fr` |
| 🇩🇪 德语 | `de` | 🇮🇳 印地语 | `hi` |
| 🇮🇩 印度尼西亚语 | `id` | 🇮🇹 意大利语 | `it` |
| 🇮🇩 印语 | `id` | 🇮🇹 意大利语 | `it` |
| 🇯🇵 日语 | `ja` | 🇵🇱 波兰语 | `pl` |
| 🇧🇷 葡萄牙语 | `pt` | 🇷🇺 俄语 | `ru` |
| 🇹🇷 土耳其语 | `tr` | 🇨🇳 中文 | `zh` |
### 自述文件翻译
### README 翻译
| 语言 | 文件 | 语言 | 文件 |
|----------|------|----------|------|
| 🇺🇸 英语 | [README.md](../README.md) | 🇪🇸 西班牙语 | [README.es.md](README.es.md)
| 🇺🇸 英语 | [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.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>
<a id="故障排除"></a>
## 🛠️ 故障排除
<details>
<summary>点击查看常见问题及解决方案</summary>
<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` 文件。
- **没有显示格式表格:** 请更新 yt-dlp。如果仍无效,请尝试切换到测试版 (Nightly) 分支
- **下载失败:** 检查网络连接或该地区视频是否可用。
- **常见特定的错误提示:**
- **私视频:** 需提供 Cookie 登录
- **内容受限:** 部分视频需登录账号
- **地理锁定:** 需使用代理或 VPN
- **视频已删除:** 视频已不存在
- **直播内容:** YTSage 目前不支持实时直播下载,请等直播结束后再试
- **下载后画面和声音分离:** 意味着系统中未安装或未检测到 FFmpeg
- **解决方法:** 确保 FFmpeg 已安装并加入 PATH,或下载带 `-ffmpeg` 版本的 Windows 程序
---
#### 🛡️ Windows Defender / 防病毒警告
#### 🛡️ Windows Defender / 杀毒软件警告
某些防病毒软件可能会将“.exe”文件标记为误报。这是打包应用程序的**已知限制**
某些毒软件可能会误报。这是打包程序的常见现象
**为什么会发生这种情况:**
- 防病毒启发式可能会打包的可执行文件误认为可疑
**原因:**
- 启发式查杀可能会误认为打包的可执行文件是恶意软件。
**安全替代品:**
- ✅ **使用pip安装** `pip install ytsage`(推荐)
- ✅ **从源代码构建**:按照此[guide](../.github/CI_CD_README.md)
- ✅ **在防病毒软件中将应用程序列入白名单**
**安全建议:**
- ✅ **通过 pip 安装:** `pip install ytsage`(推荐)
- ✅ **自行构建**: 参照 [CI_CD 指南](.github/CI_CD_README.md)
- ✅ **添加排除项**
#### 🍎 macOS:“应用程序已损坏无法打开
如果您在 macOS Sonoma 或更高版本上看到此错误,则需要删除隔离属性。
#### 🍎 macOS: "应用已损坏无法打开"
在 macOS Sonoma 及以后版本:
1. **打开终端**(您可以使用 Spotlight 找到它)
2. **键入以下命令**,但**不要**按 Enter 键。确保末尾包含空格:
1. 打开 **终端 (Terminal)**
2. 输入命令 (结尾有一个空格):
```bash
xattr -d com.apple.quarantine
```
3. **将 `YTSage.app` 文件**从 Finder 窗口拖放到终端窗口中。这将自动粘贴正确的文件路径
4. **按 Enter** 运行命令
5. **再次尝试打开 YTSage.app。** 现在它应该可以正确启动
3. 从 Finder 中将 **YTSage.app** 拖入终端窗口
4. 按回车
5. 再次打开应用
---
#### **配置位置(高级)**
- **Windows** `%LOCALAPPDATA%\YTSage`
- **macOS** `~/Library/Application Support/YTSage`
- **Linux** `~/.local/share/YTSage`
#### **配置存放路径**
- **Windows:** `%LOCALAPPDATA%\YTSage`
- **macOS:** `~/Library/Application Support/YTSage`
- **Linux:** `~/.local/share/YTSage`
</details>
<a id="sponsor"></a>
## 💖 赞助
<a id="赞助支持"></a>
## 💖 赞助支持
如果 YTSage 可以节省您的时间,请考虑赞助该项目。赞助有助于涵盖开发时间、跨平台测试以及未来的改进
如果 YTSage 节省您的时间,请考虑资助本项目。赞助收入将用于多平台测试环境的维护和新功能开发
- GitHub 赞助商:https://github.com/sponsors/oop7
- 赞助商链接也可以直接在应用程序内的“关于”对话框中找到
- GitHub Sponsors: https://github.com/sponsors/oop7
- 您也可以通过应用内的“About (关于)”窗口找到捐赠链接
[![Sponsor YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
[![赞助 YTSage](https://img.shields.io/badge/Sponsor-YTSage-EA4AAA?style=for-the-badge&logo=github&logoColor=white)](https://github.com/sponsors/oop7)
<a id="contributing"></a>
<a id="贡献"></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. 🔄 打开拉取请求
1. 🍴 Fork 仓
2. 🌿 创建特性分支: `git checkout -b feature/NewFeature`
3. 💾 提交更改: `git commit -m 'Add NewFeature'`
4. 📤 推送分支: `git push origin feature/NewFeature`
5. 🔄 开启 Pull Request
### 🌍 贡献翻译
### 🌍 翻译贡献
- 更新匹配的本地化自述文件(例如`README.es.md`
- 通过编辑`ytsage/languages/<code>.json`保持应用程序字符串同步
- 如果您的语言缺失,请从`README.md`开始并创建`README.<code>.md`
- 您可以更新各语种 README (例如 `readme-translations/README.zh.md`)。
- 也可以翻译界面词条:`ytsage/languages/<语言代码>.json`
<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
├── 📁 .github/ # GitHub 设置
│ ├── 📁 ISSUE_TEMPLATE/ # 问题模板
├─── 📁 workflows/ # GitHub Actions 流程
├── 📁 branding/ # 品牌资源 (截图, SVG)
├── 📁 icons/ # 图标
├── 📁 screenshots/ # 截图说明
└── 📁 svg/ # SVG 素材
├── 📄 LICENSE # 许可证
├── 📄 pyproject.toml # 项目元数据与依赖
├── 📄 README.md # 英语 README
├── 📄 requirements.txt # 开发依赖
└── 📁 ytsage/ # 源代码
── 📁 assets/ # 运行时资源 (音频, 图标)
├── 📁 languages/ # 多语言 JSON 文件
├── 📁 core/ # 下载与集成核心逻辑
├── 📁 gui/ # UI 组件
├── 📁 utils/ # 工具类
├── 📄 __init__.py
── 📄 main.py # 程序入口
```
</details>
## ⭐️ 明星历史
## ⭐️ 关注趋势
<div align="center">
## 明星历史
## Star History
<a href="https://www.star-history.com/#oop7/YTSage&Date">
<picture>
@@ -540,63 +500,64 @@ YTSage/
## 📜 许可证
项目已获得 MIT 许可证 - 有关详细信息,请参阅[LICENSE](../LICENSE) 文件。
项目基于 MIT 许可证分发 - 详情请参阅 [LICENSE](LICENSE) 文件。
## 🙏
## 🙏
<details>
<summary>显示致谢</summary>
<summary>查看致谢名单</summary>
<div align="center">
<p>衷心感谢所有通过提出改进建议或报告错误为该项目做出贡献的人。</p>
<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>
<td>核心下载引擎</td>
</tr>
<tr>
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
<td>媒体处理</td>
<td>媒体处理</td>
</tr>
<tr>
<td><a href="https://deno.com/">德诺</a></td>
<td>与 yt-dlp 集成运行</td>
<td><a href="https://deno.com/">Deno</a></td>
<td>集成运行环境</td>
</tr>
<tr class="section"><th colspan="2">库框架</th></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>
<td><a href="https://python-pillow.org/">Pillow</a></td>
<td>图处理</td>
</tr>
<tr>
<td><a href="https://packaging.python.org/">包装</a></td>
<td>版本和包处理</td>
<td><a href="https://requests.readthedocs.io/">requests</a></td>
<td>网络请求</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">降价</a></td>
<td><a href="https://packaging.python.org/">packaging</a></td>
<td>版本管理</td>
</tr>
<tr>
<td><a href="https://python-markdown.github.io/">markdown</a></td>
<td>Markdown 渲染</td>
</tr>
<tr>
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
<td>记录</td>
<td>日志记录</td>
</tr>
<tr class="section"><th colspan="2">资产和贡献</th></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><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Universfield 的通知音效</a></td>
<td>通知声音</td>
</tr>
<tr>
<td><a href="https://github.com/viru185">viru185</a></td>
<td>代码贡献</td>
<td>代码贡献</td>
</tr>
</table>
@@ -606,12 +567,10 @@ YTSage/
## ⚠️ 免责声明
工具仅供个人使用。请尊重 YouTube 服务条款和内容创作者的权利
工具仅供个人学习与研究使用。请尊重 YouTube 服务条款及创作者版权
---
<div align="center">
由[oop7](https://github.com/oop7)用❤️制作
由 [oop7](https://github.com/oop7) 倾力协作 ❤️
</div>
+1 -1
View File
@@ -4,5 +4,5 @@ YTSage - YouTube Video Downloader
A modern, user-friendly YouTube video downloader built with PySide6.
"""
__version__ = "5.0.3"
__version__ = "5.0.10b"
__author__ = "oop7"
+48 -4
View File
@@ -74,6 +74,7 @@ class DownloadThread(QThread):
preferred_audio_format="best",
audio_normalization=False,
filename_format=None,
concurrent_fragments=1,
) -> None:
super().__init__()
self.url = url
@@ -103,6 +104,7 @@ class DownloadThread(QThread):
self.preferred_audio_format = preferred_audio_format
self.audio_normalization = audio_normalization
self.filename_format = filename_format
self.concurrent_fragments = concurrent_fragments
self.paused: bool = False
self.cancelled: bool = False
self.process: Optional[subprocess.Popen] = None
@@ -229,13 +231,40 @@ class DownloadThread(QThread):
def _build_yt_dlp_command(self) -> List[str]:
"""Build the yt-dlp command line with all options for direct execution."""
# Use the new yt-dlp path function from ytsage_yt_dlp module
yt_dlp_path: str = get_yt_dlp_path()
# Build the command line array
cmd: List[str] = [yt_dlp_path]
logger.debug(f"Using yt-dlp from: {yt_dlp_path}")
# Add concurrent fragments setting
if self.concurrent_fragments:
cmd.extend(["-N", str(self.concurrent_fragments)])
logger.debug(f"Using {self.concurrent_fragments} concurrent connections")
# Format selection strategy - use format ID if provided or fallback to resolution
if self.format_id:
if self.is_playlist:
# For playlists, specific format_id from the first video often fails for subsequent videos.
# Instead, we rely on dynamic fallback/resolution limits.
if self.is_audio_only:
# For audio-only playlist, let yt-dlp pick best audio.
cmd.extend(["-f", "bestaudio/best"])
logger.debug(f"Playlist mode: using dynamic best audio fallback instead of format_id")
else:
# If a specific resolution is given, limit to it. Otherwise, select the overall best.
# The resolution might be e.g. "1920x1080" or "1080". We want the height.
try:
if self.resolution and self.resolution != "default":
res_str = str(self.resolution)
h = min(map(int, res_str.split('x'))) if 'x' in res_str else int(res_str)
cmd.extend(["-S", f"res:{h}"])
logger.debug(f"Playlist mode: using resolution limiter -S res:{h}")
else:
cmd.extend(["-f", "bestvideo+bestaudio/best"])
logger.debug("Playlist mode: using dynamic best quality overall")
except ValueError:
cmd.extend(["-f", "bestvideo+bestaudio/best"])
logger.debug("Playlist mode: invalid resolution string, using dynamic best quality overall")
elif self.format_id:
clean_format_id: str = self.format_id.split("-drc")[0] if "-drc" in self.format_id else self.format_id
# If the selected format is audio-only, pass it directly.
@@ -295,12 +324,15 @@ class DownloadThread(QThread):
base_path: str = self.path.as_posix()
# Determine the filename part of the template
filename_part = self.filename_format if self.filename_format else "%(title)s_%(resolution)s.%(ext)s"
filename_part = self.filename_format if self.filename_format else "%(title)s_%(resolution)s_[%(id)s].%(ext)s"
if self.is_playlist:
# Create output template with playlist subfolder
output_template: str = f"{base_path}/%(playlist_title)s/{filename_part}"
else:
# For single files, automatically ignore/remove playlist-specific preamble (like "%(playlist_index)s - ")
import re
filename_part = re.sub(r'%\(playlist_index[^)]*\)[a-zA-Z0-9]*\s*(?:[-_]\s*)?', '', filename_part)
output_template: str = f"{base_path}/{filename_part}"
cmd.extend(["-o", str(output_template)])
@@ -320,16 +352,20 @@ class DownloadThread(QThread):
# Get language codes from subtitle selections
lang_codes: List[str] = []
has_auto_generated = False
for sub_selection in self.subtitle_langs:
try:
# Extract just the language code (e.g., 'en' from 'en - Manual')
lang_code = sub_selection.split(" - ")[0]
lang_codes.append(lang_code)
if "Auto-generated" in sub_selection:
has_auto_generated = True
except Exception as e:
logger.exception(f"Could not parse subtitle selection '{sub_selection}': {e}")
if lang_codes:
cmd.extend(["--sub-langs", ",".join(lang_codes)])
if has_auto_generated:
cmd.append("--write-auto-subs") # Include auto-generated subtitles
# Only embed subtitles if merge is enabled
@@ -377,6 +413,9 @@ class DownloadThread(QThread):
logger.debug(f"Added download section: {self.download_section}, Force keyframes: {self.force_keyframes}")
# Add the URL as the final argument
if self.is_playlist:
cmd.append("--ignore-errors")
cmd.append("--no-abort-on-error")
cmd.append(self.url)
return cmd
@@ -447,6 +486,7 @@ class DownloadThread(QThread):
time.sleep(2)
self.cleanup_partial_files()
self.status_signal.emit(_("download.cancelled"))
self.finished_signal.emit()
return
# Wait if paused
@@ -467,7 +507,7 @@ class DownloadThread(QThread):
)
return
if return_code == 0:
if return_code == 0 or (self.is_playlist and return_code != 0 and self.current_filename is not None):
self.progress_signal.emit(100)
# Robust file finding: Always search for the most recent file
@@ -516,6 +556,9 @@ class DownloadThread(QThread):
logger.error(f"Error finding final file: {e}", exc_info=True)
# Set completion status
if return_code != 0:
self.status_signal.emit(_("download.completed") + " (with some errors)")
else:
self.status_signal.emit(_("download.completed"))
# Clean up subtitle files if they were merged, with a small delay
@@ -532,6 +575,7 @@ class DownloadThread(QThread):
# Check if it was cancelled
if self.cancelled:
self.status_signal.emit(_("download.cancelled"))
self.finished_signal.emit()
else:
# Provide informative error message based on captured output
if self.error_lines:
+2 -2
View File
@@ -94,8 +94,8 @@ def update_version_cache(tool_name: str, version_info: str, path: Optional[str],
current_mtime: float = get_file_mtime(path)
_version_cache[tool_name] = {
"version": version_info,
"path": path,
"version": str(version_info) if version_info else "",
"path": str(path) if path else None,
"last_check": current_time,
"path_mtime": current_mtime,
}
+32
View File
@@ -131,8 +131,13 @@ class AnalysisThread(QThread):
return
if result.returncode != 0:
if "Private video" in result.stderr or "Sign in" in result.stderr:
logger.error(f"yt-dlp failed (private video): {result.stderr}")
self.analysis_error.emit(_("errors.private_video"))
else:
logger.error(f"yt-dlp failed: {result.stderr}")
self.analysis_error.emit(_("errors.ytdlp_failed", error=result.stderr))
self.playlist_info_visible.emit(False)
self.playlist_select_btn_visible.emit(False)
return
@@ -394,6 +399,29 @@ class AnalysisMixin:
self.selected_playlist_items = None
self.selected_subtitles = []
from ..utils.ytsage_config_manager import ConfigManager
default_sub = ConfigManager.get("default_subtitle_language")
if default_sub:
if isinstance(default_sub, str):
default_sub_list = [s.strip() for s in default_sub.split(",")]
else:
default_sub_list = []
for lang in default_sub_list:
if lang in self.available_subtitles:
self.selected_subtitles.append(f"{lang} - Manual")
elif lang in self.available_automatic_subtitles:
self.selected_subtitles.append(f"{lang} - Auto-generated")
count = len(self.selected_subtitles)
try:
self.signals.selected_subs_label_text.emit(_("subtitle_selection.count_selected", count=count))
self.subtitle_select_btn.setProperty("subtitlesSelected", count > 0)
self.subtitle_select_btn.style().unpolish(self.subtitle_select_btn)
self.subtitle_select_btn.style().polish(self.subtitle_select_btn)
except Exception:
pass
# Update UI components (safe - we're in main thread)
self.update_video_info(self.video_info)
@@ -407,6 +435,10 @@ class AnalysisMixin:
self.download_thumbnail_file(self.video_url, self.last_path)
# Update subtitle UI
count = len(self.selected_subtitles)
if count > 0:
self.signals.selected_subs_label_text.emit(_("subtitle_selection.count_selected", count=count))
else:
self.signals.selected_subs_label_text.emit(_("main_ui.zero_selected"))
# Update format table
@@ -198,6 +198,37 @@ class CustomOptionsDialog(QDialog):
# Initially show browser group (recommended default) and hide file group
self.cookie_file_group.setVisible(False)
# Remember Cookie Settings Checkbox
self.remember_cb = QCheckBox(_("cookies.remember_settings"))
remember_val = ConfigManager.get("cookie_remember")
self.remember_cb.setChecked(True if remember_val is None else remember_val) # Default to True
self.remember_cb.setStyleSheet(
"""
QCheckBox {
color: #ffffff;
padding: 10px 5px;
}
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;
}
"""
)
# Connect state change directly to config save to make it work immediately without Apply button dependency if needed
self.remember_cb.toggled.connect(lambda checked: ConfigManager.set("cookie_remember", checked))
cookies_layout.addWidget(self.remember_cb)
self.cookie_browser_group.setVisible(True)
# Apply button and status indicator
@@ -725,6 +756,7 @@ class CustomOptionsDialog(QDialog):
self._parent.browser_cookies_option = None
# Save settings to ConfigManager for persistence
ConfigManager.set("cookie_remember", self.remember_cb.isChecked())
if self.cookie_file_radio.isChecked():
ConfigManager.set("cookie_source", "file")
ConfigManager.set("cookie_file_path", str(cookie_path) if cookie_path else None)
@@ -279,7 +279,7 @@ class HistoryDelegate(QStyledItemDelegate):
painter.drawText(badge_rect, Qt.AlignmentFlag.AlignCenter, badge_text)
# File Size
file_size = entry.get("file_size", 0)
file_size = entry.get("file_size") or 0
if file_size > 0:
size_str = self.format_file_size(file_size)
painter.setPen(QColor("#aaaaaa"))
@@ -229,6 +229,28 @@ class DownloadSettingsDialog(QDialog):
speed_group_box.setLayout(speed_layout)
general_layout.addWidget(speed_group_box)
# --- Connections Section ---
connections_group_box = QGroupBox(_("settings.concurrent_fragments", default="Concurrent Connections"))
connections_layout = QVBoxLayout()
self.connections_enabled = ConfigManager.get("concurrent_fragments") or 1
connections_spin_layout = QHBoxLayout()
self.connections_input = QComboBox()
self.connections_input.addItems([str(i) for i in range(1, 21)])
self.connections_input.setCurrentText(str(self.connections_enabled))
connections_spin_layout.addWidget(self.connections_input)
connections_spin_layout.addStretch()
connections_layout.addLayout(connections_spin_layout)
connections_help_label = QLabel(_("settings.concurrent_fragments_help", default="Number of connections per download. Higher values bypass throttling but may cause temporary blocks if set too high. Default: 1."))
connections_help_label.setWordWrap(True)
connections_help_label.setStyleSheet("color: #cccccc; margin: 5px; font-size: 11px;")
connections_layout.addWidget(connections_help_label)
connections_group_box.setLayout(connections_layout)
general_layout.addWidget(connections_group_box)
# --- Generic Mode Section ---
generic_mode_group_box = QGroupBox(_("settings.generic_mode"))
generic_mode_layout = QVBoxLayout()
@@ -354,6 +376,39 @@ class DownloadSettingsDialog(QDialog):
audio_format_group_box.setLayout(audio_format_layout)
format_layout.addWidget(audio_format_group_box)
# --- Default Quality and Subtitles Section ---
defaults_group_box = QGroupBox(_("settings.defaults_settings", default="Default Selection Settings"))
defaults_layout = QVBoxLayout()
# Default Video Quality
vid_qual_layout = QHBoxLayout()
vid_qual_label = QLabel(_("settings.default_video_quality", default="Default Video Resolution (Height):"))
vid_qual_label.setStyleSheet("color: #ffffff; margin-top: 5px;")
self.default_vid_qual_input = QLineEdit(str(ConfigManager.get("default_video_quality") or ""))
self.default_vid_qual_input.setPlaceholderText("e.g. 1080 or 720")
vid_qual_layout.addWidget(vid_qual_label)
vid_qual_layout.addWidget(self.default_vid_qual_input)
defaults_layout.addLayout(vid_qual_layout)
# Default Subtitles
sub_layout = QHBoxLayout()
sub_label = QLabel(_("settings.default_subtitle_language", default="Default Subtitle Language(s):"))
sub_label.setStyleSheet("color: #ffffff; margin-top: 5px;")
self.default_sub_input = QLineEdit(ConfigManager.get("default_subtitle_language") or "")
self.default_sub_input.setPlaceholderText("e.g. en, es")
sub_layout.addWidget(sub_label)
sub_layout.addWidget(self.default_sub_input)
defaults_layout.addLayout(sub_layout)
defaults_help = QLabel(_("settings.defaults_help", default="Set your preferred video height and subtitle languages (comma-separated). They will be auto-selected if available."))
defaults_help.setWordWrap(True)
defaults_help.setStyleSheet("color: #cccccc; margin: 5px; font-size: 11px;")
defaults_layout.addWidget(defaults_help)
defaults_group_box.setLayout(defaults_layout)
format_layout.addWidget(defaults_group_box)
format_layout.addStretch()
# === File Tab ===
@@ -365,18 +420,18 @@ class DownloadSettingsDialog(QDialog):
filename_layout = QVBoxLayout()
# Load current filename format from ConfigManager
self.filename_format_value = ConfigManager.get("filename_format") or "%(title)s_%(resolution)s.%(ext)s"
self.filename_format_value = ConfigManager.get("filename_format") or "%(title)s_%(resolution)s_[%(id)s].%(ext)s"
# Input and Reset Button Layout
filename_input_layout = QHBoxLayout()
self.filename_format_input = QLineEdit(self.filename_format_value)
self.filename_format_input.setPlaceholderText("%(title)s_%(resolution)s.%(ext)s")
self.filename_format_input.setPlaceholderText("%(title)s_%(resolution)s_[%(id)s].%(ext)s")
filename_input_layout.addWidget(self.filename_format_input)
self.reset_format_button = QPushButton(_("buttons.reset"))
self.reset_format_button.setFixedWidth(70)
self.reset_format_button.clicked.connect(lambda: self.filename_format_input.setText("%(title)s_%(resolution)s.%(ext)s"))
self.reset_format_button.clicked.connect(lambda: self.filename_format_input.setText("%(title)s_%(resolution)s_[%(id)s].%(ext)s"))
filename_input_layout.addWidget(self.reset_format_button)
filename_layout.addLayout(filename_input_layout)
@@ -474,6 +529,13 @@ class DownloadSettingsDialog(QDialog):
"""Returns whether generic mode is enabled."""
return self.generic_mode_checkbox.isChecked()
def get_concurrent_fragments(self) -> int:
"""Returns the number of concurrent fragments."""
try:
return int(self.connections_input.currentText())
except ValueError:
return 1
def get_preferred_format(self) -> str:
"""Returns the selected preferred format (lowercase)."""
format_map = {0: "mp4", 1: "webm", 2: "mkv"}
@@ -535,6 +597,7 @@ class DownloadSettingsDialog(QDialog):
"""Override accept to save format settings."""
try:
ConfigManager.set("generic_mode", self.get_generic_mode_enabled())
ConfigManager.set("concurrent_fragments", self.get_concurrent_fragments())
# Save output format settings
force_format = self.get_force_format_enabled()
@@ -550,6 +613,12 @@ class DownloadSettingsDialog(QDialog):
ConfigManager.set("preferred_audio_format", preferred_audio_format)
ConfigManager.set("audio_normalization", audio_normalization)
# Save defaults
default_vid = self.default_vid_qual_input.text().strip()
ConfigManager.set("default_video_quality", default_vid if default_vid else None)
default_sub = self.default_sub_input.text().strip()
ConfigManager.set("default_subtitle_language", default_sub if default_sub else None)
# Save filename format
filename_format = self.get_filename_format()
if filename_format:
+34 -1
View File
@@ -238,6 +238,30 @@ class FormatTableMixin:
self._populate_format_table(all_filtered)
self._table_built = True
from ..utils.ytsage_config_manager import ConfigManager
default_video_quality = ConfigManager.get("default_video_quality")
# Auto-select the default or best format
if self.format_checkboxes:
found_default = False
if default_video_quality:
# Try to find a video format with the requested height (e.g. '1080')
target_height = str(default_video_quality)
# the formats are sorted by quality, so the first match is typically the best one for that height
for idx, (f, fmt_type) in enumerate(all_filtered):
if fmt_type == "video":
res = str(f.get("resolution", ""))
if res.endswith(f"x{target_height}") or target_height in res:
self.format_checkboxes[idx].setChecked(True)
self.handle_checkbox_click(self.format_checkboxes[idx])
found_default = True
break
if not found_default:
# Fallback to the first available format (which is the best quality since it's sorted)
self.format_checkboxes[0].setChecked(True)
self.handle_checkbox_click(self.format_checkboxes[0])
# Apply initial visibility based on current button states
self.filter_formats()
@@ -307,6 +331,9 @@ class FormatTableMixin:
# Quality label with color coding
quality_label = self.get_quality_label(f)
if is_playlist_mode and f.get("vcodec") != "none":
quality_label = f"{quality_label}"
quality_item = QTableWidgetItem(quality_label)
# Set color based on quality (check multiple language terms)
quality_lower = quality_label.lower()
@@ -325,6 +352,9 @@ class FormatTableMixin:
if not isinstance(resolution, str):
resolution = str(resolution)
if is_playlist_mode and f.get("vcodec") != "none" and resolution != "N/A":
resolution = f"{resolution}"
if is_playlist_mode:
# Column 2 for playlist mode: Resolution
self.format_table.setItem(row, 2, QTableWidgetItem(resolution))
@@ -490,7 +520,10 @@ class FormatTableMixin:
resolution = format_info.get("resolution", "")
if resolution:
try:
height = int(resolution.split("x")[1])
parts = resolution.split("x")
if len(parts) == 2:
# Use the smaller dimension to correctly classify vertical videos
height = min(int(parts[0]), int(parts[1]))
except:
pass
+125 -11
View File
@@ -15,6 +15,7 @@ from PySide6.QtWidgets import (
QButtonGroup,
QCheckBox,
QDialog,
QFileDialog,
QHBoxLayout,
QLabel,
QLineEdit,
@@ -329,13 +330,31 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
logger.exception(f"Error playing notification sound: {e}")
def _initialize_cookie_settings_from_config(self) -> None:
"""Initialize cookie settings - cookies are NOT auto-activated on startup.
User must explicitly click Apply in the dialog each session."""
# Cookies always start inactive on app launch
# User must click Apply in Custom Options dialog to activate them
"""Initialize cookie settings and restore from last session if active."""
self.cookie_file_path = None
self.browser_cookies_option = None
logger.debug("Cookie settings initialized - no cookies active (user must apply manually)")
# Check if the user wants to remember cookies across sessions
remember_val = ConfigManager.get("cookie_remember")
should_remember = True if remember_val is None else remember_val
if ConfigManager.get("cookie_active") and should_remember:
source = ConfigManager.get("cookie_source")
if source == "file":
saved_path = ConfigManager.get("cookie_file_path")
if saved_path and Path(saved_path).exists():
self.cookie_file_path = Path(saved_path)
logger.info(f"Restored cookie file from previous session: {self.cookie_file_path}")
elif source == "browser":
browser = ConfigManager.get("cookie_browser")
profile = ConfigManager.get("cookie_browser_profile")
if browser:
self.browser_cookies_option = f"{browser}:{profile}" if profile else browser
logger.info(f"Restored browser cookies from previous session: {self.browser_cookies_option}")
else:
# Revert activation back if the user opted NOT to remember them
ConfigManager.set("cookie_active", False)
logger.debug("Cookie settings initialized - no cookies active")
def init_ui(self) -> None:
self.setWindowTitle(f"{_('app.title')} {_('app.version', version=self.version)}")
@@ -397,12 +416,24 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
self.playlist_info_label = self.setup_playlist_info_section()
layout.addWidget(self.playlist_info_label)
# Playlist buttons layout
playlist_btns_layout = QHBoxLayout()
# Add playlist selection BUTTON (initially hidden) - REPLACED QLineEdit
self.playlist_select_btn = QPushButton(_("buttons.select_videos"))
self.playlist_select_btn.clicked.connect(self.open_playlist_selection_dialog)
self.playlist_select_btn.setVisible(False)
self.playlist_select_btn.setStyleSheet(StyleSheet.PLAYLIST_BUTTON)
layout.addWidget(self.playlist_select_btn)
playlist_btns_layout.addWidget(self.playlist_select_btn)
# Save playlist as button
self.save_playlist_btn = QPushButton(_("buttons.save_playlist", default="Save Playlist As"))
self.save_playlist_btn.clicked.connect(self.save_playlist_to_file)
self.save_playlist_btn.setVisible(False)
self.save_playlist_btn.setStyleSheet(StyleSheet.PLAYLIST_BUTTON)
playlist_btns_layout.addWidget(self.save_playlist_btn)
layout.addLayout(playlist_btns_layout)
# --- End Playlist Info Section ---
# Format controls section with minimal spacing
@@ -568,6 +599,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
self.signals.playlist_info_label_text.connect(self.playlist_info_label.setText)
self.signals.selected_subs_label_text.connect(self.selected_subs_label.setText)
self.signals.playlist_select_btn_visible.connect(lambda v: self.set_widget_visible_animated(self.playlist_select_btn, v))
self.signals.playlist_select_btn_visible.connect(lambda v: self.set_widget_visible_animated(self.save_playlist_btn, v))
self.signals.playlist_select_btn_text.connect(self.playlist_select_btn.setText)
# Disable analysis-dependent controls until video is analyzed
@@ -713,11 +745,18 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
# Get resolution for filename
resolution = "default"
for checkbox in self.format_checkboxes:
if checkbox.isChecked():
parts = checkbox.text().split("")
if len(parts) >= 1:
resolution = parts[0].strip().lower()
for row in range(self.format_table.rowCount()):
cell_widget = self.format_table.cellWidget(row, 0)
if cell_widget:
cb = cell_widget.layout().itemAt(0).widget()
if isinstance(cb, QCheckBox) and cb.isChecked():
if self.is_playlist:
res_item = self.format_table.item(row, 2)
else:
res_item = self.format_table.item(row, 3)
if res_item and res_item.text() != "N/A":
resolution = res_item.text().replace("", "").strip()
break
# Get subtitle selection if available - Now get the list
@@ -755,6 +794,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
# Get filename format from config
filename_format = ConfigManager.get("filename_format")
concurrent_fragments = ConfigManager.get("concurrent_fragments") or 1
# Create download thread with resolution in output template
self.download_thread = DownloadThread(
@@ -785,6 +825,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
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
concurrent_fragments=concurrent_fragments, # Pass the concurrent fragments
)
# Connect signals
@@ -1312,6 +1353,79 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
button_text = f"Select Videos... ({display_text})"
self.playlist_select_btn.setText(button_text) # Direct call is fine here
def save_playlist_to_file(self) -> None:
"""Save current playlist URLs/info to a file."""
if not getattr(self, "playlist_entries", None):
QMessageBox.warning(self, _("playlist.save_error_title", default="Save Error"), _("playlist.no_videos_to_save", default="No playlist entries gathered!"))
return
default_dir = str(Path(self.last_path) / "playlist.txt")
file_path, selected_filter = QFileDialog.getSaveFileName(
self,
_("playlist.save_as", default="Save Playlist As"),
default_dir,
"Text files (*.txt);;M3U playlists (*.m3u);;CSV files (*.csv);;JSON files (*.json)"
)
if not file_path:
return
try:
with open(file_path, 'w', encoding='utf-8') as f:
if "Text files" in selected_filter:
for index, entry in enumerate(self.playlist_entries):
duration = entry.get("duration")
duration_str = ""
if duration:
try:
m, s = divmod(int(duration), 60)
h, m = divmod(m, 60)
if h > 0:
duration_str = f" [{h}:{m:02d}:{s:02d}]"
else:
duration_str = f" [{m:02d}:{s:02d}]"
except (ValueError, TypeError):
pass
title = entry.get('title', f'Video {index + 1}')
# Formatting output to include index and duration
f.write(f"{index + 1}. {title}{duration_str} - {entry.get('url', '')}\n")
elif "M3U" in selected_filter:
f.write("#EXTM3U\n")
for entry in self.playlist_entries:
duration = int(entry.get('duration', 0)) if entry.get('duration') else 0
title = entry.get('title', 'Unknown Title')
f.write(f"#EXTINF:{duration},{title}\n{entry.get('url', '')}\n")
elif "CSV" in selected_filter:
import csv
writer = csv.writer(f, lineterminator='\n')
# Adding Playlist Index to CSV and formatting Title with index and duration
writer.writerow(['Playlist Index', 'Title', 'URL', 'Duration', 'Uploader'])
for index, entry in enumerate(self.playlist_entries):
duration = entry.get("duration")
duration_str = ""
if duration:
try:
m, s = divmod(int(duration), 60)
h, m = divmod(m, 60)
if h > 0:
duration_str = f" [{h}:{m:02d}:{s:02d}]"
else:
duration_str = f" [{m:02d}:{s:02d}]"
except (ValueError, TypeError):
pass
title = entry.get('title', f'Video {index + 1}')
formatted_title = f"{index + 1}. {title}{duration_str}"
writer.writerow([index + 1, formatted_title, entry.get('url', ''), entry.get('duration', ''), entry.get('uploader', '')])
elif "JSON" in selected_filter:
import json
json.dump(self.playlist_entries, f, indent=4, ensure_ascii=False)
QMessageBox.information(self, _("playlist.save_success_title", default="Success"), _("playlist.saved_successfully", default="Playlist saved successfully."))
except Exception as e:
logger.exception(f"Error saving playlist: {e}")
QMessageBox.critical(self, _("playlist.save_error_title", default="Error"), _("playlist.save_error_msg", default="Failed to save playlist."))
# --- New Slot for Updating Playlist Button Text ---
# moved to SignalManager as Signal and added to init_ui() method.
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "تحديد الكل",
"deselect_all": "إلغاء تحديد الكل",
"open_folder": "فتح موقع المجلد",
"history": "السجل"
"history": "السجل",
"save_playlist": "حفظ قائمة التشغيل باسم"
},
"dialogs": {
"custom_options": "خيارات مخصصة",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "تصفية اللغات (مثال: ar، en)...",
"no_subtitles_available": "لا توجد ترجمات متاحة",
"matching": "مطابقة",
"ytdlp_log_title": "سجل yt-dlp"
"ytdlp_log_title": "سجل yt-dlp",
"filter_playlist_placeholder": "تصفية الفيديوهات..."
},
"tabs": {
"cookies": "تسجيل الدخول بالكوكيز",
@@ -129,7 +131,8 @@
"cleared_message": "تم مسح إعدادات الكوكيز",
"active_browser": "✓ نشط: كوكيز المتصفح ({browser})",
"active_file": "✓ نشط: ملف كوكيز ({file})",
"none_active": "○ لا توجد كوكيز نشطة"
"none_active": "○ لا توجد كوكيز نشطة",
"remember_settings": "تذكر إعدادات ملفات تعريف الارتباط عند بدء التشغيل التالي"
},
"custom_command": {
"help_text": "أدخل أمر yt-dlp مخصص أدناه. سيتم إضافة الرابط الحالي تلقائياً.<br><br>للحصول على قائمة كاملة بالخيارات وأمثلة الاستخدام <a href=\"{docs_url}\">انقر هنا لمشاهدة الوثائق الرسمية لـ yt-dlp</a>.<br><br>ملاحظة: يتم التعامل مع مسار التنزيل ونموذج اسم الملف تلقائياً.",
@@ -342,7 +345,13 @@
"filename_format_help": "المتغيرات المتاحة: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. يتم دعم صيغة قالب إخراج yt-dlp القياسية.",
"tab_general": "عام",
"tab_format": "تنسيق",
"tab_file": "ملف"
"tab_file": "ملف",
"concurrent_fragments": "اتصالات متزامنة",
"concurrent_fragments_help": "عدد الاتصالات لكل عملية تحميل. القيم الأعلى تتجاوز الاختناق ولكنها قد تسبب حظراً مؤقتاً إذا كانت عالية جداً. الافتراضي: 1.",
"defaults_settings": "إعدادات الاختيار الافتراضية",
"default_video_quality": "دقة الفيديو الافتراضية (الطول):",
"default_subtitle_language": "لغات الترجمة الافتراضية:",
"defaults_help": "اضبط ارتفاع الفيديو المفضل ولغات الترجمة (مفصولة بفاصلة). سيتم اختيارها تلقائيًا إذا كانت متوفرة."
},
"main_ui": {
"url_placeholder": "أدخل رابط فيديو يوتيوب أو قائمة تشغيل",
@@ -452,7 +461,8 @@
"generic_error": "خطأ: {error}",
"download_failed_return_code_conflict": "فشل التنزيل برمز الإرجاع {return_code}. قد يكون ذلك بسبب تعارض بين عدة عمليات تثبيت لـ yt-dlp. جرّب إزالة أي تثبيت لنظام التشغيل (مثل snap أو apt) ثم أعد تشغيل التطبيق.",
"download_failed_return_code": "فشل التنزيل برمز الإرجاع {return_code}",
"direct_command_error": "خطأ في الأمر المباشر: {error}"
"direct_command_error": "خطأ في الأمر المباشر: {error}",
"private_video": "قد يكون هذا الفيديو خاصًا. يرجى استخدام ملفات تعريف الارتباط من الخيارات المخصصة."
},
"update_dialog": {
"title": "تحديث متاح",
@@ -467,7 +477,13 @@
"unknown": "قائمة تشغيل غير معروفة",
"total_videos": "إجمالي الفيديوهات: {count}",
"display_format": "قائمة التشغيل: {title} | {count} فيديوهات",
"select_videos_title": "اختر مقاطع الفيديو من قائمة التشغيل"
"select_videos_title": "اختر مقاطع الفيديو من قائمة التشغيل",
"save_as": "حفظ قائمة التشغيل باسم",
"save_success_title": "تم بنجاح",
"saved_successfully": "تم حفظ قائمة التشغيل بنجاح.",
"save_error_title": "خطأ في الحفظ",
"no_videos_to_save": "لم يتم العثور على أي مقاطع فيديو لحفظها!",
"save_error_msg": "فشل في حفظ قائمة التشغيل."
},
"subtitle_selection": {
"count_selected": "{count} محدد"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "Alle auswählen",
"deselect_all": "Alle abwählen",
"open_folder": "Ordnerspeicherort öffnen",
"history": "Verlauf"
"history": "Verlauf",
"save_playlist": "Playlist speichern unter"
},
"dialogs": {
"custom_options": "Benutzerdefinierte Optionen",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Sprachen filtern (z.B. en, de)...",
"no_subtitles_available": "Keine Untertitel verfügbar",
"matching": "passend",
"ytdlp_log_title": "yt-dlp-Protokoll"
"ytdlp_log_title": "yt-dlp-Protokoll",
"filter_playlist_placeholder": "Videos filtern..."
},
"tabs": {
"cookies": "Mit Cookies anmelden",
@@ -129,7 +131,8 @@
"cleared_message": "Cookie-Einstellungen wurden gelöscht",
"active_browser": "✓ Aktiv: Browser-Cookies ({browser})",
"active_file": "✓ Aktiv: Cookie-Datei ({file})",
"none_active": "○ Keine Cookies aktiv"
"none_active": "○ Keine Cookies aktiv",
"remember_settings": "Cookie-Einstellungen beim nächsten Start merken"
},
"custom_command": {
"help_text": "Geben Sie Ihren benutzerdefinierten yt-dlp-Befehl unten ein. Die aktuelle URL wird automatisch angehängt.<br><br>Für die vollständige Liste der Optionen und Verwendungsbeispiele <a href=\"{docs_url}\">klicken Sie hier, um die offizielle yt-dlp-Dokumentation anzuzeigen</a>.<br><br>Hinweis: Download-Pfad und Dateinamen-Vorlage werden automatisch behandelt.",
@@ -342,7 +345,13 @@
"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"
"tab_file": "Datei",
"concurrent_fragments": "Gleichzeitige Verbindungen",
"concurrent_fragments_help": "Anzahl der Verbindungen pro Download. Höhere Werte umgehen Drosselungen, können aber bei zu hohen Werten zu temporären Sperren führen. Standard: 1.",
"defaults_settings": "Standard-Auswahleinstellungen",
"default_video_quality": "Standard-Videoauflösung (Höhe):",
"default_subtitle_language": "Standard- Untertitelsprache(n):",
"defaults_help": "Legen Sie Ihre bevorzugte Videohöhe und Untertitelsprachen fest (kommagetrennt). Diese werden automatisch ausgewählt, falls verfügbar."
},
"main_ui": {
"url_placeholder": "YouTube-Video- oder Playlist-URL eingeben",
@@ -452,7 +461,8 @@
"generic_error": "Fehler: {error}",
"download_failed_return_code_conflict": "Download fehlgeschlagen mit Rückgabecode {return_code}. Dies kann an einem Konflikt mit mehreren yt-dlp-Installationen liegen. Deinstalliere ggf. eine systemweit installierte yt-dlp-Version (z. B. über snap oder apt) und starte die Anwendung neu.",
"download_failed_return_code": "Download fehlgeschlagen mit Rückgabecode {return_code}",
"direct_command_error": "Fehler im direkten Befehl: {error}"
"direct_command_error": "Fehler im direkten Befehl: {error}",
"private_video": "Dieses Video ist möglicherweise privat. Bitte verwenden Sie Cookies aus den benutzerdefinierten Optionen."
},
"update_dialog": {
"title": "Update verfügbar",
@@ -467,7 +477,13 @@
"unknown": "Unbekannte Playlist",
"total_videos": "Gesamtanzahl Videos: {count}",
"display_format": "Playlist: {title} | {count} Videos",
"select_videos_title": "Playlist-Videos auswählen"
"select_videos_title": "Playlist-Videos auswählen",
"save_as": "Playlist speichern unter",
"save_success_title": "Erfolg",
"saved_successfully": "Playlist erfolgreich gespeichert.",
"save_error_title": "Fehler beim Speichern",
"no_videos_to_save": "Keine Playlist-Einträge gesammelt!",
"save_error_msg": "Fehler beim Speichern der Playlist."
},
"subtitle_selection": {
"count_selected": "{count} ausgewählt"
+18 -3
View File
@@ -83,6 +83,7 @@
"select_all": "Select All",
"deselect_all": "Deselect All",
"open_folder": "Open folder location",
"save_playlist": "Save Playlist As",
"reset": "Reset"
},
"dialogs": {
@@ -130,7 +131,8 @@
"cleared_message": "Cookie settings have been cleared",
"active_browser": "✓ Active: Browser cookies ({browser})",
"active_file": "✓ Active: Cookie file ({file})",
"none_active": "○ No cookies active"
"none_active": "○ No cookies active",
"remember_settings": "Remember cookie settings on next startup"
},
"custom_command": {
"help_text": "Enter your custom yt-dlp command below. The current URL will be appended automatically.<br><br>For the full list of options and usage examples, <a href=\"{docs_url}\">click here to view the official yt-dlp documentation</a>.<br><br>Note: Download path and filename template will be handled automatically.",
@@ -330,7 +332,13 @@
"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.",
"filename_format_help": "Available variables: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s, %(playlist_index)s. Standard yt-dlp output template syntax is supported.",
"defaults_settings": "Default Selection Settings",
"default_video_quality": "Default Video Resolution (Height):",
"default_subtitle_language": "Default Subtitle Language(s):",
"defaults_help": "Set your preferred video height and subtitle languages (comma-separated). They will be auto-selected if available.",
"concurrent_fragments": "Concurrent Connections",
"concurrent_fragments_help": "Number of connections per download. Higher values bypass throttling but may cause temporary blocks if set too high. Default: 1.",
"preferred_audio_format": "Preferred audio format:",
"force_audio_format_help": "When enabled, audio-only downloads will be converted to your preferred format. This only applies when downloading audio formats.",
"audio_format_best": "Best (No conversion)",
@@ -448,6 +456,7 @@
"analysis_timeout": "Error: Analysis timed out. Please try again.",
"invalid_speed_limit": "❌ Error: Invalid speed limit value set in settings.",
"ytdlp_failed": "Error: yt-dlp failed: {error}",
"private_video": "This video might be private. Please use cookies from the custom options.",
"parse_failed": "Error: Failed to parse yt-dlp output: {error}",
"analysis_failed": "Error: Analysis failed: {error}",
"generic_error": "Error: {error}",
@@ -468,7 +477,13 @@
"unknown": "Unknown Playlist",
"total_videos": "Total Videos: {count}",
"display_format": "Playlist: {title} | {count} videos",
"select_videos_title": "Select Playlist Videos"
"select_videos_title": "Select Playlist Videos",
"save_as": "Save Playlist As",
"save_success_title": "Success",
"saved_successfully": "Playlist saved successfully.",
"save_error_title": "Save Error",
"no_videos_to_save": "No playlist entries gathered!",
"save_error_msg": "Failed to save playlist."
},
"subtitle_selection": {
"count_selected": "{count} selected"
+44 -11
View File
@@ -17,7 +17,9 @@
"polish": "Polaco",
"italian": "Italiano",
"arabic": "Árabe",
"japanese": "Japonés"
"japanese": "Japonés",
"help_text": "Seleccione su idioma preferido para la interfaz.",
"restart_notice": "El cambio de idioma tendrá efecto después de reiniciar la aplicación."
},
"app": {
"title": "YTSage",
@@ -50,7 +52,9 @@
"select_all": "Seleccionar Todos",
"deselect_all": "Deseleccionar Todos",
"open_folder": "Abrir ubicación de carpeta",
"history": "Historial"
"history": "Historial",
"save_playlist": "Guardar playlist como",
"custom_command_help": "Ayuda"
},
"dialogs": {
"custom_options": "Opciones Personalizadas",
@@ -62,7 +66,8 @@
"filter_languages_placeholder": "Filtrar idiomas (ej., en, es)...",
"no_subtitles_available": "No hay subtítulos disponibles",
"matching": "que coincidan con",
"ytdlp_log_title": "Registro de yt-dlp"
"ytdlp_log_title": "Registro de yt-dlp",
"filter_playlist_placeholder": "Filtrar videos..."
},
"tabs": {
"cookies": "Iniciar sesión con Cookies",
@@ -96,7 +101,8 @@
"cleared_message": "La configuración de cookies se ha borrado",
"active_browser": "✓ Activas: cookies del navegador ({browser})",
"active_file": "✓ Activo: archivo de cookies ({file})",
"none_active": "○ No hay cookies activas"
"none_active": "○ No hay cookies activas",
"remember_settings": "Recordar configuración de cookies en el próximo inicio"
},
"custom_command": {
"help_text": "Ingresa tu comando yt-dlp personalizado a continuación. La URL actual se añadirá automáticamente.<br><br>Para ver la lista completa de opciones y ejemplos de uso, <a href=\"{docs_url}\">haz clic aquí para ver la documentación oficial de yt-dlp</a>.<br><br>Nota: La ruta de descarga y la plantilla de nombre de archivo se manejarán automáticamente.",
@@ -114,7 +120,9 @@
"url_label": "📍 URL: {url}",
"args_label": "⚙️ Argumentos: {command}",
"download_path_label": "📁 Ruta de descarga: {path}",
"separator": "=================================================="
"separator": "==================================================",
"command_placeholder": "Enter custom yt-dlp command...",
"command_help": "Available placeholders:\n{url} - Video URL\n{output} - Output directory\n\nExample: --write-info-json --write-thumbnail"
},
"proxy": {
"help_text": "Configurar ajustes de proxy para conexiones de red y geo-verificación.\nEl proxy puede ayudar a evitar restricciones regionales y mejorar el rendimiento de descarga.",
@@ -140,7 +148,11 @@
"cleared_title": "Configuración de proxy borrada",
"cleared_message": "Se borró y guardó toda la configuración de proxy.",
"saved_main": "Proxy principal guardado: {proxy}",
"saved_geo": "Proxy geo guardado: {proxy}"
"saved_geo": "Proxy geo guardado: {proxy}",
"proxy_url": "Proxy URL",
"proxy_placeholder": "http://proxy:port or socks5://proxy:port",
"geo_bypass": "Geo-bypass proxy (for geographic restrictions)",
"geo_bypass_placeholder": "http://proxy:port for bypassing geo-blocks"
},
"download": {
"preparing": "Preparando descarga...",
@@ -194,7 +206,11 @@
"high_audio": "Audio Alto",
"medium_audio": "Audio Medio",
"low_audio": "Audio Bajo",
"audio_only_resolution": "Solo audio"
"audio_only_resolution": "Solo audio",
"video_format": "Video Format:",
"audio_format": "Audio Format:",
"no_formats": "No formats available",
"loading": "Loading formats..."
},
"about": {
"title": "Acerca de YTSage",
@@ -222,7 +238,11 @@
"end_time": "Tiempo de Fin:",
"start_time_placeholder": "00:00:00 (o dejar vacío para inicio)",
"end_time_placeholder": "00:10:00 (o dejar vacío para fin)",
"force_keyframes": "Forzar fotogramas clave en cortes (mejor precisión, más lento)"
"force_keyframes": "Forzar fotogramas clave en cortes (mejor precisión, más lento)",
"start_placeholder": "00:00:00",
"end_placeholder": "00:00:00",
"invalid_format": "Invalid time format. Use HH:MM:SS format.",
"start_after_end": "Start time cannot be after end time."
},
"update": {
"title": "Actualizar yt-dlp",
@@ -325,7 +345,13 @@
"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"
"tab_file": "Archivo",
"concurrent_fragments": "Conexiones simultáneas",
"concurrent_fragments_help": "Número de conexiones por descarga. Los valores más altos evitan la limitación, pero pueden causar bloqueos temporales si se establecen demasiado altos. Predeterminado: 1.",
"defaults_settings": "Configuración de selección predeterminada",
"default_video_quality": "Resolución de video predeterminada (altura):",
"default_subtitle_language": "Idioma(s) de subtítulos predeterminado(s):",
"defaults_help": "Establece tu altura de video preferida y los idiomas de los subtítulos (separados por comas). Se seleccionarán automáticamente si están disponibles."
},
"main_ui": {
"url_placeholder": "Ingresa URL de video o lista de YouTube",
@@ -435,7 +461,8 @@
"generic_error": "Error: {error}",
"download_failed_return_code_conflict": "La descarga falló con el código de salida {return_code}. Esto puede deberse a un conflicto con varias instalaciones de yt-dlp. Intenta desinstalar cualquier yt-dlp instalado en el sistema (p. ej., mediante snap o apt) y reinicia la aplicación.",
"download_failed_return_code": "La descarga falló con el código de salida {return_code}",
"direct_command_error": "Error en el comando directo: {error}"
"direct_command_error": "Error en el comando directo: {error}",
"private_video": "Este video podría ser privado. Por favor, utiliza cookies desde las opciones personalizadas."
},
"update_dialog": {
"title": "Actualización disponible",
@@ -450,7 +477,13 @@
"unknown": "Lista de reproducción desconocida",
"total_videos": "Total de Videos: {count}",
"display_format": "Lista de reproducción: {title} | {count} videos",
"select_videos_title": "Seleccionar Videos de la Lista de Reproducción"
"select_videos_title": "Seleccionar Videos de la Lista de Reproducción",
"save_as": "Guardar playlist como",
"save_success_title": "Éxito",
"saved_successfully": "Playlist guardada correctamente.",
"save_error_title": "Error al guardar",
"no_videos_to_save": "¡No se han recopilado entradas de la lista de reproducción!",
"save_error_msg": "Error al guardar la lista de reproducción."
},
"subtitle_selection": {
"count_selected": "{count} seleccionados"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "Tout sélectionner",
"deselect_all": "Tout désélectionner",
"open_folder": "Ouvrir l'emplacement du dossier",
"history": "Historique"
"history": "Historique",
"save_playlist": "Enregistrer la playlist sous"
},
"dialogs": {
"custom_options": "Options personnalisées",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Filtrer les langues (ex: en, fr)...",
"no_subtitles_available": "Aucun sous-titre disponible",
"matching": "correspondant",
"ytdlp_log_title": "Journal yt-dlp"
"ytdlp_log_title": "Journal yt-dlp",
"filter_playlist_placeholder": "Filtrer les vidéos..."
},
"tabs": {
"cookies": "Se connecter avec des cookies",
@@ -129,7 +131,8 @@
"cleared_message": "Les paramètres des cookies ont été effacés",
"active_browser": "✓ Actifs : cookies du navigateur ({browser})",
"active_file": "✓ Actif : fichier cookies ({file})",
"none_active": "○ Aucun cookie actif"
"none_active": "○ Aucun cookie actif",
"remember_settings": "Mémoriser les paramètres des cookies au prochain démarrage"
},
"custom_command": {
"help_text": "Entrez votre commande yt-dlp personnalisée ci-dessous. L'URL actuelle sera automatiquement ajoutée.<br><br>Pour la liste complète des options et exemples d'utilisation <a href=\"{docs_url}\">cliquez ici pour voir la documentation officielle yt-dlp</a>.<br><br>Note : Le chemin de téléchargement et le modèle de nom de fichier sont gérés automatiquement.",
@@ -342,7 +345,13 @@
"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"
"tab_file": "Fichier",
"concurrent_fragments": "Connexions simultanées",
"concurrent_fragments_help": "Nombre de connexions par téléchargement. Des valeurs plus élevées contournent le bridage mais peuvent entraîner des blocages temporaires si elles sont trop élevées. Par défaut : 1.",
"defaults_settings": "Paramètres de sélection par défaut",
"default_video_quality": "Résolution vidéo par défaut (hauteur) :",
"default_subtitle_language": "Langue(s) des sous-titres par défaut :",
"defaults_help": "Définissez votre hauteur de vidéo préférée et les langues des sous-titres (séparées par des virgules). Elles seront sélectionnées automatiquement si elles sont disponibles."
},
"main_ui": {
"url_placeholder": "Entrer l'URL de la vidéo ou de la playlist YouTube",
@@ -452,7 +461,8 @@
"generic_error": "Erreur : {error}",
"download_failed_return_code_conflict": "Téléchargement échoué avec le code de retour {return_code}. Cela peut être dû à un conflit entre plusieurs installations de yt-dlp. Essayez de désinstaller toute version installée au niveau du système (par ex. via snap ou apt) puis redémarrez lapplication.",
"download_failed_return_code": "Téléchargement échoué avec le code de retour {return_code}",
"direct_command_error": "Erreur dans la commande directe : {error}"
"direct_command_error": "Erreur dans la commande directe : {error}",
"private_video": "Cette vidéo pourrait être privée. Veuillez utiliser des cookies depuis les options personnalisées."
},
"update_dialog": {
"title": "Mise à jour disponible",
@@ -467,7 +477,13 @@
"unknown": "Playlist inconnue",
"total_videos": "Total des vidéos : {count}",
"display_format": "Playlist : {title} | {count} vidéos",
"select_videos_title": "Sélectionner les Vidéos de la Playlist"
"select_videos_title": "Sélectionner les Vidéos de la Playlist",
"save_as": "Enregistrer la playlist sous",
"save_success_title": "Succès",
"saved_successfully": "Playlist enregistrée avec succès.",
"save_error_title": "Erreur d'enregistrement",
"no_videos_to_save": "Aucune vidéo de la playlist n'a été récupérée !",
"save_error_msg": "Échec de l'enregistrement de la playlist."
},
"subtitle_selection": {
"count_selected": "{count} sélectionné(s)"
+23 -7
View File
@@ -83,7 +83,8 @@
"select_all": "सभी चुनें",
"deselect_all": "सभी को अचयनित करें",
"open_folder": "फ़ोल्डर स्थान खोलें",
"history": "इतिहास"
"history": "इतिहास",
"save_playlist": "प्लेलिस्ट को इस रूप में सहेजें"
},
"dialogs": {
"custom_options": "कस्टम विकल्प",
@@ -91,11 +92,12 @@
"select_folder": "डाउनलोड फ़ोल्डर चुनें",
"sponsorblock_categories": "SponsorBlock श्रेणियां",
"sponsorblock_description": "डाउनलोड के दौरान अपने आप हटाए जाने वाले वीडियो सेगमेंट के प्रकार चुनें।\nSponsorBlock इन सेगमेंट की पहचान के लिए समुदाय द्वारा प्रस्तुत डेटा का उपयोग करता है।",
"select_subtitles": "उपशीर्ष चुनें",
"select_subtitles": "उपशीर्षک चुनें",
"filter_languages_placeholder": "भाषाएं फ़िल्टर करें (जैसे: hi, en)...",
"no_subtitles_available": "कोई उपशीर्षक उपलब्ध नहीं",
"matching": "मेल खाता",
"ytdlp_log_title": "yt-dlp लॉग"
"ytdlp_log_title": "yt-dlp लॉग",
"filter_playlist_placeholder": "वीडियो फ़िल्टर करें..."
},
"tabs": {
"cookies": "कुकीज़ के साथ लॉगिन",
@@ -129,7 +131,8 @@
"cleared_message": "कुकी सेटिंग्स साफ़ कर दी गई हैं",
"active_browser": "✓ सक्रिय: ब्राउज़र कुकीज़ ({browser})",
"active_file": "✓ सक्रिय: कुकी फ़ाइल ({file})",
"none_active": "○ कोई कुकी सक्रिय नहीं"
"none_active": "○ कोई कुकी सक्रिय नहीं",
"remember_settings": "अगले स्टार्टअप पर कुकी सेटिंग्स याद रखें"
},
"custom_command": {
"help_text": "नीचे अपना कस्टम yt-dlp कमांड दर्ज करें। वर्तमान URL स्वचालित रूप से जोड़ा जाएगा।<br><br>विकल्पों की पूरी सूची और उपयोग के उदाहरणों के लिए <a href=\"{docs_url}\">आधिकारिक yt-dlp दस्तावेज़ देखने के लिए यहाँ क्लिक करें</a>।<br><br>नोट: डाउनलोड पथ और फ़ाइलनाम टेम्प्लेट स्वचालित रूप से संभाले जाते हैं।",
@@ -342,7 +345,13 @@
"filename_format_help": "उपलब्ध चर: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. मानक yt-dlp आउटपुट टेम्प्लेट सिंटैक्स समर्थित है.",
"tab_general": "सामान्य",
"tab_format": "प्रारूप",
"tab_file": "फ़ाइल"
"tab_file": "फ़ाइल",
"concurrent_fragments": "एक साथ कनेक्शन",
"concurrent_fragments_help": "प्रति डाउनलोड कनेक्शन की संख्या। उच्च मान थ्रॉटलिंग को बायपास करते हैं लेकिन बहुत अधिक सेट होने पर अस्थायी ब्लॉक का कारण बन सकते हैं। डिफ़ॉल्ट: 1.",
"defaults_settings": "डिफ़ॉल्ट चयन सेटिंग्स",
"default_video_quality": "डिफ़ॉल्ट वीडियो रिज़ॉल्यूशन (ऊंचाई):",
"default_subtitle_language": "डिफ़ॉल्ट उपशीर्षक भाषा(ए):",
"defaults_help": "अपनी पसंदीदा वीडियो ऊंचाई और उपशीर्षक भाषाएं (कॉमा से अलग) सेट करें। उपलब्ध होने पर वे स्वतः चयनित हो जाएंगी।"
},
"main_ui": {
"url_placeholder": "YouTube वीडियो या प्लेलिस्ट URL दर्ज करें",
@@ -452,7 +461,8 @@
"generic_error": "त्रुटि: {error}",
"download_failed_return_code_conflict": "डाउनलोड {return_code} रिटर्न कोड के साथ विफल हुआ। यह कई yt-dlp इंस्टॉलेशन के टकराव के कारण हो सकता है। किसी भी सिस्टम-इंस्टॉल्ड yt-dlp (जैसे snap या apt) को हटाकर ऐप को रीस्टार्ट करें।",
"download_failed_return_code": "डाउनलोड {return_code} रिटर्न कोड के साथ विफल हुआ",
"direct_command_error": "सीधे कमांड में त्रुटि: {error}"
"direct_command_error": "सीधे कमांड में त्रुटि: {error}",
"private_video": "यह वीडियो निजी हो सकता है। कृपया कस्टम विकल्पों से कुकीज़ का उपयोग करें।"
},
"update_dialog": {
"title": "अपडेट उपलब्ध",
@@ -467,7 +477,13 @@
"unknown": "अज्ञात प्लेलिस्ट",
"total_videos": "कुल वीडियो: {count}",
"display_format": "प्लेलिस्ट: {title} | {count} वीडियो",
"select_videos_title": "प्लेलिस्ट वीडियो चुनें"
"select_videos_title": "प्लेलिस्ट वीडियो चुनें",
"save_as": "प्लेलिस्ट को इस रूप में सहेजें",
"save_success_title": "सफलता",
"saved_successfully": "प्लेलिस्ट सफलतापूर्वक सहेजी गई।",
"save_error_title": "सहेजने में त्रुटि",
"no_videos_to_save": "कोई प्लेलिस्ट प्रविष्टियाँ एकत्रित नहीं हुई!",
"save_error_msg": "प्लेलिस्ट सहेजने में विफल।"
},
"subtitle_selection": {
"count_selected": "{count} चुना गया"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "Pilih semua",
"deselect_all": "Batalkan pilihan semua",
"open_folder": "Buka lokasi folder",
"history": "Riwayat"
"history": "Riwayat",
"save_playlist": "Simpan Playlist Sebagai"
},
"dialogs": {
"custom_options": "Opsi khusus",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Filter bahasa (misalnya: id, en)...",
"no_subtitles_available": "Tidak ada subtitle yang tersedia",
"matching": "yang cocok",
"ytdlp_log_title": "Log yt-dlp"
"ytdlp_log_title": "Log yt-dlp",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "Masuk dengan cookies",
@@ -129,7 +131,8 @@
"cleared_message": "Pengaturan cookie telah dihapus",
"active_browser": "✓ Aktif: cookie browser ({browser})",
"active_file": "✓ Aktif: file cookie ({file})",
"none_active": "○ Tidak ada cookie aktif"
"none_active": "○ Tidak ada cookie aktif",
"remember_settings": "Ingat pengaturan cookie pada startup berikutnya"
},
"custom_command": {
"help_text": "Masukkan perintah yt-dlp khusus Anda di bawah. URL saat ini akan ditambahkan secara otomatis.<br><br>Untuk daftar lengkap opsi dan contoh penggunaan <a href=\"{docs_url}\">klik di sini untuk melihat dokumentasi resmi yt-dlp</a>.<br><br>Catatan: Jalur unduhan dan template nama file ditangani secara otomatis.",
@@ -342,7 +345,13 @@
"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"
"tab_file": "Berkas",
"concurrent_fragments": "Koneksi Simultan",
"concurrent_fragments_help": "Jumlah koneksi per unduhan. Nilai yang lebih tinggi melewati pembatasan tetapi dapat menyebabkan pemblokiran sementara jika diatur terlalu tinggi. Default: 1.",
"defaults_settings": "Pengaturan Pilihan Default",
"default_video_quality": "Resolusi Video Default (Tinggi):",
"default_subtitle_language": "Bahasa Subtitel Default:",
"defaults_help": "Atur tinggi video dan bahasa subtitel pilihan Anda (pisahkan dengan koma). Mereka akan dipilih otomatis jika tersedia."
},
"main_ui": {
"url_placeholder": "Masukkan URL video atau playlist YouTube",
@@ -452,7 +461,8 @@
"generic_error": "Kesalahan: {error}",
"download_failed_return_code_conflict": "Unduhan gagal dengan kode pengembalian {return_code}. Ini mungkin karena konflik dengan beberapa instalasi yt-dlp. Coba uninstall yt-dlp yang terpasang di sistem (mis. melalui snap atau apt) lalu mulai ulang aplikasi.",
"download_failed_return_code": "Unduhan gagal dengan kode pengembalian {return_code}",
"direct_command_error": "Error pada perintah langsung: {error}"
"direct_command_error": "Error pada perintah langsung: {error}",
"private_video": "Video ini mungkin bersifat pribadi. Silakan gunakan cookie dari opsi kustom."
},
"update_dialog": {
"title": "Pembaruan Tersedia",
@@ -467,7 +477,13 @@
"unknown": "Playlist Tidak Dikenal",
"total_videos": "Total Video: {count}",
"display_format": "Playlist: {title} | {count} video",
"select_videos_title": "Pilih Video Playlist"
"select_videos_title": "Pilih Video Playlist",
"save_as": "Simpan Playlist Sebagai",
"save_success_title": "Berhasil",
"saved_successfully": "Playlist berhasil disimpan.",
"save_error_title": "Gagal Menyimpan",
"no_videos_to_save": "Tidak ada entri playlist yang dikumpulkan!",
"save_error_msg": "Gagal menyimpan playlist."
},
"subtitle_selection": {
"count_selected": "{count} dipilih"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "Seleziona tutto",
"deselect_all": "Deseleziona tutto",
"open_folder": "Apri posizione cartella",
"history": "Cronologia"
"history": "Cronologia",
"save_playlist": "Salva playlist come"
},
"dialogs": {
"custom_options": "Opzioni personalizzate",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Filtra lingue (es: it, en)...",
"no_subtitles_available": "Nessun sottotitolo disponibile",
"matching": "corrispondenti",
"ytdlp_log_title": "Registro yt-dlp"
"ytdlp_log_title": "Registro yt-dlp",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "Accedi con i cookie",
@@ -129,7 +131,8 @@
"cleared_message": "Le impostazioni dei cookie sono state cancellate",
"active_browser": "✓ Attivi: cookie del browser ({browser})",
"active_file": "✓ Attivo: file cookie ({file})",
"none_active": "○ Nessun cookie attivo"
"none_active": "○ Nessun cookie attivo",
"remember_settings": "Ricorda le impostazioni dei cookie al prossimo avvio"
},
"custom_command": {
"help_text": "Inserisci un comando yt-dlp personalizzato qui sotto. L'URL corrente verrà aggiunto automaticamente.<br><br>Per l'elenco completo delle opzioni ed esempi di utilizzo <a href=\"{docs_url}\">clicca qui per vedere la documentazione ufficiale yt-dlp</a>.<br><br>Nota: Il percorso di download e il modello del nome file sono gestiti automaticamente.",
@@ -342,7 +345,13 @@
"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"
"tab_file": "File",
"concurrent_fragments": "Connessioni simultanee",
"concurrent_fragments_help": "Numero di connessioni per download. Valori più alti aggirano il throttling ma possono causare blocchi temporanei se impostati troppo alti. Predefinito: 1.",
"defaults_settings": "Impostazioni di selezione predefinite",
"default_video_quality": "Risoluzione video predefinita (altezza):",
"default_subtitle_language": "Lingua/e dei sottotitoli predefinita/e:",
"defaults_help": "Imposta l'altezza del video preferita e le lingue dei sottotitoli (separate da virgole). Verranno selezionate automaticamente se disponibili."
},
"main_ui": {
"url_placeholder": "Inserisci URL video YouTube o playlist",
@@ -452,7 +461,8 @@
"generic_error": "Errore: {error}",
"download_failed_return_code_conflict": "Download non riuscito con codice di uscita {return_code}. Potrebbe essere dovuto a un conflitto tra più installazioni di yt-dlp. Prova a disinstallare eventuali yt-dlp installati a livello di sistema (es. snap o apt) e riavvia lapp.",
"download_failed_return_code": "Download non riuscito con codice di uscita {return_code}",
"direct_command_error": "Errore nel comando diretto: {error}"
"direct_command_error": "Errore nel comando diretto: {error}",
"private_video": "Questo video potrebbe essere privato. Si prega di utilizzare i cookie dalle opzioni personalizzate."
},
"update_dialog": {
"title": "Aggiornamento disponibile",
@@ -467,7 +477,13 @@
"unknown": "Playlist sconosciuta",
"total_videos": "Video totali: {count}",
"display_format": "Playlist: {title} | {count} video",
"select_videos_title": "Seleziona Video Playlist"
"select_videos_title": "Seleziona Video Playlist",
"save_as": "Salva playlist come",
"save_success_title": "Successo",
"saved_successfully": "Playlist salvata con successo.",
"save_error_title": "Errore di salvataggio",
"no_videos_to_save": "Nessuna voce della playlist raccolta!",
"save_error_msg": "Impossibile salvare la playlist."
},
"subtitle_selection": {
"count_selected": "{count} selezionati"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "すべて選択",
"deselect_all": "すべて解除",
"open_folder": "フォルダの場所を開く",
"history": "履歴"
"history": "履歴",
"save_playlist": "プレイリストを別名で保存"
},
"dialogs": {
"custom_options": "カスタムオプション",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "言語でフィルタ (例: ja, en)...",
"no_subtitles_available": "利用可能な字幕がありません",
"matching": "一致",
"ytdlp_log_title": "yt-dlpログ"
"ytdlp_log_title": "yt-dlpログ",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "Cookieでログイン",
@@ -129,7 +131,8 @@
"cleared_message": "Cookie設定がクリアされました",
"active_browser": "✓ 有効: ブラウザーのCookie ({browser})",
"active_file": "✓ 有効: Cookieファイル ({file})",
"none_active": "○ 有効なCookieはありません"
"none_active": "○ 有効なCookieはありません",
"remember_settings": "次回の起動時にCookie設定を記憶する"
},
"custom_command": {
"help_text": "以下にカスタムyt-dlpコマンドを入力してください。現在のURLは自動的に追加されます。<br><br>オプションの完全なリストと使用例については、<a href=\"{docs_url}\">こちらをクリックしてyt-dlp公式ドキュメントを参照してください</a>。<br><br>注: ダウンロードパスとファイル名テンプレートは自動的に処理されます。",
@@ -342,7 +345,13 @@
"filename_format_help": "利用可能な変数: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。標準のyt-dlp出力テンプレート構文がサポートされています。",
"tab_general": "一般",
"tab_format": "フォーマット",
"tab_file": "ファイル"
"tab_file": "ファイル",
"concurrent_fragments": "同時接続数",
"concurrent_fragments_help": "ダウンロードごとの接続数。値を大きくするとスロットリングを回避できますが、高すぎると一時的なブロックが発生する可能性があります。デフォルト: 1。",
"defaults_settings": "デフォルト選択設定",
"default_video_quality": "デフォルトのビデオ解像度 (高さ):",
"default_subtitle_language": "デフォルトの字幕言語:",
"defaults_help": "優先するビデオの高さと字幕言語(カンマ区切り)を設定します。利用可能な場合は自動的に選択されます。"
},
"main_ui": {
"url_placeholder": "YouTubeの動画URLまたはプレイリストURLを入力",
@@ -452,7 +461,8 @@
"generic_error": "エラー: {error}",
"download_failed_return_code_conflict": "ダウンロードは戻りコード {return_code} で失敗しました。複数の yt-dlp インストールの競合が原因の可能性があります。システムにインストールされた yt-dlp(例: snap や apt)をアンインストールしてアプリを再起動してください。",
"download_failed_return_code": "ダウンロードは戻りコード {return_code} で失敗しました",
"direct_command_error": "直接コマンドのエラー: {error}"
"direct_command_error": "直接コマンドのエラー: {error}",
"private_video": "この動画は非公開かもしれません。カスタムオプションからCookieを使用してください。"
},
"update_dialog": {
"title": "アップデートが利用可能です",
@@ -467,7 +477,13 @@
"unknown": "不明な再生リスト",
"total_videos": "総動画数: {count}",
"display_format": "再生リスト: {title} | {count}個の動画",
"select_videos_title": "プレイリスト動画を選択"
"select_videos_title": "プレイリスト動画を選択",
"save_as": "プレイリストを別名で保存",
"save_success_title": "成功",
"saved_successfully": "プレイリストを正常に保存しました。",
"save_error_title": "保存エラー",
"no_videos_to_save": "プレイリストのエントリが見つかりません!",
"save_error_msg": "プレイリストの保存に失敗しました。"
},
"subtitle_selection": {
"count_selected": "{count}個選択"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "Zaznacz wszystko",
"deselect_all": "Odznacz wszystko",
"open_folder": "Otwórz lokalizację folderu",
"history": "Historia"
"history": "Historia",
"save_playlist": "Zapisz playlistę jako"
},
"dialogs": {
"custom_options": "Opcje niestandardowe",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Filtruj języki (np: pl, en)...",
"no_subtitles_available": "Brak dostępnych napisów",
"matching": "dopasowujące",
"ytdlp_log_title": "Log yt-dlp"
"ytdlp_log_title": "Log yt-dlp",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "Zaloguj za pomocą ciasteczek",
@@ -129,7 +131,8 @@
"cleared_message": "Ustawienia ciasteczek zostały wyczyszczone",
"active_browser": "✓ Aktywne: ciasteczka przeglądarki ({browser})",
"active_file": "✓ Aktywny: plik ciasteczek ({file})",
"none_active": "○ Brak aktywnych ciasteczek"
"none_active": "○ Brak aktywnych ciasteczek",
"remember_settings": "Zapamiętaj ustawienia plików cookie przy następnym uruchomieniu"
},
"custom_command": {
"help_text": "Wprowadź niestandardowe polecenie yt-dlp poniżej. Aktualny URL zostanie automatycznie dodany.<br><br>Aby uzyskać pełną listę opcji i przykładów użycia <a href=\"{docs_url}\">kliknij tutaj, aby zobaczyć oficjalną dokumentację yt-dlp</a>.<br><br>Uwaga: Ścieżka pobierania i szablon nazwy pliku są obsługiwane automatycznie.",
@@ -342,7 +345,13 @@
"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"
"tab_file": "Plik",
"concurrent_fragments": "Jednoczesne połączenia",
"concurrent_fragments_help": "Liczba połączeń na pobieranie. Wyższe wartości omijają dławienie, ale mogą powodować tymczasowe blokady, jeśli zostaną ustawione zbyt wysoko. Domyślnie: 1.",
"defaults_settings": "Domyślne ustawienia wyboru",
"default_video_quality": "Domyślna rozdzielczość wideo (wysokość):",
"default_subtitle_language": "Domyślny język(i) napisów:",
"defaults_help": "Ustaw preferowaną wysokość wideo i języki napisów (rozdzielone przecinkami). Zostaną one automatycznie wybrane, jeśli będą dostępne."
},
"main_ui": {
"url_placeholder": "Wprowadź URL wideo YouTube lub playlisty",
@@ -452,7 +461,8 @@
"generic_error": "Błąd: {error}",
"download_failed_return_code_conflict": "Pobieranie nie powiodło się z kodem {return_code}. Może to wynikać z konfliktu wielu instalacji yt-dlp. Spróbuj odinstalować systemowo zainstalowane yt-dlp (np. przez snap lub apt) i uruchom aplikację ponownie.",
"download_failed_return_code": "Pobieranie nie powiodło się z kodem {return_code}",
"direct_command_error": "Błąd w bezpośrednim poleceniu: {error}"
"direct_command_error": "Błąd w bezpośrednim poleceniu: {error}",
"private_video": "Ten film może być prywatny. Proszę użyć plików cookie z opcji niestandardowych."
},
"update_dialog": {
"title": "Dostępna aktualizacja",
@@ -467,7 +477,13 @@
"unknown": "Nieznana playlista",
"total_videos": "Wszystkich wideo: {count}",
"display_format": "Playlista: {title} | {count} wideo",
"select_videos_title": "Wybierz Filmy z Playlisty"
"select_videos_title": "Wybierz Filmy z Playlisty",
"save_as": "Zapisz playlistę jako",
"save_success_title": "Sukces",
"saved_successfully": "Playlista zapisana pomyślnie.",
"save_error_title": "Błąd zapisu",
"no_videos_to_save": "Nie zebrano żadnych wpisów z playlisty!",
"save_error_msg": "Nie udało się zapisać playlisty."
},
"subtitle_selection": {
"count_selected": "{count} wybrano"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "Selecionar Tudo",
"deselect_all": "Desmarcar Tudo",
"open_folder": "Abrir local da pasta",
"history": "Histórico"
"history": "Histórico",
"save_playlist": "Salvar playlist como"
},
"dialogs": {
"custom_options": "Opções Personalizadas",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Filtrar idiomas (ex., en, pt)...",
"no_subtitles_available": "Nenhuma legenda disponível",
"matching": "correspondendo",
"ytdlp_log_title": "Log do yt-dlp"
"ytdlp_log_title": "Log do yt-dlp",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "Entrar com Cookies",
@@ -129,7 +131,8 @@
"cleared_message": "As configurações de cookies foram limpas",
"active_browser": "✓ Ativos: cookies do navegador ({browser})",
"active_file": "✓ Ativo: arquivo de cookies ({file})",
"none_active": "○ Nenhum cookie ativo"
"none_active": "○ Nenhum cookie ativo",
"remember_settings": "Lembrar configurações de cookies na próxima inicialização"
},
"custom_command": {
"help_text": "Digite seu comando yt-dlp personalizado abaixo. A URL atual será anexada automaticamente.<br><br>Para a lista completa de opções e exemplos de uso, <a href=\"{docs_url}\">clique aqui para ver a documentação oficial do yt-dlp</a>.<br><br>Nota: O caminho de download e modelo de nome de arquivo serão tratados automaticamente.",
@@ -342,7 +345,13 @@
"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"
"tab_file": "Arquivo",
"concurrent_fragments": "Conexões simultâneas",
"concurrent_fragments_help": "Número de conexões por download. Valores mais altos contornam o limite de velocidade, mas podem causar bloqueios temporários se forem muito altos. Padrão: 1.",
"defaults_settings": "Configurações de seleção padrão",
"default_video_quality": "Resolução de vídeo padrão (altura):",
"default_subtitle_language": "Idioma(s) de legenda padrão:",
"defaults_help": "Defina sua altura de vídeo preferida e os idiomas das legendas (separados por vírgula). Eles serão selecionados automaticamente se disponíveis."
},
"main_ui": {
"url_placeholder": "Digite a URL do vídeo ou playlist do YouTube",
@@ -452,7 +461,8 @@
"generic_error": "Erro: {error}",
"download_failed_return_code_conflict": "O download falhou com o código de retorno {return_code}. Isso pode ser devido a um conflito com várias instalações do yt-dlp. Tente desinstalar qualquer yt-dlp instalado no sistema (ex.: snap ou apt) e reinicie o aplicativo.",
"download_failed_return_code": "O download falhou com o código de retorno {return_code}",
"direct_command_error": "Erro no comando direto: {error}"
"direct_command_error": "Erro no comando direto: {error}",
"private_video": "Este vídeo pode ser privado. Por favor, use cookies das opções personalizadas."
},
"update_dialog": {
"title": "Atualização Disponível",
@@ -467,7 +477,13 @@
"unknown": "Playlist Desconhecida",
"total_videos": "Total de Vídeos: {count}",
"display_format": "Playlist: {title} | {count} vídeos",
"select_videos_title": "Selecionar Vídeos da Playlist"
"select_videos_title": "Selecionar Vídeos da Playlist",
"save_as": "Salvar playlist como",
"save_success_title": "Sucesso",
"saved_successfully": "Playlist salva com sucesso.",
"save_error_title": "Erro ao salvar",
"no_videos_to_save": "Nenhuma entrada de playlist coletada!",
"save_error_msg": "Falha ao salvar a playlist."
},
"subtitle_selection": {
"count_selected": "{count} selecionadas"
+22 -6
View File
@@ -83,7 +83,8 @@
"select_all": "Выбрать всё",
"deselect_all": "Снять выделение",
"open_folder": "Открыть расположение папки",
"history": "История"
"history": "История",
"save_playlist": "Сохранить плейлист как"
},
"dialogs": {
"custom_options": "Пользовательские опции",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Фильтр языков (например, en, ru)...",
"no_subtitles_available": "Субтитры недоступны",
"matching": "соответствующие",
"ytdlp_log_title": "Журнал yt-dlp"
"ytdlp_log_title": "Журнал yt-dlp",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "Войти через Cookie",
@@ -129,7 +131,8 @@
"cleared_message": "Настройки cookie были очищены",
"active_browser": "✓ Активны: cookie браузера ({browser})",
"active_file": "✓ Активен: файл cookie ({file})",
"none_active": "○ Нет активных cookie"
"none_active": "○ Нет активных cookie",
"remember_settings": "Запомнить настройки cookie при следующем запуске"
},
"custom_command": {
"help_text": "Введите пользовательскую команду yt-dlp ниже. Текущий URL будет добавлен автоматически.<br><br>Для полного списка опций и примеров использования, <a href=\"{docs_url}\">нажмите здесь для просмотра официальной документации yt-dlp</a>.<br><br>Примечание: Путь загрузки и шаблон имени файла будут обработаны автоматически.",
@@ -342,7 +345,13 @@
"filename_format_help": "Доступные переменные: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Поддерживается стандартный синтаксис шаблона вывода yt-dlp.",
"tab_general": "Общие",
"tab_format": "Формат",
"tab_file": "Файл"
"tab_file": "Файл",
"concurrent_fragments": "Одновременные соединения",
"concurrent_fragments_help": "Количество соединений на одну загрузку. Более высокие значения позволяют обойти ограничение скорости, но могут вызвать временную блокировку при слишком высоких значениях. По умолчанию: 1.",
"defaults_settings": "Настройки выбора по умолчанию",
"default_video_quality": "Разрешение видео по умолчанию (высота):",
"default_subtitle_language": "Язык(и) субтитров по умолчанию:",
"defaults_help": "Установите предпочтительную высоту видео и языки субтитров (через запятую). Они будут выбраны автоматически, إذا كان متاحاً."
},
"main_ui": {
"url_placeholder": "Введите URL видео или плейлиста YouTube",
@@ -452,7 +461,8 @@
"generic_error": "Ошибка: {error}",
"download_failed_return_code_conflict": "Загрузка завершилась ошибкой с кодом {return_code}. Это может быть из-за конфликта нескольких установок yt-dlp. Попробуйте удалить системно установленный yt-dlp (например, через snap или apt) и перезапустите приложение.",
"download_failed_return_code": "Загрузка не удалась, код {return_code}",
"direct_command_error": "Ошибка в прямой команде: {error}"
"direct_command_error": "Ошибка в прямой команде: {error}",
"private_video": "Это видео может быть приватным. Пожалуйста, используйте файлы cookie из пользовательских настроек."
},
"update_dialog": {
"title": "Доступно обновление",
@@ -467,7 +477,13 @@
"unknown": "Неизвестный плейлист",
"total_videos": "Всего видео: {count}",
"display_format": "Плейлист: {title} | {count} видео",
"select_videos_title": "Выбрать Видео из Плейлиста"
"select_videos_title": "Выбрать Видео из Плейлиста",
"save_as": "Сохранить плейлист как",
"save_success_title": "Успех",
"saved_successfully": "Плейлист успешно сохранен.",
"save_error_title": "Ошибка сохранения",
"no_videos_to_save": "Записи плейлиста не собраны!",
"save_error_msg": "Не удалось сохранить плейлист."
},
"subtitle_selection": {
"count_selected": "выбрано: {count}"
+34 -9
View File
@@ -83,7 +83,8 @@
"select_all": "Tümünü seç",
"deselect_all": "Tüm seçimi kaldır",
"open_folder": "Klasör konumunu aç",
"history": "Geçmiş"
"history": "Geçmiş",
"save_playlist": "Oynatma Listesini Farklı Kaydet"
},
"dialogs": {
"custom_options": "Özel seçenekler",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "Dilleri filtrele (örn: tr, en)...",
"no_subtitles_available": "Altyazı mevcut değil",
"matching": "eşleşen",
"ytdlp_log_title": "yt-dlp Günlüğü"
"ytdlp_log_title": "yt-dlp Günlüğü",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "Çerezlerle giriş yap",
@@ -129,7 +131,8 @@
"cleared_message": "Çerez ayarları temizlendi",
"active_browser": "✓ Etkin: Tarayıcı çerezleri ({browser})",
"active_file": "✓ Etkin: Çerez dosyası ({file})",
"none_active": "○ Etkin çerez yok"
"none_active": "○ Etkin çerez yok",
"remember_settings": "Sonraki başlangıçta çerez ayarlarını hatırla"
},
"custom_command": {
"help_text": "Özel yt-dlp komutunuzu aşağıya girin. Mevcut URL otomatik olarak eklenecektir.<br><br>Seçeneklerin tam listesi ve kullanım örnekleri için <a href=\"{docs_url}\">resmi yt-dlp belgelerini görmek için buraya tıklayın</a>.<br><br>Not: İndirme yolu ve dosya adı şablonu otomatik olarak işlenir.",
@@ -177,7 +180,9 @@
"geo_set_title": "Coğrafi proxy ayarlandı",
"geo_set_message": "Coğrafi doğrulama proxy'si ayarlandı ve kaydedildi: {proxy}",
"cleared_title": "Proxy ayarları temizlendi",
"cleared_message": "Tüm proxy ayarları temizlendi ve kaydedildi."
"cleared_message": "Tüm proxy ayarları temizlendi ve kaydedildi.",
"saved_main": "Saved main proxy: {proxy}",
"saved_geo": "Saved geo proxy: {proxy}"
},
"download": {
"preparing": "İndirme hazırlanıyor...",
@@ -340,7 +345,13 @@
"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"
"tab_file": "Dosya",
"concurrent_fragments": "Eşzamanlı Bağlantılar",
"concurrent_fragments_help": "İndirme başına bağlantı sayısı. Daha yüksek değerler sınırlamayı atlar ancak çok yüksek ayarlanırsa geçici engellemelere neden olabilir. Varsayılan: 1.",
"defaults_settings": "Varsayılan Seçim Ayarları",
"default_video_quality": "Varsayılan Video Çözünürlüğü (Yükseklik):",
"default_subtitle_language": "Varsayılan Altyazı Dili/Dilleri:",
"defaults_help": "Tercih ettiğiniz video yüksekliğini ve altyazı dillerini (virgülle ayırarak) ayarlayın. Varsa otomatik olarak seçileceklerdir."
},
"main_ui": {
"url_placeholder": "YouTube video veya oynatma listesi URL'sini girin",
@@ -450,7 +461,8 @@
"generic_error": "Hata: {error}",
"download_failed_return_code_conflict": "İndirme {return_code} dönüş koduyla başarısız oldu. Bunun nedeni birden fazla yt-dlp kurulumunun çakışması olabilir. Sistem kurulumlu yt-dlp'yi (örn. snap veya apt) kaldırıp uygulamayı yeniden başlatmayı deneyin.",
"download_failed_return_code": "İndirme {return_code} dönüş koduyla başarısız oldu",
"direct_command_error": "Doğrudan komutta hata: {error}"
"direct_command_error": "Doğrudan komutta hata: {error}",
"private_video": "Bu video gizli olabilir. Lütfen özel seçeneklerden çerezleri kullanın."
},
"update_dialog": {
"title": "Güncelleme Mevcut",
@@ -465,7 +477,13 @@
"unknown": "Bilinmeyen Oynatma Listesi",
"total_videos": "Toplam Video: {count}",
"display_format": "Oynatma Listesi: {title} | {count} video",
"select_videos_title": "Oynatma Listesi Videolarını Seç"
"select_videos_title": "Oynatma Listesi Videolarını Seç",
"save_as": "Oynatma Listesini Farklı Kaydet",
"save_success_title": "Başarılı",
"saved_successfully": "Oynatma listesi başarıyla kaydedildi.",
"save_error_title": "Kaydetme Hatası",
"no_videos_to_save": "Hiçbir oynatma listesi girdisi toplanmadı!",
"save_error_msg": "Oynatma listesi kaydedilemedi."
},
"subtitle_selection": {
"count_selected": "{count} seçildi"
@@ -536,14 +554,21 @@
"redownload_confirm_message": "Tekrar indir?\n\n{title}",
"redownload_started": "İndirme başladı",
"no_url_error": "Geçmiş kaydında URL bulunamadı",
"redownload_failed": "Yeniden indirme başlatılamadı: {error}"
"redownload_failed": "Yeniden indirme başlatılamadı: {error}",
"loading": "Loading history..."
},
"ffmpeg": {
"installation_title": "FFmpeg Kurulumu",
"installation_message": "YTSage, videoları işlemek için FFmpeg'e ihtiyaç duyar.\n\nAşağıdan bir kurulum seçeneği seçin:",
"install_button": "FFmpeg Kur",
"manual_guide": "Manuel Kılavuz",
"installation_failed": "FFmpeg kurulumu bir sorunla karşılaştı."
"installation_failed": "FFmpeg kurulumu bir sorunla karşılaştı.",
"already_installed": "FFmpeg zaten yüklü!",
"installation_complete": "Kurulum tamamlandı. Bu iletişim kutusunu kapatabilir ve YTSage'i kullanmaya devam edebilirsiniz.",
"installing": "FFmpeg kuruluyor... Lütfen bekleyin",
"install_success": "FFmpeg başarıyla kuruldu!",
"installation_complete_close": "Kurulum tamamlandı. Artık bu iletişim kutusunu kapatabilir ve YTSage'i kullanmaya devam edebilirsiniz.",
"try_manual": "Lütfen bunun yerine manuel kurulum kılavuzunu kullanmayı deneyin."
},
"ytdlp_setup": {
"required_title": "yt-dlp Kurulumu Gerekli",
+45 -10
View File
@@ -83,7 +83,8 @@
"select_all": "全选",
"deselect_all": "取消全选",
"open_folder": "打开文件夹位置",
"history": "历史"
"history": "历史",
"save_playlist": "保存播放列表为"
},
"dialogs": {
"custom_options": "自定义选项",
@@ -95,7 +96,8 @@
"filter_languages_placeholder": "过滤语言(例如:en, zh...",
"no_subtitles_available": "无可用字幕",
"matching": "匹配",
"ytdlp_log_title": "yt-dlp 日志"
"ytdlp_log_title": "yt-dlp 日志",
"filter_playlist_placeholder": "Filter videos..."
},
"tabs": {
"cookies": "使用 Cookie 登录",
@@ -126,7 +128,11 @@
"browser_selected_title": "已应用浏览器 Cookie",
"browser_applied_message": "将从以下位置提取浏览器 cookie{browser}",
"cleared_title": "已清除 Cookie",
"cleared_message": "Cookie 设置已被清除"
"cleared_message": "Cookie 设置已被清除",
"active_browser": "✓ Active: Browser cookies ({browser})",
"active_file": "✓ Active: Cookie file ({file})",
"none_active": "○ No cookies active",
"remember_settings": "在下次启动时记住 cookie 设置"
},
"custom_command": {
"help_text": "在下面输入您的自定义 yt-dlp 命令。当前网址将自动附加。<br><br>有关选项和使用示例的完整列表,<a href=\"{docs_url}\">点击此处查看官方 yt-dlp 文档</a>。<br><br>注意:下载路径和文件名模板将自动处理。",
@@ -139,7 +145,14 @@
"full_command": "🔧 完整命令:{command}",
"command_success": "✅ 自定义命令执行成功!",
"command_failed": "❌ 命令失败,退出代码 {code}",
"command_error": "❌ 执行自定义命令时出错:{error}"
"command_error": "❌ 执行自定义命令时出错:{error}",
"error_no_url": "❌ Error: No URL provided. Please enter a URL in the main window.",
"error_no_command": "❌ Error: No command provided. Please enter yt-dlp arguments.",
"executing": "🚀 Executing custom yt-dlp command",
"url_label": "📍 URL: {url}",
"args_label": "⚙️ Arguments: {command}",
"download_path_label": "📁 Download path: {path}",
"separator": "=================================================="
},
"proxy": {
"help_text": "配置下载的代理设置。留空使用直接连接。",
@@ -167,7 +180,9 @@
"geo_set_title": "已设置地理代理",
"geo_set_message": "地理验证代理已设置并保存: {proxy}",
"cleared_title": "代理设置已清除",
"cleared_message": "所有代理设置已清除并保存。"
"cleared_message": "所有代理设置已清除并保存。",
"saved_main": "Saved main proxy: {proxy}",
"saved_geo": "Saved geo proxy: {proxy}"
},
"download": {
"preparing": "正在准备下载...",
@@ -330,7 +345,13 @@
"filename_format_help": "可用变量: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。支持标准的 yt-dlp 输出模板语法。",
"tab_general": "一般",
"tab_format": "格式",
"tab_file": "文件"
"tab_file": "文件",
"concurrent_fragments": "并发连接数",
"concurrent_fragments_help": "每个下载的连接数。较高的值可以绕过限速,但如果设置得太高,可能会导致临时被封。默认值:1。",
"defaults_settings": "默认选择设置",
"default_video_quality": "默认视频分辨率 (高度):",
"default_subtitle_language": "默认字幕语言:",
"defaults_help": "设置您首选的视频高度和字幕语言(用逗号分隔)。如果可用,它们将被自动选择。"
},
"main_ui": {
"url_placeholder": "输入 YouTube 视频或播放列表网址",
@@ -440,7 +461,8 @@
"generic_error": "错误:{error}",
"download_failed_return_code_conflict": "下载失败,返回码 {return_code}。这可能是由于存在多个 yt-dlp 安装导致冲突。请卸载系统中安装的 yt-dlp(例如通过 snap 或 apt),然后重启应用。",
"download_failed_return_code": "下载失败,返回码 {return_code}",
"direct_command_error": "直接命令出错:{error}"
"direct_command_error": "直接命令出错:{error}",
"private_video": "此视频可能是私享视频。请使用自定义选项中的 cookie。"
},
"update_dialog": {
"title": "有可用更新",
@@ -455,7 +477,13 @@
"unknown": "未知播放列表",
"total_videos": "总视频数:{count}",
"display_format": "播放列表:{title} | {count}个视频",
"select_videos_title": "选择播放列表视频"
"select_videos_title": "选择播放列表视频",
"save_as": "保存播放列表为",
"save_success_title": "成功",
"saved_successfully": "播放列表已成功保存。",
"save_error_title": "保存错误",
"no_videos_to_save": "未收集到播放列表条目!",
"save_error_msg": "保存播放列表失败。"
},
"subtitle_selection": {
"count_selected": "已选择{count}个"
@@ -526,14 +554,21 @@
"redownload_confirm_message": "重新下载?\n\n{title}",
"redownload_started": "已开始下载",
"no_url_error": "历史记录中未找到 URL",
"redownload_failed": "无法开始重新下载: {error}"
"redownload_failed": "无法开始重新下载: {error}",
"loading": "Loading history..."
},
"ffmpeg": {
"installation_title": "FFmpeg 安装",
"installation_message": "YTSage 需要 FFmpeg 来处理视频。\n\n请选择下面的安装选项:",
"install_button": "安装 FFmpeg",
"manual_guide": "手动指南",
"installation_failed": "FFmpeg 安装遇到问题。"
"installation_failed": "FFmpeg 安装遇到问题。",
"already_installed": "FFmpeg 已安装!",
"installation_complete": "安装完成。您可以关闭此对话框并继续使用 YTSage。",
"installing": "正在安装 FFmpeg... 请稍候",
"install_success": "FFmpeg 已成功安装!",
"installation_complete_close": "安装完成。您现在可以关闭此对话框并继续使用 YTSage。",
"try_manual": "请尝试使用手动安装指南。"
},
"ytdlp_setup": {
"required_title": "需要设置 yt-dlp",
+2 -1
View File
@@ -87,6 +87,7 @@ class ConfigManager:
"check_app_updates": True,
"check_beta_updates": False,
"last_update_check": 0,
"concurrent_fragments": 1,
"language": "en",
"ytdlp_channel": "stable",
"force_output_format": False,
@@ -94,7 +95,7 @@ class ConfigManager:
"force_audio_format": False,
"preferred_audio_format": "best",
"audio_normalization": False,
"filename_format": "%(title)s_%(resolution)s.%(ext)s",
"filename_format": "%(title)s_%(resolution)s_[%(id)s].%(ext)s",
"cached_versions": {
"ytdlp": {"version": None, "path": None, "last_check": 0, "path_mtime": 0},
"ffmpeg": {"version": None, "path": None, "last_check": 0, "path_mtime": 0},