Merge branch 'beta'
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src="branding\svg\ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
<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 Interface"/>
|
||||||
|
|
||||||
[](https://www.python.org/downloads/)
|
[](https://www.python.org/downloads/)
|
||||||
[](https://pepy.tech/project/ytsage)
|
[](https://pepy.tech/project/ytsage)
|
||||||
@@ -12,25 +12,25 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](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.
|
Download videos in any quality, extract audio, fetch subtitles, and more.
|
||||||
|
|
||||||
### 🌍 README Languages
|
### 🌍 README Languages
|
||||||
|
|
||||||
English: [EN](README.md)
|
English: [EN](../README.md)
|
||||||
| العربية: [AR](readme-translations/README.ar.md)
|
| Arabic: [AR](README.ar.md)
|
||||||
| Deutsch: [DE](readme-translations/README.de.md)
|
| German: [DE](README.de.md)
|
||||||
| Español: [ES](readme-translations/README.es.md)
|
| Spanish: [ES](README.es.md)
|
||||||
| Français: [FR](readme-translations/README.fr.md)
|
| French: [FR](README.fr.md)
|
||||||
| हिन्दी: [HI](readme-translations/README.hi.md)
|
| Hindi: [HI](README.hi.md)
|
||||||
| Bahasa Indonesia: [ID](readme-translations/README.id.md)
|
| Indonesian: [ID](README.id.md)
|
||||||
| Italiano: [IT](readme-translations/README.it.md)
|
| Italian: [IT](README.it.md)
|
||||||
| 日本語: [JA](readme-translations/README.ja.md)
|
| Japanese: [JA](README.ja.md)
|
||||||
| Polski: [PL](readme-translations/README.pl.md)
|
| Polish: [PL](README.pl.md)
|
||||||
| Português: [PT](readme-translations/README.pt.md)
|
| Portuguese: [PT](README.pt.md)
|
||||||
| Русский: [RU](readme-translations/README.ru.md)
|
| Russian: [RU](README.ru.md)
|
||||||
| Türkçe: [TR](readme-translations/README.tr.md)
|
| Turkish: [TR](README.tr.md)
|
||||||
| 中文: [ZH](readme-translations/README.zh.md)
|
| Chinese: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Installation</a> •
|
<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:
|
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
|
- One-click downloads for video, audio, and subtitles
|
||||||
- Advanced features like SponsorBlock, subtitle merging, and playlist selection
|
- 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
|
- Cross-platform support and easy installation
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="features"></a>
|
||||||
@@ -62,16 +62,17 @@ YTSage is designed for users who want a **simple yet powerful YouTube downloader
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Core Features | Advanced Features | Extra Features |
|
| Core Features | Advanced Features | Extra Features |
|
||||||
|-----------------------------------|-----------------------------------------|------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Format Table | 🚫 SponsorBlock Integration | 🎞️ FPS/HDR Display |
|
| 🎥 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 |
|
| ✨ Simple UI | 💾 Save Description & Thumbnail | 🛠️ FFmpeg/yt-dlp/Deno Detection |
|
||||||
| 📋 Playlist Support & Selector | 🚀 Speed Limiter | ⚙️ Custom Commands |
|
| 📋 Playlist Support & Selector | 🚀 Speed Limiter | ⚙️ Custom Commands |
|
||||||
| 📑 Embed Chapters | ✂️ Trim Video Sections | 🍪 Login with Cookies |
|
| 📑 Chapter Integration | ✂️ Video Section Trimming | 🍪 Login with Cookies |
|
||||||
| 📜 Download History | 🔄 Release Channel Selection | 🌐 Proxy Support |
|
| 📜 Download History | 🔄 Version Channel Selection | 🌐 Proxy Support |
|
||||||
| 🎚️ Audio Format Conversion | 🎬 Video Format Settings | 🆙 Built-in Updater Tab |
|
| 🎚️ 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>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="installation"></a>
|
||||||
@@ -79,14 +80,14 @@ YTSage is designed for users who want a **simple yet powerful YouTube downloader
|
|||||||
|
|
||||||
### ⚡ Quick Install (Recommended)
|
### ⚡ Quick Install (Recommended)
|
||||||
|
|
||||||
Install YTSage from PyPI:
|
Install YTSage via PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Update an existing installation</summary>
|
<summary>🔄 Update existing installation</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,7 +95,7 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Then launch the app:
|
Then launch the application:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
ytsage
|
||||||
@@ -108,26 +109,26 @@ ytsage
|
|||||||
|
|
||||||
| Format | Description |
|
| Format | Description |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Standard installer |
|
|  | Standard Installer |
|
||||||
|  | With FFmpeg bundled |
|
|  | With FFmpeg Included |
|
||||||
|  | Portable version, no installation required |
|
|  | Portable version, no installation needed |
|
||||||
|  | Portable with FFmpeg, zipped |
|
|  | Portable with FFmpeg, zipped |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Installation Steps</summary>
|
<summary>🛠️ Installation Steps</summary>
|
||||||
|
|
||||||
1. **EXE Installer (`.exe`)**: Double-click the file and follow the setup wizard.
|
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`.
|
2. **Portable Version (`.zip`)**: Extract the archive to your desired location and launch `ytsage.exe`.
|
||||||
3. **FFmpeg Bundled**: Choose the FFmpeg bundled versions if you don't have FFmpeg installed on your system.
|
3. **FFmpeg Included**: Choose versions with FFmpeg included if you don't have FFmpeg installed on your system.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Format | Description |
|
| Format | Description |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Debian package |
|
|  | Debian Package |
|
||||||
|  | AppImage, portable |
|
|  | AppImage, Portable |
|
||||||
|  | RPM package |
|
|  | RPM Package |
|
||||||
|  | Flatpak Bundle |
|
|  | Flatpak Bundle |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -136,7 +137,7 @@ ytsage
|
|||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
@@ -157,45 +158,45 @@ ytsage
|
|||||||
|
|
||||||
| Format | Description |
|
| Format | Description |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Zipped application for Apple Silicon |
|
|  | Zipped Application for Apple Silicon |
|
||||||
|  | Disk image installer for Apple Silicon |
|
|  | Disk Image Installer for Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Installation Steps</summary>
|
<summary>🛠️ Installation Steps</summary>
|
||||||
|
|
||||||
- **DMG Installer (`.dmg`)**: Double-click to mount, then drag `YTSage.app` into your Applications folder.
|
- **DMG Installer (`.dmg`)**: Double-click to mount, then drag `YTSage.app` to your Applications folder.
|
||||||
- **App Archive (`.zip`)**: Extract the zip and move `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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻 Manual Installation from Source</summary>
|
<summary>💻 Manual Source Installation</summary>
|
||||||
|
|
||||||
### 1. Clone the Repository
|
### 1. Clone the repository
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
cd YTSage
|
cd YTSage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Install Dependencies
|
### 2. Install dependencies
|
||||||
|
|
||||||
#### ⚡ With uv
|
#### ⚡ Using uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 Or with standard pip
|
#### 📦 Or using standard pip
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Run the Application
|
### 3. Run the application
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -209,16 +210,16 @@ python -m ytsage.main
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="branding\screenshots\Download-Settings.png" alt="Download Settings" 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>
|
<td><img src="branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Download Settings</em></td>
|
<td align="center"><em>Download Settings</em></td>
|
||||||
<td align="center"><em>Playlist Download</em></td>
|
<td align="center"><em>Playlist Download</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="Audio Format Selection" width="400"/></td>
|
||||||
<td><img src="branding\screenshots\Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Audio Format</em></td>
|
<td align="center"><em>Audio Format</em></td>
|
||||||
@@ -240,16 +241,16 @@ python -m ytsage.main
|
|||||||
- `Video` for video downloads
|
- `Video` for video downloads
|
||||||
- `Audio Only` for audio extraction
|
- `Audio Only` for audio extraction
|
||||||
5. **Choose Options:**
|
5. **Choose Options:**
|
||||||
- Enable subtitles & select language
|
- Enable Subtitles and select language
|
||||||
- Enable subtitle merge
|
- Enable Subtitle Merging
|
||||||
- Save thumbnail
|
- Save Thumbnail
|
||||||
- Remove sponsor segments
|
- Remove Sponsored Segments
|
||||||
- Save description
|
- Save Description
|
||||||
- Embed chapters
|
- Embed Chapters
|
||||||
6. **Select Output Directory**
|
6. **Select Output Directory**
|
||||||
7. **Click "Download"**
|
7. **Click "Download"**
|
||||||
|
|
||||||
> 💡 The default download directory is the user's "Downloads" folder.
|
> 💡 Default download directory is the user's "Downloads" folder.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
@@ -262,81 +263,84 @@ python -m ytsage.main
|
|||||||
4. **Choose desired format/quality**
|
4. **Choose desired format/quality**
|
||||||
5. **Click "Download"**
|
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>
|
||||||
|
|
||||||
<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.
|
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:
|
How to use it:
|
||||||
|
|
||||||
1. Open `Download Settings`.
|
1. Open `Download Settings`.
|
||||||
2. Enable `Generic Mode`.
|
2. Toggle on `Generic Mode`.
|
||||||
3. Paste a supported non-YouTube video or playlist URL.
|
3. Paste a supported video or playlist URL that is not from YouTube.
|
||||||
4. Click `Analyze`.
|
4. Click `Analyze`.
|
||||||
5. Choose a format and download as usual.
|
5. Choose a format and download as usual.
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- Generic Mode only changes URL validation inside YTSage. The target site must still be supported by your installed yt-dlp version.
|
- 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, a login session, a proxy, or extra yt-dlp arguments depending on the extractor.
|
- Some sites require cookies, login sessions, 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.
|
- If a site fails, update yt-dlp from the built-in updater tab first before reporting an issue.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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 Options:** Filter languages and embed subtitles into the video file.
|
||||||
- **Subtitle Merge:** Merge subtitles into the video file for hardcoded subtitles
|
- **Subtitle Merging:** Merge subtitles into the video file for hardcoded/burned-in subtitles.
|
||||||
- **Save Description:** Save the video description as a text file
|
- **Save Description:** Save the video description as a text file.
|
||||||
- **Save Thumbnail:** Save the video thumbnail as an image file
|
- **Save Thumbnail:** Save the video thumbnail as an image file.
|
||||||
- **Embed Chapters:** Embed chapter markers as metadata for compatible video players
|
- **Embed Chapters:** Embed chapter markers as metadata for compatible video players.
|
||||||
- **Remove Sponsor Segments:** Remove sponsor segments from the video using SponsorBlock
|
- **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
|
- **Trim Video:** Download only specific parts of a video by specifying time ranges in `HH:MM:SS` format.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **Speed Limiter:** Limit download speed, e.g., `500K` for 500 KB/s.
|
||||||
- **Save Download Path:** Save the default download path for future downloads. Available in **Download Settings → Download Path**.
|
- **Save Download Path:** Saves 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**.
|
- **Default Video Resolution:** Set your preferred default video resolution for auto-selection (e.g., 1080p, 720p). Available in **Download Settings → Default Video Resolution**.
|
||||||
- **Force Output Format:** Force video downloads into a specific container format such as `mp4`, `webm`, or `mkv`. Available in **Download Settings → Output Format Settings**.
|
- **Default Subtitle Languages:** Set default subtitle languages for auto-selection (comma-separated, e.g., `en,es`). Available in **Download Settings → Default Subtitle Languages**.
|
||||||
- **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**.
|
- **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.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Access and Network</summary>
|
<summary>🌐 Access & Network</summary>
|
||||||
|
|
||||||
- **Login with Cookies:** Login to YouTube using cookies to access private content.
|
- **Login with Cookies:** Log in to YouTube using cookies to access private content.
|
||||||
How to use it:
|
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.
|
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:
|
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)
|
a. Export browser cookies using an extension like [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
||||||
b. Copy the cookies in Netscape format
|
b. Copy cookies in Netscape format
|
||||||
c. Create a file named `cookies.txt` and paste the cookies into it
|
c. Create a file named `cookies.txt` and paste cookies
|
||||||
d. Select the `cookies.txt` file in the app
|
d. Select the `cookies.txt` file in the app
|
||||||
- **Proxy Support:** Use a proxy server for downloads, for example `http://<proxy-server>:<port>`
|
- **Proxy Support:** Use a proxy server for downloads, e.g., `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**.
|
- **Generic Mode:** Allows YTSage to analyze and download from non-YouTube sites supported by yt-dlp. Enable from **Download Settings → Generic Mode**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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:
|
- **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
|
- **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
|
- **FFmpeg Version Checker:** Check your FFmpeg version and open installation guides.
|
||||||
- **Deno Updates:** Check and update the Deno runtime
|
- **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.
|
- **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.
|
- **Download History:** View past downloads with thumbnails and statuses from the **History** button.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
@@ -344,7 +348,7 @@ Notes:
|
|||||||
<details>
|
<details>
|
||||||
<summary>🌍 Localization</summary>
|
<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
|
### Supported Languages
|
||||||
|
|
||||||
@@ -362,13 +366,13 @@ YTSage supports **14 languages** for worldwide accessibility. Select your prefer
|
|||||||
|
|
||||||
| Language | File | Language | File |
|
| Language | File | Language | File |
|
||||||
|----------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 English | [README.md](README.md) | 🇪🇸 Spanish | [README.es.md](readme-translations/README.es.md) |
|
| 🇺🇸 English | [README.md](README.md) | 🇪🇸 Spanish | [README.es.md](README.es.md) |
|
||||||
| 🇸🇦 Arabic | [README.ar.md](readme-translations/README.ar.md) | 🇫🇷 French | [README.fr.md](readme-translations/README.fr.md) |
|
| 🇸🇦 Arabic | [README.ar.md](README.ar.md) | 🇫🇷 French | [README.fr.md](README.fr.md) |
|
||||||
| 🇩🇪 German | [README.de.md](readme-translations/README.de.md) | 🇮🇳 Hindi | [README.hi.md](readme-translations/README.hi.md) |
|
| 🇩🇪 German | [README.de.md](README.de.md) | 🇮🇳 Hindi | [README.hi.md](README.hi.md) |
|
||||||
| 🇮🇩 Indonesian | [README.id.md](readme-translations/README.id.md) | 🇮🇹 Italian | [README.it.md](readme-translations/README.it.md) |
|
| 🇮🇩 Indonesian | [README.id.md](README.id.md) | 🇮🇹 Italian | [README.it.md](README.it.md) |
|
||||||
| 🇯🇵 Japanese | [README.ja.md](readme-translations/README.ja.md) | 🇵🇱 Polish | [README.pl.md](readme-translations/README.pl.md) |
|
| 🇯🇵 Japanese | [README.ja.md](README.ja.md) | 🇵🇱 Polish | [README.pl.md](README.pl.md) |
|
||||||
| 🇧🇷 Portuguese | [README.pt.md](readme-translations/README.pt.md) | 🇷🇺 Russian | [README.ru.md](readme-translations/README.ru.md) |
|
| 🇧🇷 Portuguese | [README.pt.md](README.pt.md) | 🇷🇺 Russian | [README.ru.md](README.ru.md) |
|
||||||
| 🇹🇷 Turkish | [README.tr.md](readme-translations/README.tr.md) | 🇨🇳 Chinese | [README.zh.md](readme-translations/README.zh.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!
|
> 💡 **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>
|
<details>
|
||||||
<summary>Click to view common issues and solutions</summary>
|
<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.
|
- **Format table not appearing:** Update yt-dlp to latest version and switch to nightly yt-dlp.
|
||||||
- **Download fails:** Check your internet connection and ensure the video is available.
|
- **Download failed:** Check your internet connection and ensure the video is available.
|
||||||
- **Specific download errors:**
|
- **Specific Download Errors:**
|
||||||
- **Private videos:** Use cookie authentication to access private content.
|
- **Private Videos:** Use cookie authentication to access private content.
|
||||||
- **Age-restricted content:** Login to YouTube account to view age-restricted videos.
|
- **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.
|
- **Geo-Blocked Videos:** Consider using a VPN to bypass regional restrictions.
|
||||||
- **Removed/deleted videos:** Video is no longer available on YouTube.
|
- **Deleted Videos:** Video is no longer available on YouTube.
|
||||||
- **Live streams:** Live streams cannot be downloaded; wait for the stream to end.
|
- **Live Streams:** Live streams cannot be downloaded; wait for the broadcast to end.
|
||||||
- **Network errors:** Check your internet connection and try again.
|
- **Network Errors:** Check your internet connection and try again.
|
||||||
- **Invalid URLs:** Ensure the URL is correct and from a supported platform.
|
- **Invalid URLs:** Ensure the URL is correct and from a supported platform.
|
||||||
- **Premium content:** Requires YouTube Premium membership.
|
- **Premium Content:** Requires a YouTube Premium subscription.
|
||||||
- **Copyright blocks:** Content is blocked due to copyright restrictions.
|
- **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.
|
- **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.
|
- **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
|
#### 🛡️ 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:**
|
**Why this happens:**
|
||||||
- Antivirus heuristics can misidentify packed executables as suspicious
|
- Antivirus heuristics can mistakenly identify packaged executables as suspicious.
|
||||||
|
|
||||||
**Safe alternatives:**
|
**Safe Alternatives:**
|
||||||
- ✅ **Use pip installation:** `pip install ytsage` (recommended)
|
- ✅ **Use pip install:** `pip install ytsage` (Recommended)
|
||||||
- ✅ **Build from source**: by following this [guide](.github/CI_CD_README.md)
|
- ✅ **Build from Source**: by following this [guide](.github/CI_CD_README.md)
|
||||||
- ✅ **Whitelist the application** in your antivirus software
|
- ✅ **Whitelist the app** in your antivirus software.
|
||||||
|
|
||||||
#### 🍎 macOS: "App is damaged and can’t 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.
|
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:
|
2. **Type the following command** but **do not** press Enter yet. Make sure to include the space at the end:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/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>
|
<a id="sponsor"></a>
|
||||||
## 💖 Sponsor
|
## 💖 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
|
- 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.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="contributing"></a>
|
||||||
## 👥 Contributing
|
## 👥 Contributing
|
||||||
|
|
||||||
We welcome contributions! Here's how you can help:
|
We welcome contributions! Here’s how you can help:
|
||||||
|
|
||||||
1. 🍴 Fork the repository
|
1. 🍴 Fork the repository
|
||||||
2. 🌿 Create your feature branch:
|
2. 🌿 Create your feature branch:
|
||||||
@@ -462,8 +466,8 @@ We welcome contributions! Here's how you can help:
|
|||||||
|
|
||||||
### 🌍 Contributing Translations
|
### 🌍 Contributing Translations
|
||||||
|
|
||||||
- Update the matching localized README file (for example `readme-translations/README.es.md`)
|
- Update the relevant localized README file (e.g., `readme-translations/README.fr.md`)
|
||||||
- Keep app strings in sync by editing `ytsage/languages/<code>.json`
|
- Keep app strings synced by editing `ytsage/languages/<code>.json`
|
||||||
- If your language is missing, start from `README.md` and create `README.<code>.md`
|
- If your language is missing, start from `README.md` and create `README.<code>.md`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -484,11 +488,11 @@ YTSage/
|
|||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Linux build workflow
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # macOS build workflow
|
||||||
│ │ │── build-windows.yml # Windows 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
|
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # App icons
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Documentation screenshots
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # SVG assets
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # License file
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Project metadata and dependencies
|
||||||
@@ -496,8 +500,8 @@ YTSage/
|
|||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Python dependencies (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Source package
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Runtime assets
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # App icons
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Sound files
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Localization files
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Arabic translation
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # German translation
|
||||||
@@ -510,13 +514,13 @@ YTSage/
|
|||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Utility functions
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # UI components
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py # GUI package init
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Main app window
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Utility modules
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py # Utils package init
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Config management
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Logging utilities
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Package entry point
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 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">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Core Components</th></tr>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Libraries & Frameworks</th></tr>
|
<tr class="section"><th colspan="2">Libraries & Frameworks</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -582,7 +586,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">packaging</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Version & Package Handling</td>
|
<td>Version/Package Management</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
<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
|
## ⚠️ 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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "ytsage"
|
name = "ytsage"
|
||||||
version = "5.0.3"
|
version = "5.0.10b"
|
||||||
description = "Modern YouTube downloader with a clean PySide6 interface."
|
description = "Modern YouTube downloader with a clean PySide6 interface."
|
||||||
authors = [
|
authors = [
|
||||||
{ name = "oop7", email = "oop7_support@proton.me" },
|
{ name = "oop7", email = "oop7_support@proton.me" },
|
||||||
|
|||||||
+281
-275
@@ -12,33 +12,33 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**أداة تنزيل حديثة من YouTube بواجهة PySide6 نظيفة.**
|
**برنامج تحميل من يوتيوب عصري بواجهة PySide6 أنيقة.**
|
||||||
قم بتنزيل مقاطع الفيديو بأي جودة، واستخرج الصوت، واجلب الترجمات، والمزيد.
|
قم بتحميل الفيديوهات بأي جودة، استخراج الصوت، جلب الترجمات، والمزيد.
|
||||||
|
|
||||||
### 🌍 اقرأني اللغات
|
### 🌍 لغات README
|
||||||
|
|
||||||
الإنجليزية: [EN](../README.md)
|
الإنجليزية: [EN](../README.md)
|
||||||
| العربية: [AR](README.ar.md)
|
| العربية: [AR](README.ar.md)
|
||||||
| الألمانية: [DE](README.de.md)
|
| الألمانية: [DE](README.de.md)
|
||||||
| الاسبانية: [ES](README.es.md)
|
| الإسبانية: [ES](README.es.md)
|
||||||
| الفرنسية: [FR](README.fr.md)
|
| الفرنسية: [FR](README.fr.md)
|
||||||
| الهندية: [HI](README.hi.md)
|
| الهندية: [HI](README.hi.md)
|
||||||
| البهاسا الإندونيسية: [ID](README.id.md)
|
| الإندونيسية: [ID](README.id.md)
|
||||||
| إيطاليانو: [IT](README.it.md)
|
| الإيطالية: [IT](README.it.md)
|
||||||
| العنوان: [JA](README.ja.md)
|
| اليابانية: [JA](README.ja.md)
|
||||||
| بولسكي: [PL](README.pl.md)
|
| البولندية: [PL](README.pl.md)
|
||||||
| البرتغالية: [PT](README.pt.md)
|
| البرتغالية: [PT](README.pt.md)
|
||||||
| Русский: [RU](README.ru.md)
|
| الروسية: [RU](README.ru.md)
|
||||||
| التركية: [TR](README.tr.md)
|
| التركية: [TR](README.tr.md)
|
||||||
| 中文: [ZH](README.zh.md)
|
| الصينية: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">التثبيت</a> •
|
<a href="#installation">التثبيت</a> •
|
||||||
<a href="#features">المميزات</a> •
|
<a href="#features">المميزات</a> •
|
||||||
<a href="#usage">الاستخدام</a> •
|
<a href="#usage">الاستخدام</a> •
|
||||||
<a href="#screenshots">لقطات الشاشة</a> •
|
<a href="#screenshots">لقطات الشاشة</a> •
|
||||||
<a href="#troubleshooting">استكشاف الأخطاء وإصلاحها</a> •
|
<a href="#troubleshooting">استكشاف الأخطاء</a> •
|
||||||
<a href="#sponsor">Sponsor</a> •
|
<a href="#sponsor">الدعم</a> •
|
||||||
<a href="#contributing">المساهمة</a>
|
<a href="#contributing">المساهمة</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -49,44 +49,45 @@
|
|||||||
<a id="why-ytsage"></a>
|
<a id="why-ytsage"></a>
|
||||||
## ❓ لماذا YTSage؟
|
## ❓ لماذا YTSage؟
|
||||||
|
|
||||||
تم تصميم YTSage للمستخدمين الذين يريدون **برنامج تنزيل YouTube بسيطًا وقويًا**. على عكس الأدوات الأخرى، فهو يقدم:
|
تم تصميم YTSage للمستخدمين الذين يريدون **أداة تحميل يوتيوب بسيطة لكن قوية**. على عكس الأدوات الأخرى، فإنه يوفر:
|
||||||
|
|
||||||
- واجهة PySide6 نظيفة وحديثة
|
- واجهة PySide6 عصرية ونظيفة
|
||||||
- التنزيلات بنقرة واحدة للفيديو والصوت والترجمات
|
- تحميل بنقرة واحدة للفيديو والصوت والترجمات
|
||||||
- ميزات متقدمة مثل SponsorBlock ودمج الترجمة واختيار قائمة التشغيل
|
- ميزات متقدمة مثل SponsorBlock، دمج الترجمات، واختيار قوائم التشغيل
|
||||||
- الوضع العام الاختياري للمواقع التي تدعم yt-dlp خارج YouTube
|
- وضع عام (Generic Mode) اختياري للمواقع التي يدعمها yt-dlp بخلاف يوتيوب
|
||||||
- دعم عبر الأنظمة الأساسية وسهولة التثبيت
|
- دعم منصات متعددة وتثبيت سهل
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="features"></a>
|
||||||
## ✨المميزات
|
## ✨ المميزات
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| الميزات الأساسية | الميزات المتقدمة | ميزات إضافية |
|
| الميزات الأساسية | الميزات المتقدمة | ميزات إضافية |
|
||||||
|-----------------------------------|--------------------------------------------------------|-----|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 تنسيق الجدول | 🚫 تكامل SponsorBlock | 🎞️ عرض FPS/HDR |
|
| 🎥 جدول الصيغ | 🚫 تكامل SponsorBlock | 🎞️ عرض FPS/HDR |
|
||||||
| 🎵 استخراج الصوت | 📝 تحديد ودمج الترجمة المتعددة | 🔄 التحديث التلقائي yt-dlp |
|
| 🎵 استخراج الصوت | 📝 اختيار ودمج الترجمات | 🔄 تحديث تلقائي لـ yt-dlp |
|
||||||
| ✨ واجهة مستخدم بسيطة | 💾 حفظ الوصف والصورة المصغرة | 🛠️ كشف FFmpeg/yt-dlp/Deno |
|
| ✨ واجهة مستخدم بسيطة | 💾 حفظ الوصف والصورة المصغرة | 🛠️ اكتشاف FFmpeg/yt-dlp/Deno |
|
||||||
| 📋 دعم قائمة التشغيل والمحدد | 🚀 محدد السرعة | ⚙️ أوامر مخصصة |
|
| 📋 دعم ومحدد قوائم التشغيل | 🚀 محدد السرعة | ⚙️ أوامر مخصصة |
|
||||||
| 📑 تضمين الفصول | ✂️ تقليم أقسام الفيديو | 🍪 تسجيل الدخول باستخدام ملفات تعريف الارتباط |
|
| 📑 دمج الفصول | ✂️ قص أجزاء الفيديو | 🍪 تسجيل الدخول بالكوكيز |
|
||||||
| 📜 تحميل التاريخ | 🔄 إطلاق اختيار القناة | 🌐 دعم الوكيل |
|
| 📜 سجل التحميلات | 🔄 اختيار قناة الإصدار | 🌐 دعم البروكسي |
|
||||||
| 🎚️ تحويل تنسيق الصوت | 🎬 إعدادات تنسيق الفيديو | 🆙 علامة تبويب التحديث المدمجة |
|
| 🎚️ تحويل صيغ الصوت | 🎬 إعدادات صيغ الفيديو | 🆙 تبويب تحديث مدمج |
|
||||||
| 🌍 الوضع العام | 🔊 تسوية الصوت (EBU R128) | 🌍 التعريب بـ 14 لغة |
|
| 🌍 الوضع العام | 🔊 تطبيع الصوت (EBU R128) | 🌍 دعم 14 لغة |
|
||||||
|
| 💾 تصدير قوائم التشغيل | ⚙️ الجودة والترجمات الافتراضية | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="installation"></a>
|
||||||
## 🚀التركيب
|
## 🚀 التثبيت
|
||||||
|
|
||||||
### ⚡ التثبيت السريع (موصى به)
|
### ⚡ التثبيت السريع (موصى به)
|
||||||
|
|
||||||
تثبيت YTSage من PyPI:
|
تثبيت YTSage عبر PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 تحديث التثبيت الحالي</summary>
|
<summary>🔄 تحديث نسخة مثبتة</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -100,73 +101,73 @@ pip install --upgrade ytsage
|
|||||||
ytsage
|
ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 📦 الملفات التنفيذية المعدة مسبقًا
|
### 📦 حزم جاهزة للتشغيل
|
||||||
|
|
||||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
> [👉 تحميل أحدث إصدار](https://github.com/oop7/YTSage/releases/latest)
|
||||||
|
|
||||||
#### 🪟 ويندوز
|
#### 🪟 Windows
|
||||||
|
|
||||||
| تنسيق | الوصف |
|
| الصيغة | الوصف |
|
||||||
|--------|------------|
|
|--------|-------------|
|
||||||
|  | المثبت القياسي |
|
|  | مثبت قياسي |
|
||||||
|  | مع FFmpeg المجمعة |
|
|  | مع FFmpeg مدمج |
|
||||||
|  | نسخة محمولة، لا تحتاج إلى تثبيت |
|
|  | نسخة محمولة، لا تحتاج لتثبيت |
|
||||||
|  | محمول مع FFmpeg، مضغوط |
|
|  | محمولة مع FFmpeg، مضغوطة |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ خطوات التثبيت</summary>
|
<summary>🛠️ خطوات التثبيت</summary>
|
||||||
|
|
||||||
1. **مثبت EXE (`.exe`)**: انقر نقرًا مزدوجًا فوق الملف واتبع معالج الإعداد.
|
1. **مثبت EXE (`.exe`)**: انقر نقرًا مزدوجًا على الملف واتبع معالج التثبيت.
|
||||||
2. **النسخة المحمولة (`.zip`)**: قم باستخراج الأرشيف إلى الموقع المطلوب وتشغيل `ytsage.exe`.
|
2. **النسخة المحمولة (`.zip`)**: استخرج الملف في أي مكان وشغل `ytsage.exe`.
|
||||||
3. **FFmpeg Bundled**: اختر إصدارات FFmpeg المجمعة إذا لم يكن FFmpeg مثبتًا على نظامك.
|
3. **FFmpeg المدمج**: اختر النسخة التي تحتوي على FFmpeg إذا لم يكن مثبتًا على نظامك.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 لينكس
|
#### 🐧 Linux
|
||||||
|
|
||||||
| تنسيق | الوصف |
|
| الصيغة | الوصف |
|
||||||
|--------|------------|
|
|--------|-------------|
|
||||||
|  | حزمة دبيان |
|
|  | حزمة Debian |
|
||||||
|  | صورة التطبيق المحمولة |
|
|  | AppImage، محمولة |
|
||||||
|  | حزمة دورة في الدقيقة |
|
|  | حزمة RPM |
|
||||||
|  | حزمة فلاتباك |
|
|  | Flatpak Bundle |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ خطوات التثبيت</summary>
|
<summary>🛠️ خطوات التثبيت</summary>
|
||||||
|
|
||||||
- **ديب (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
sudo dpkg -i ytsage_*.deb
|
||||||
sudo apt-get install -f # Fix missing dependencies if any
|
sudo apt-get install -f # لإصلاح الاعتمادات الناقصة إذا لزم الأمر
|
||||||
```
|
```
|
||||||
- **عدد الدورات في الدقيقة (`.rpm`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **صورة التطبيق (`.AppImage`)**:
|
- **AppImage (`.AppImage`)**:
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **Flatpak**: اتبع التعليمات الموجودة على Flathub أو قم بتشغيل:
|
- **Flatpak**: اتبع التعليمات على Flathub أو شغل:
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🍎 ماك
|
#### 🍎 macOS
|
||||||
|
|
||||||
| تنسيق | الوصف |
|
| الصيغة | الوصف |
|
||||||
|--------|------------|
|
|--------|-------------|
|
||||||
|  | تطبيق مضغوط لأبل سيليكون |
|
|  | تطبيق مضغوط لـ Apple Silicon |
|
||||||
|  | مثبت صورة القرص لـ Apple Silicon |
|
|  | صورة قرص لـ Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ خطوات التثبيت</summary>
|
<summary>🛠️ خطوات التثبيت</summary>
|
||||||
|
|
||||||
- **مثبت DMG (`.dmg`)**: انقر نقرًا مزدوجًا للتثبيت، ثم اسحب `YTSage.app` إلى مجلد التطبيقات.
|
- **مثبت DMG (`.dmg`)**: انقر نقرًا مزدوجًا لفتح القرص، ثم اسحب `YTSage.app` إلى مجلد Applications.
|
||||||
- **أرشيف التطبيقات (`.zip`)**: استخرج الملف المضغوط وانقل `YTSage.app` إلى مجلد التطبيقات.
|
- **تطبيق مضغوط (`.zip`)**: استخرج الملف وانقل `YTSage.app` إلى مجلد Applications.
|
||||||
|
|
||||||
*ملاحظة: إذا واجهت خطأ "التطبيق تالف"، راجع [macOS troubleshooting section](#troubleshooting) أدناه.*
|
*ملاحظة: إذا واجهت خطأ "التطبيق تالف"، راجع قسم استكشاف الأخطاء لنظام macOS أدناه.*
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -174,28 +175,28 @@ ytsage
|
|||||||
<details>
|
<details>
|
||||||
<summary>💻 التثبيت اليدوي من المصدر</summary>
|
<summary>💻 التثبيت اليدوي من المصدر</summary>
|
||||||
|
|
||||||
### 1. استنساخ المستودع
|
### 1. نسخ المستودع
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
cd YTSage
|
cd YTSage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. تثبيت التبعيات
|
### 2. تثبيت الاعتمادات
|
||||||
|
|
||||||
#### ⚡ مع الأشعة فوق البنفسجية
|
#### ⚡ باستخدام uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 أو بالنقطة القياسية
|
#### 📦 أو باستخدام pip العادي
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. قم بتشغيل التطبيق
|
### 3. تشغيل التطبيق
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -209,325 +210,329 @@ python -m ytsage.main
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
<td><img src="../branding/screenshots/Download-Settings.png" alt="إعدادات التحميل" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="تحميل قوائم التشغيل" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>إعدادات التحميل</em></td>
|
<td align="center"><em>إعدادات التحميل</em></td>
|
||||||
<td align="center"><em>تنزيل قائمة التشغيل</em></td>
|
<td align="center"><em>تحميل قوائم التشغيل</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="اختيار صيغة الصوت" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="خيارات مخصصة" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>تنسيق الصوت</em></td>
|
<td align="center"><em>صيغة الصوت</em></td>
|
||||||
<td align="center"><em>خيارات مخصصة</em></td>
|
<td align="center"><em>خيارات مخصصة</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="usage"></a>
|
||||||
## 📖 الاستخدام
|
## 📖 الاستخدام
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 الاستخدام الأساسي</summary>
|
<summary>🎯 الاستخدام الأساسي</summary>
|
||||||
|
|
||||||
1. ** إطلاق YTSage **
|
1. **شغل YTSage**
|
||||||
2. **الصق عنوان URL لموقع YouTube** (أو استخدم الزر "لصق عنوان URL")
|
2. **الصق رابط يوتيوب** (أو استخدم زر "Paste URL")
|
||||||
3. **انقر على "تحليل"**
|
3. **اضغط على "Analyze"**
|
||||||
4. **حدد التنسيق:**
|
4. **اختر الصيغة:**
|
||||||
- `Video` لتنزيل الفيديو
|
- `Video` للتحميلات المرئية
|
||||||
- `Audio Only` لاستخراج الصوت
|
- `Audio Only` لاستخراج الصوت فقط
|
||||||
5. **اختر الخيارات:**
|
5. **اختر الخيارات:**
|
||||||
- تمكين الترجمة واختيار اللغة
|
- تفعيل الترجمات واختيار اللغة
|
||||||
- تمكين دمج الترجمة
|
- تفعيل دمج الترجمات
|
||||||
- حفظ الصورة المصغرة
|
- حفظ الصورة المصغرة
|
||||||
- إزالة شرائح الراعي
|
- حذف المقاطع الإعلانية (Sponsor segments)
|
||||||
- حفظ الوصف
|
- حفظ الوصف
|
||||||
- تضمين الفصول
|
- دمج الفصول (Chapters)
|
||||||
6. **حدد دليل المخرجات**
|
6. **اختر مجلد الحفظ**
|
||||||
7. **انقر على "تنزيل"**
|
7. **اضغط على "Download"**
|
||||||
|
|
||||||
> 💡 دليل التنزيل الافتراضي هو مجلد "التنزيلات" الخاص بالمستخدم.
|
> 💡 مجلد التحميل الافتراضي هو مجلد "Downloads" للمستخدم.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 تنزيل قائمة التشغيل</summary>
|
<summary>📋 تحميل قائمة تشغيل (Playlist)</summary>
|
||||||
|
|
||||||
1. **لصق عنوان URL لقائمة التشغيل**
|
1. **الصق رابط قائمة التشغيل**
|
||||||
2. **انقر على "تحليل"**
|
2. **اضغط على "Analyze"**
|
||||||
3. **حدد مقاطع الفيديو من محدد قائمة التشغيل (اختياري، الإعداد الافتراضي هو الكل)**
|
3. **اختر الفيديوهات من محدد القائمة (اختياري، يتم اختيار الكل تلقائيًا)**
|
||||||
4. **اختر التنسيق/الجودة المطلوبة**
|
4. **اختر الصيغة/الجودة المطلوبة**
|
||||||
5. **انقر على "تنزيل"**
|
5. **اضغط على "Download"**
|
||||||
|
|
||||||
> 💡 يتعامل التطبيق تلقائيًا مع قائمة انتظار التنزيل
|
> 💡 التطبيق يتعامل مع طابور التحميل تلقائيًا، ويمكنك تصدير مدخلات القائمة كملفات `.txt` أو `.csv` أو `.m3u` أو `.json`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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`.
|
1. افتح `Download Settings`.
|
||||||
2. تفعيل `Generic Mode`.
|
2. فعل `Generic Mode`.
|
||||||
3. الصق عنوان URL لفيديو أو قائمة تشغيل مدعومة غير تابعة لـ YouTube.
|
3. الصق رابط فيديو أو قائمة تشغيل مدعومة غير يوتيوب.
|
||||||
4. اضغط على `Analyze`.
|
4. اضغط على `Analyze`.
|
||||||
5. اختر التنسيق وقم بتنزيله كالمعتاد.
|
5. اختر الصيغة وحمل كالمعتاد.
|
||||||
|
|
||||||
ملاحظات:
|
ملاحظات:
|
||||||
|
|
||||||
- الوضع العام يغير فقط التحقق من صحة عنوان URL داخل YTSage. يجب أن يظل الموقع المستهدف مدعومًا بإصدار yt-dlp المثبت لديك.
|
- الوضع العام يغير فقط التحقق من الرابط داخل YTSage. يجب أن يكون الموقع مدعومًا من نسخة yt-dlp المثبتة لديك.
|
||||||
- تتطلب بعض المواقع ملفات تعريف الارتباط، أو جلسة تسجيل دخول، أو وكيلًا، أو وسائط yt-dlp إضافية اعتمادًا على المستخرج.
|
- بعض المواقع تتطلب كوكيز، تسجيل دخول، بروكسي أو وسائط yt-dlp إضافية حسب نوع الموقع.
|
||||||
- إذا فشل أحد المواقع، فقم بتحديث yt-dlp أولاً من علامة تبويب المحدث المضمنة قبل الإبلاغ عن المشكلة.
|
- إذا فشل موقع ما، حدث yt-dlp أولاً من تبويب التحديث المدمج قبل الإبلاغ عن المشكلة.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰 خيارات الوسائط والتنزيل</summary>
|
<summary>🧰 خيارات الميديا والتحميل</summary>
|
||||||
|
|
||||||
- **خيارات الترجمة:** تصفية اللغات وتضمين الترجمة في ملف الفيديو
|
- **خيارات الترجمة:** تصفية اللغات وتضمين الترجمات في ملف الفيديو.
|
||||||
- **دمج الترجمة:** دمج الترجمات في ملف الفيديو للحصول على ترجمات مضمنة
|
- **دمج الترجمات:** دمج الترجمات داخل ملف الفيديو لتكون ترجمة مدمجة (Hardcoded).
|
||||||
- **حفظ الوصف:** احفظ وصف الفيديو كملف نصي
|
- **حفظ الوصف:** حفظ وصف الفيديو كملف نصي.
|
||||||
- **حفظ الصورة المصغرة:** احفظ الصورة المصغرة للفيديو كملف صورة
|
- **حفظ الصورة المصغرة:** حفظ صورة الفيديو كملف صورة.
|
||||||
- **تضمين الفصول:** تضمين علامات الفصل كبيانات وصفية لمشغلات الفيديو المتوافقة
|
- **دمج الفصول:** تضمين علامات الفصول كبيانات وصفية لمشغلات الفيديو المتوافقة.
|
||||||
- **إزالة شرائح الجهات الراعية:** قم بإزالة شرائح الجهات الراعية من الفيديو باستخدام SponsorBlock
|
- **حذف مقاطع الرعاة:** حذف الأجزاء الإعلانية من الفيديو باستخدام SponsorBlock.
|
||||||
- **قص الفيديو:** قم بتنزيل أجزاء محددة فقط من الفيديو عن طريق تحديد نطاقات زمنية بتنسيق `HH:MM:SS`
|
- **قص الفيديو:** تحميل أجزاء محددة فقط من الفيديو عن طريق تحديد أوقات البداية والنهاية بصيغة `HH:MM:SS`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️ إعدادات الإخراج والملف</summary>
|
<summary>⚙️ إعدادات الإخراج والملفات</summary>
|
||||||
|
|
||||||
- **محدد السرعة:** حدد سرعة التنزيل، على سبيل المثال `500K` لـ 500 كيلو بايت/ثانية
|
- **محدد السرعة:** تحديد سرعة التحميل، مثلاً `500K` لـ 500 كيلوبايت/ثانية.
|
||||||
- **حفظ مسار التنزيل:** احفظ مسار التنزيل الافتراضي للتنزيلات المستقبلية. متوفر في **إعدادات التنزيل → مسار التنزيل**.
|
- **حفظ مسار التحميل:** يحفظ مسار التحميل الافتراضي للتحميلات المستقبلية. متاح في **Download Settings → Download Path**.
|
||||||
- **تنسيق اسم ملف الإخراج:** قم بتخصيص تنسيق اسم ملف الإخراج باستخدام متغيرات مثل `%(title)s`، `%(uploader)s`، و`%(resolution)s`. متوفر في **إعدادات التنزيل → تنسيق اسم الملف**.
|
- **دقة الفيديو الافتراضية:** حدد دقة الفيديو المفضلة للاختيار التلقائي (مثل 1080p أو 720p). متاح في **Download Settings → Default Video Resolution**.
|
||||||
- **تنسيق الإخراج الإجباري:** فرض تنزيلات الفيديو في تنسيق حاوية محدد مثل `mp4` أو `webm` أو `mkv`. متوفر في **إعدادات التنزيل ← إعدادات تنسيق الإخراج**.
|
- **لغات الترجمة الافتراضية:** حدد لغات الترجمة للاختيار التلقائي (مفصولة بفواصل، مثل `ar,en`). متاح في **Download Settings → Default Subtitle Languages**.
|
||||||
- **تحويل تنسيق الصوت:** تحويل التنزيلات الصوتية فقط إلى التنسيقات المفضلة مثل `AAC`، `MP3`، `FLAC`، `WAV`، `Opus`، `M4A`، `Vorbis` أو `Best`. متوفر في **إعدادات التنزيل → إعدادات تنسيق الصوت**.
|
- **صيغة اسم الملف:** تخصيص صيغة اسم الملف باستخدام متغيرات مثل `%(title)s` و `%(uploader)s` و `%(playlist_index)s` و `%(resolution)s`. متاح في **Download Settings → Filename Format**.
|
||||||
- **تطبيع الصوت:** توحيد مستوى الصوت للتنزيلات الصوتية فقط باستخدام EBU R128.
|
- **فرض صيغة الإخراج:** فرض تحميل الفيديو بصيغة محددة مثل `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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 الوصول والشبكة</summary>
|
<summary>🌐 الوصول والشبكة</summary>
|
||||||
|
|
||||||
- **تسجيل الدخول باستخدام ملفات تعريف الارتباط:** قم بتسجيل الدخول إلى YouTube باستخدام ملفات تعريف الارتباط للوصول إلى المحتوى الخاص.
|
- **تسجيل الدخول بالكوكيز:** سجل الدخول ليوتيوب باستخدام الكوكيز للوصول للمحتوى الخاص.
|
||||||
كيفية استخدامه:
|
كيفية الاستخدام:
|
||||||
1. **موصى به:** استخدم خيار `Extract cookies from browser` المدمج في التطبيق، ثم حدد المتصفح الخاص بك وملفًا شخصيًا بشكل اختياري.
|
1. **موصى به:** استخدم خيار `Extract cookies from browser` المدمج في التطبيق، ثم اختر المتصفح والملف الشخصي.
|
||||||
2. بدلاً من ذلك، قم باستخراج ملفات تعريف الارتباط يدويًا:
|
2. بدلاً من ذلك، استخرج الكوكيز يدويًا:
|
||||||
أ. قم بتصدير ملفات تعريف الارتباط من متصفحك باستخدام ملحق مثل [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
أ. صدر الكوكيز من متصفحك باستخدام إضافة مثل [cookie-editor](https://github.com/moustachauve/cookie-editor)
|
||||||
ب. انسخ ملفات تعريف الارتباط بتنسيق Netscape
|
ب. انسخ الكوكيز بصيغة Netscape
|
||||||
ج. أنشئ ملفًا باسم `cookies.txt` والصق ملفات تعريف الارتباط فيه
|
ج. أنشئ ملفًا باسم `cookies.txt` والصق الكوكيز فيه
|
||||||
د. حدد الملف `cookies.txt` في التطبيق
|
د. اختر ملف `cookies.txt` في التطبيق
|
||||||
- **دعم الوكيل:** استخدم خادمًا وكيلاً للتنزيلات، على سبيل المثال `http://<proxy-server>:<port>`
|
- **دعم البروكسي:** استخدم خادم بروكسي للتحميلات، مثلاً `http://<proxy-server>:<port>`
|
||||||
- **الوضع العام:** اسمح لـ YTSage بالتحليل والتنزيل من مواقع غير تابعة لـ YouTube والتي يدعمها yt-dlp. قم بتمكينه من **إعدادات التنزيل → الوضع العام**.
|
- **الوضع العام:** يسمح لـ YTSage بتحليل والتحميل من المواقع غير يوتيوب التي يدعمها yt-dlp. فعله من **Download Settings → Generic Mode**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ الأدوات والصيانة</summary>
|
<summary>🛠️ الأدوات والصيانة</summary>
|
||||||
|
|
||||||
- **الأوامر المخصصة:** الوصول إلى ميزات yt-dlp المتقدمة عبر وسيطات سطر الأوامر
|
- **أوامر مخصصة:** الوصول لميزات yt-dlp المتقدمة عبر وسائط موجه الأوامر.
|
||||||
- **علامة تبويب التحديث:** إدارة أدوات التحديث المضمنة من مكان واحد في الخيارات المخصصة:
|
- **تبويب التحديث:** إدارة أدوات التحديث من مكان واحد في الخيارات المخصصة:
|
||||||
- **تحديثات yt-dlp:** تحقق من وجود تحديثات وقم بالتبديل بين قنوات الإصدار الثابت وقنوات الإصدار الليلي
|
- **تحديثات yt-dlp:** التحقق من التحديثات والتبديل بين القناة المستقرة (Stable) والليلية (Nightly).
|
||||||
- **مدقق إصدار FFmpeg:** تحقق من إصدار FFmpeg الخاص بك وافتح أدلة التثبيت
|
- **فاحص نسخة FFmpeg:** التحقق من نسخة FFmpeg وعرض أدلة التثبيت.
|
||||||
- **تحديثات Deno:** التحقق من وقت تشغيل Deno وتحديثه
|
- **تحديثات Deno:** التحقق وتحديث محرك Deno.
|
||||||
- **اكتشاف FFmpeg/yt-dlp/Deno:** اكتشاف مسارات وإصدارات FFmpeg وyt-dlp وDeno تلقائيًا من مربع الحوار "حول".
|
- **اكتشاف FFmpeg/yt-dlp/Deno:** يكتشف تلقائيًا المسارات والنسخ لـ FFmpeg و yt-dlp و Deno من نافذة "About".
|
||||||
- **سجل التنزيلات:** اعرض التنزيلات السابقة باستخدام الصور المصغرة والحالات من زر **السجل**.
|
- **سجل التحميلات:** عرض التحميلات السابقة مع الصور المصغرة والحالة من زر **History**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 التعريب</summary>
|
<summary>🌍 الترجمة</summary>
|
||||||
|
|
||||||
يدعم YTSage **14 لغة** لسهولة الوصول إليها في جميع أنحاء العالم. اختر لغتك المفضلة من **خيارات مخصصة → اللغة**.
|
يدعم YTSage **14 لغة** للوصول العالمي. اختر لغتك المفضلة من **Custom Options → Language**.
|
||||||
|
|
||||||
### اللغات المدعومة
|
### اللغات المدعومة
|
||||||
|
|
||||||
| اللغة | الكود | اللغة | الكود |
|
| اللغة | الرمز | اللغة | الرمز |
|
||||||
|----------|------|---------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 إنجليزي | `en` | 🇪🇸 الاسبانية | `es` |
|
| 🇺🇸 الإنجليزية | `en` | 🇪🇸 الإسبانية | `es` |
|
||||||
| 🇸🇦 عربي | `ar` | 🇫🇷 فرنسي | `fr` |
|
| 🇸🇦 العربية | `ar` | 🇫🇷 الفرنسية | `fr` |
|
||||||
| 🇩🇪 ألماني | `de` | 🇮🇳 هندي | `hi` |
|
| 🇩🇪 الألمانية | `de` | 🇮🇳 الهندية | `hi` |
|
||||||
| 🇮🇩 إندونيسي | `id` | 🇮🇹 إيطالي | `it` |
|
| 🇮🇩 الإندونيسية | `id` | 🇮🇹 الإيطالية | `it` |
|
||||||
| 🇯🇵 ياباني | `ja` | 🇵🇱 بولندية | `pl` |
|
| 🇯🇵 اليابانية | `ja` | 🇵🇱 البولندية | `pl` |
|
||||||
| 🇧🇷 برتغالية | `pt` | 🇷🇺 روسي | `ru` |
|
| 🇧🇷 البرتغالية | `pt` | 🇷🇺 الروسية | `ru` |
|
||||||
| 🇹🇷 تركي | `tr` | 🇨🇳 صيني | `zh` |
|
| 🇹🇷 التركية | `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.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.id.md](README.id.md) | 🇮🇹 الإيطالية | [README.it.md](README.it.md) |
|
||||||
| 🇯🇵 ياباني | [README.ja.md](README.ja.md) | 🇵🇱 بولندية | [README.pl.md](README.pl.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.pt.md](README.pt.md) | 🇷🇺 الروسية | [README.ru.md](README.ru.md) |
|
||||||
| 🇹🇷 تركي | [README.tr.md](README.tr.md) | 🇨🇳 صيني | [README.zh.md](README.zh.md) |
|
| 🇹🇷 التركية | [README.tr.md](README.tr.md) | 🇨🇳 الصينية | [README.zh.md](README.zh.md) |
|
||||||
|
|
||||||
> 💡 **هل تريد المساهمة في الترجمة؟** راجع قسم [Contributing](#contributing) لمساعدتنا في إضافة المزيد من اللغات!
|
> 💡 **هل تريد المساعدة في الترجمة؟** راجع قسم [المساهمة](#contributing) لمساعدتنا في إضافة المزيد من اللغات!
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="troubleshooting"></a>
|
||||||
## 🛠️ استكشاف الأخطاء وإصلاحها
|
## 🛠️ استكشاف الأخطاء
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>انقر لعرض المشكلات والحلول الشائعة</summary>
|
<summary>اضغط لعرض المشاكل الشائعة وحلولها</summary>
|
||||||
|
|
||||||
- **تنسيق الجدول لا يتم عرضه:** قم بتحديث yt-dlp إلى الإصدار الأحدث، ثم قم بالتبديل إلى yt-dlp ليلاً.
|
- **جدول الصيغ لا يظهر:** حدث yt-dlp لأحدث نسخة وانتقل للقناة الليلية (Nightly).
|
||||||
- **فشل التنزيل:** تحقق من اتصالك بالإنترنت وتأكد من توفر الفيديو.
|
- **فشل التحميل:** تحقق من اتصال الإنترنت وتأكد أن الفيديو متاح.
|
||||||
- **أخطاء تنزيل محددة:**
|
- **أخطاء تحميل محددة:**
|
||||||
- **مقاطع الفيديو الخاصة:** استخدم مصادقة ملفات تعريف الارتباط للوصول إلى المحتوى الخاص.
|
- **فيديوهات خاصة:** استخدم الكوكيز للوصول للمحتوى الخاص.
|
||||||
- **محتوى مقيد بالفئة العمرية:** قم بتسجيل الدخول إلى حساب YouTube لعرض مقاطع الفيديو المقيدة بالفئة العمرية.
|
- **محتوى مقيد بالعمر:** سجل دخولك ليوتيوب لمشاهدة الفيديوهات المقيدة.
|
||||||
- **مقاطع الفيديو المحظورة جغرافيًا:** فكر في استخدام VPN لتجاوز القيود الإقليمية.
|
- **فيديوهات محظورة جغرافيًا:** استخدم VPN لتجاوز القيود الإقليمية.
|
||||||
- **مقاطع الفيديو المحذوفة/المحذوفة:** لم يعد الفيديو متاحًا على YouTube.
|
- **فيديوهات محذوفة:** الفيديو لم يعد متاحًا على يوتيوب.
|
||||||
- **البث المباشر:** لا يمكن تنزيل البث المباشر؛ انتظر حتى ينتهي الدفق.
|
- **البث المباشر (Live):** لا يمكن تحميل البث المباشر أثناء عرضه؛ انتظر حتى ينتهي.
|
||||||
- **أخطاء الشبكة:** تحقق من اتصالك بالإنترنت وحاول مرة أخرى.
|
- **أخطاء الشبكة:** تحقق من اتصالك وحاول مرة أخرى.
|
||||||
- **عناوين URL غير صالحة:** تأكد من أن عنوان URL صحيح ومن نظام أساسي مدعوم.
|
- **روابط غير صالحة:** تأكد من صحة الرابط وأنه من منصة مدعومة.
|
||||||
- **المحتوى المميز:** يتطلب عضوية YouTube Premium.
|
- **محتوى Premium:** يتطلب اشتراك يوتيوب بريميوم.
|
||||||
- **حظر حقوق الطبع والنشر:** تم حظر المحتوى بسبب قيود حقوق الطبع والنشر.
|
- **حظر حقوق الملكية:** المحتوى محظور بسبب قيود حقوق النشر.
|
||||||
- **فصل ملفات الفيديو والصوت بعد التنزيل:** يحدث هذا عندما يكون FFmpeg مفقودًا أو لم يتم اكتشافه. يتطلب YTSage FFmpeg لدمج تدفقات الفيديو والصوت عالية الجودة.
|
- **ملفات الفيديو والصوت منفصلة بعد التحميل:** يحدث هذا عند فقدان FFmpeg أو عدم اكتشافه. يتطلب YTSage برنامج FFmpeg لدمج مسارات الفيديو والصوت عالية الجودة.
|
||||||
- **الحل:** تأكد من تثبيت FFmpeg وإمكانية الوصول إليه في PATH الخاص بنظامك. بالنسبة لمستخدمي Windows، الخيار الأسهل هو تنزيل الملف `YTSage-v<version>-ffmpeg.exe`، والذي يأتي مرفقًا مع FFmpeg.
|
- **الحل:** تأكد من تثبيت FFmpeg وإضافته لـ PATH النظام. لمستخدمي ويندوز، الخيار الأسهل هو تحميل ملف `YTSage-v<version>-ffmpeg.exe` الذي يأتي مع FFmpeg مدمجًا.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 🛡️ تحذير Windows Defender / مضاد الفيروسات
|
#### 🛡️ تنبيه Windows Defender / الأنتي فيروس
|
||||||
|
|
||||||
قد تقوم بعض برامج مكافحة الفيروسات بوضع علامة على الملفات `.exe` على أنها ملفات إيجابية كاذبة. هذا **قيد معروف** للتطبيقات المجمعة.
|
قد تصنف بعض برامج الحماية ملفات `.exe` كبرمجيات ضارة (False Positive). هذا **عيب معروف** في التطبيقات المحزمة.
|
||||||
|
|
||||||
**لماذا يحدث هذا:**
|
**لماذا يحدث هذا:**
|
||||||
- يمكن للاستدلالات المضادة للفيروسات أن تخطئ في تعريف الملفات التنفيذية المعبأة على أنها مشبوهة
|
- أساليب الكشف في مضادات الفيروسات قد تعتبر الملفات المحزمة مشبوهة خطأً.
|
||||||
|
|
||||||
** البدائل الآمنة: **
|
**البدائل الآمنة:**
|
||||||
- ✅ **استخدم تثبيت النقطة:** `pip install ytsage` (مستحسن)
|
- ✅ **استخدم تثبيت pip:** `pip install ytsage` (موصى به)
|
||||||
- ✅ **البناء من المصدر**: باتباع هذا [guide](../.github/CI_CD_README.md)
|
- ✅ **البناء من المصدر:** باتباع هذا [الدليل](.github/CI_CD_README.md)
|
||||||
- ✅ **أدرج التطبيق في القائمة البيضاء** في برنامج مكافحة الفيروسات لديك
|
- ✅ **إضافة التطبيق للقائمة البيضاء** في برنامج الحماية لديك.
|
||||||
|
|
||||||
#### 🍎 macOS: "التطبيق تالف ولا يمكن فتحه"
|
#### 🍎 macOS: "The app is damaged and can’t be opened"
|
||||||
إذا رأيت هذا الخطأ على نظام التشغيل macOS Sonoma أو الإصدارات الأحدث، فستحتاج إلى إزالة سمة العزل.
|
إذا واجهت هذا الخطأ على macOS Sonoma أو أحدث، يجب عليك إزالة سمة الحجر الصحي.
|
||||||
|
|
||||||
1. **افتح الوحدة الطرفية** (يمكنك العثور عليها باستخدام Spotlight).
|
1. **افتح الـ Terminal** (يمكنك البحث عنه عبر Spotlight).
|
||||||
2. **اكتب الأمر التالي** لكن **لا** تضغط على Enter بعد. تأكد من تضمين المساحة في النهاية:
|
2. **اكتب الأمر التالي** ولكن **لا تضغط** Enter بعد. تأكد من وجود مسافة في النهاية:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
xattr -d com.apple.quarantine
|
||||||
```
|
```
|
||||||
3. **اسحب الملف `YTSage.app`** من نافذة Finder وأفلته مباشرةً في نافذة الوحدة الطرفية. سيؤدي هذا تلقائيًا إلى لصق مسار الملف الصحيح.
|
3. **اسحب ملف `YTSage.app`** من نافذة Finder وأفلته في نافذة الـ Terminal. سيقوم بلصق المسار الصحيح تلقائيًا.
|
||||||
4. **اضغط على Enter** لتشغيل الأمر.
|
4. **اضغط Enter** لتنفيذ الأمر.
|
||||||
5. **حاول فتح YTSage.app مرة أخرى.** من المفترض الآن أن يتم تشغيله بشكل صحيح.
|
5. **حاول فتح YTSage.app مجددًا.** يجب أن يعمل الآن بشكل صحيح.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **مواقع التكوين (متقدمة)**
|
#### **مواقع الإعدادات (للمتقدمين)**
|
||||||
- **ويندوز:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **ماك:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **لينكس:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<a id="sponsor"></a>
|
||||||
## 💖 الراعي
|
## 💖 الدعم
|
||||||
|
|
||||||
إذا كان YTSage يوفر عليك الوقت، ففكر في رعاية المشروع. تساعد الرعاية في تغطية وقت التطوير والاختبار عبر الأنظمة الأساسية والتحسينات المستقبلية.
|
إذا وفر لك YTSage الوقت، يرجى التفكير في دعم المشروع. يساعد الدعم في تغطية وقت التطوير، الاختبار على المنصات المختلفة، والتحسينات المستقبلية.
|
||||||
|
|
||||||
- رعاة GitHub: https://github.com/sponsors/oop7
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- رابط الراعي متاح أيضًا مباشرة داخل التطبيق من مربع الحوار "حول".
|
- رابط الدعم متاح أيضًا داخل التطبيق عبر نافذة "About".
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="contributing"></a>
|
||||||
## 👥 المساهمة
|
## 👥 المساهمة
|
||||||
|
|
||||||
نحن نرحب بالمساهمات! إليك كيف يمكنك المساعدة:
|
نرحب بالمساهمات! إليك كيف يمكنك المساعدة:
|
||||||
|
|
||||||
1. 🍴 شوكة المستودع
|
1. 🍴 عمل Fork للمستودع
|
||||||
2. 🌿 قم بإنشاء فرع الميزات الخاص بك:
|
2. 🌿 إنشاء فرع جديد للميزة:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/AmazingFeature
|
||||||
```
|
```
|
||||||
3. 💾 قم بإجراء التغييرات:
|
3. 💾 حفظ التغييرات:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Add some AmazingFeature'
|
||||||
```
|
```
|
||||||
4. 📤 اضغط على الفرع:
|
4. 📤 رفع التغييرات:
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
git push origin feature/AmazingFeature
|
||||||
```
|
```
|
||||||
5. 🔄 افتح طلب السحب
|
5. 🔄 فتح Pull Request
|
||||||
|
|
||||||
### 🌍 المساهمة بالترجمات
|
### 🌍 المساهمة في الترجمة
|
||||||
|
|
||||||
- قم بتحديث ملف README المترجم المطابق (على سبيل المثال `README.es.md`)
|
- حدث ملف README المترجم (مثل `readme-translations/README.ar.md`)
|
||||||
- حافظ على مزامنة سلاسل التطبيق عن طريق تحرير `ytsage/languages/<code>.json`
|
- حافظ على تزامن نصوص التطبيق بتعديل `ytsage/languages/<code>.json`
|
||||||
- إذا كانت لغتك مفقودة، ابدأ من `README.md` وأنشئ `README.<code>.md`
|
- إذا كانت لغتك غير موجودة، ابدأ من `README.md` وأنشئ ملفًا جديدًا باسم `README.<code>.md`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 هيكل المشروع</summary>
|
<summary>📂 هيكل المشروع</summary>
|
||||||
|
|
||||||
## YTSage - هيكل المشروع
|
## YTSage - هيكل المشروع
|
||||||
|
|
||||||
يصف هذا المستند بنية المجلد المنظم لـ YTSage.
|
يوضح هذا المستند التنظيم الهيكلي لمجلدات YTSage.
|
||||||
|
|
||||||
### 📁 هيكل المشروع
|
### 📁 هيكل المشروع
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # إعدادات GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # نماذج التذاكر
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # نموذج تقرير الأخطاء
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # سير عمل GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # بناء نسخة لينكس
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # بناء نسخة ماك
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # بناء نسخة ويندوز
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # سير عمل الإصدارات
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # توثيق CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # أصول العلامة التجارية (لقطات شاشة، SVG)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # أيقونات التطبيق
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # لقطات شاشة للتوثيق
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # أصول بصيغة SVG
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # ملف الرخصة
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # بيانات المشروع والاعتمادات
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # التوثيق الرئيسي
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # اعتمادات بايثون (للمطورين)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # مجلد الأكواد المصدرية
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # الأصول اللازمة للتشغيل
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # أيقونات التطبيق
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # ملفات صوتية
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # ملفات الترجمة
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # الترجمة العربية
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # الترجمة الألمانية
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # الترجمة الإنجليزية
|
||||||
│ └── ... # Other languages
|
│ └── ... # لغات أخرى
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # المنطق البرمجي الأساسي
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # تكامل Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # وظائف التحميل
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # تكامل FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # وظائف مساعدة
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # تكامل yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # مكونات واجهة المستخدم
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # نافذة التطبيق الرئيسية
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # كلاسات النوافذ الحوارية
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # موديلات مساعدة
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # مدير الإعدادات
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # أداة تسجيل السجلات
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # نقطة دخول الحزمة
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # سكربت التشغيل الرئيسي
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ تاريخ النجوم
|
## ⭐️ سجل النجوم
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## تاريخ النجوم
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -539,65 +544,66 @@ YTSage/
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## 📜 الترخيص
|
## 📜 الرخصة
|
||||||
|
|
||||||
هذا المشروع مرخص بموجب ترخيص MIT - راجع الملف [LICENSE](../LICENSE) للحصول على التفاصيل.
|
هذا المشروع مرخص بموجب رخصة MIT - راجع ملف [LICENSE](LICENSE) لمزيد من التفاصيل.
|
||||||
|
|
||||||
## 🙏 شكر وتقدير
|
## 🙏 شكر وتقدير
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>إظهار الشكر والتقدير</summary>
|
<summary>عرض الشكر والتقدير</summary>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<p>شكرًا جزيلًا لكل من ساهم في هذا المشروع من خلال فتح مشكلة لاقتراح تحسين أو الإبلاغ عن خطأ.</p>
|
<p>شكر كبير لكل من ساهم في هذا المشروع بفتح تذكرة لاقتراح تحسين أو الإبلاغ عن خطأ.</p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr class="section"><th colspan="2">المكونات الأساسية</th></tr>
|
<tr class="section"><th colspan="2">المكونات الأساسية</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||||
<td>تحميل المحرك</td>
|
<td>محرك التحميل</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>معالجة الوسائط</td>
|
<td>معالجة الوسائط</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">دينو</a></td>
|
<td><a href="https://deno.com/">Deno</a></td>
|
||||||
<td>وقت التشغيل للتكامل مع yt-dlp</td>
|
<td>بيئة التشغيل لتكامل yt-dlp</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">المكتبات والأطر</th></tr>
|
<tr class="section"><th colspan="2">المكتبات وإطارات العمل</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>إطار واجهة المستخدم الرسومية</td>
|
<td>إطار عمل الواجهة الرسومية</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">الوسادة</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>معالجة الصور</td>
|
<td>معالجة الصور</td>
|
||||||
</tr>
|
</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>
|
<td>طلبات HTTP</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">التغليف</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>التعامل مع الإصدار والحزمة</td>
|
<td>إدارة الإصدارات والحزم</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">تخفيض السعر</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>عرض تخفيض السعر</td>
|
<td>معالجة Markdown</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>التسجيل</td>
|
<td>تسجيل السجلات</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">الأصول والمساهمون</th></tr>
|
<tr class="section"><th colspan="2">الأصول والمساهمون</th></tr>
|
||||||
<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 by Universfield</a></td>
|
||||||
<td>صوت الإشعارات</td>
|
<td>صوت التنبيه</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">الفيروس185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>مساهم الكود</td>
|
<td>مساهم بالكود</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -605,14 +611,14 @@ YTSage/
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⚠️إخلاء المسؤولية
|
## ⚠️ إخلاء مسؤولية
|
||||||
|
|
||||||
هذه الأداة للاستخدام الشخصي فقط. يرجى احترام شروط خدمة YouTube وحقوق منشئي المحتوى.
|
تُستخدم هذه الأداة للاستخدام الشخصي فقط. يرجى احترام شروط خدمة يوتيوب وحقوق منشئي المحتوى.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
صُنع باستخدام ❤️ بواسطة [oop7](https://github.com/oop7)
|
صنع بـ ❤️ بواسطة [oop7](https://github.com/oop7)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+222
-216
@@ -12,33 +12,33 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Ein moderner YouTube-Downloader mit einer sauberen PySide6-Oberfläche.**
|
**Ein moderner YouTube-Downloader mit einer eleganten PySide6-Benutzeroberfläche.**
|
||||||
Laden Sie Videos in beliebiger Qualität herunter, extrahieren Sie Audio, rufen Sie Untertitel ab und mehr.
|
Downloaden Sie Videos in jeder Qualität, extrahieren Sie Audio, rufen Sie Untertitel ab und vieles mehr.
|
||||||
|
|
||||||
### 🌍 README-Sprachen
|
### 🌍 README-Sprachen
|
||||||
|
|
||||||
Englisch: [EN](../README.md)
|
Englisch: [EN](../README.md)
|
||||||
| Quelle: [AR](README.ar.md)
|
| Arabisch: [AR](README.ar.md)
|
||||||
| Deutsch: [DE](README.de.md)
|
| Deutsch: [DE](README.de.md)
|
||||||
| Spanisch: [ES](README.es.md)
|
| Spanisch: [ES](README.es.md)
|
||||||
| Französisch: [FR](README.fr.md)
|
| Französisch: [FR](README.fr.md)
|
||||||
| Quelle: [HI](README.hi.md)
|
| Hindi: [HI](README.hi.md)
|
||||||
| Bahasa Indonesien: [ID](README.id.md)
|
| Indonesisch: [ID](README.id.md)
|
||||||
| Italienisch: [IT](README.it.md)
|
| Italienisch: [IT](README.it.md)
|
||||||
| 日本語: [JA](README.ja.md)
|
| Japanisch: [JA](README.ja.md)
|
||||||
| Polnisch: [PL](README.pl.md)
|
| Polnisch: [PL](README.pl.md)
|
||||||
| Portugiesisch: [PT](README.pt.md)
|
| Portugiesisch: [PT](README.pt.md)
|
||||||
| Russisch: [RU](README.ru.md)
|
| Russisch: [RU](README.ru.md)
|
||||||
| Türkei: [TR](README.tr.md)
|
| Türkisch: [TR](README.tr.md)
|
||||||
| Quelle: [ZH](README.zh.md)
|
| Chinesisch: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Installation</a> •
|
<a href="#installation">Installation</a> •
|
||||||
<a href="#features">Funktionen</a> •
|
<a href="#features">Funktionen</a> •
|
||||||
<a href="#usage">Verwendung</a> •
|
<a href="#usage">Bedienung</a> •
|
||||||
<a href="#screenshots">Screenshots</a> •
|
<a href="#screenshots">Screenshots</a> •
|
||||||
<a href="#troubleshooting">Fehlerbehebung</a> •
|
<a href="#troubleshooting">Fehlerbehebung</a> •
|
||||||
<a href="#sponsor">Sponsor</a> •
|
<a href="#sponsor">Sponsoren</a> •
|
||||||
<a href="#contributing">Mitwirken</a>
|
<a href="#contributing">Mitwirken</a>
|
||||||
</p>
|
</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:
|
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
|
- Ein-Klick-Downloads für Video, Audio und Untertitel
|
||||||
- Erweiterte Funktionen wie SponsorBlock, Zusammenführen von Untertiteln und Auswahl von Wiedergabelisten
|
- Erweiterte Funktionen wie SponsorBlock, Zusammenführen von Untertiteln und Playlist-Auswahl
|
||||||
- Optionaler generischer Modus für von YT-DLP unterstützte Websites außerhalb von YouTube
|
- Optionaler generischer Modus (Generic Mode) für von yt-dlp unterstützte Seiten außerhalb von YouTube
|
||||||
- Plattformübergreifende Unterstützung und einfache Installation
|
- Plattformübergreifende Unterstützung und einfache Installation
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="features"></a>
|
||||||
@@ -62,31 +62,32 @@ YTSage wurde für Benutzer entwickelt, die einen **einfachen, aber leistungsstar
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Kernfunktionen | Erweiterte Funktionen | Zusätzliche Funktionen |
|
| Basisfunktionen | Erweiterte Funktionen | Zusätzliche Funktionen |
|
||||||
|----------------------------------|--------------------------|------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Tabelle formatieren | 🚫 SponsorBlock-Integration | 🎞️ FPS/HDR-Anzeige |
|
| 🎥 Formattabelle | 🚫 SponsorBlock-Integration | 🎞️ FPS/HDR-Anzeige |
|
||||||
| 🎵 Audioextraktion | 📝 Mehrere Untertitel auswählen und zusammenführen | 🔄 yt-dlp automatisch aktualisieren |
|
| 🎵 Audio-Extraktion | 📝 Untertitel-Auswahl & Merging | 🔄 Automatisches yt-dlp Update |
|
||||||
| ✨ Einfache Benutzeroberfläche | 💾 Beschreibung und Miniaturansicht speichern | 🛠️ FFmpeg/yt-dlp/Deno-Erkennung |
|
| ✨ Einfache Benutzeroberfläche | 💾 Beschreibung & Thumbnail speichern | 🛠️ FFmpeg/yt-dlp/Deno Erkennung |
|
||||||
| 📋 Playlist-Unterstützung und -Auswahl | 🚀 Geschwindigkeitsbegrenzer | ⚙️ Benutzerdefinierte Befehle |
|
| 📋 Playlist-Support & Selector | 🚀 Geschwindigkeitsbegrenzer | ⚙️ Benutzerdefinierte Befehle |
|
||||||
| 📑 Kapitel einbetten | ✂️ Videoabschnitte zuschneiden | 🍪 Mit Cookies anmelden |
|
| 📑 Kapitel-Integration | ✂️ Videoabschnitte zuschneiden | 🍪 Cookie-Login |
|
||||||
| 📜 Download-Verlauf | 🔄 Kanalauswahl freigeben | 🌐 Proxy-Unterstützung |
|
| 📜 Download-Historie | 🔄 Release-Kanal Auswahl | 🌐 Proxy-Support |
|
||||||
| 🎚️ Audioformatkonvertierung | 🎬 Videoformateinstellungen | 🆙 Integrierte Updater-Registerkarte |
|
| 🎚️ Audioformat-Konvertierung | 🎬 Videoformat-Einstellungen | 🆙 Integrierter Update-Tab |
|
||||||
| 🌍 Allgemeiner Modus | 🔊 Audio-Normalisierung (EBU R128) | 🌍 Lokalisierung in 14 Sprachen |
|
| 🌍 Generischer Modus | 🔊 Audio-Normalisierung (EBU R128) | 🌍 In 14 Sprachen lokalisiert |
|
||||||
|
| 💾 Playlist-Export | ⚙️ Standardqualität & Untertitel | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="installation"></a>
|
||||||
## 🚀 Installation
|
## 🚀 Installation
|
||||||
|
|
||||||
### ⚡ Schnellinstallation (empfohlen)
|
### ⚡ Schnelle Installation (Empfohlen)
|
||||||
|
|
||||||
Installieren Sie YTSage von PyPI:
|
Installieren Sie YTSage über PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄Aktualisieren Sie eine vorhandene Installation</summary>
|
<summary>🔄 Bestehende Installation aktualisieren</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,7 +95,7 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Starten Sie dann die App:
|
Starten Sie dann die Anwendung:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
ytsage
|
||||||
@@ -102,33 +103,33 @@ ytsage
|
|||||||
|
|
||||||
### 📦 Vorgefertigte ausführbare Dateien
|
### 📦 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
|
#### 🪟 Windows
|
||||||
|
|
||||||
| Formatieren | Beschreibung |
|
| Format | Beschreibung |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Standardinstallationsprogramm |
|
|  | Standard-Installer |
|
||||||
|  | Mit FFmpeg gebündelt |
|
|  | Mit integriertem FFmpeg |
|
||||||
|  | Portable Version, keine Installation erforderlich |
|
|  | Portable Version, keine Installation erforderlich |
|
||||||
|  | Tragbar mit FFmpeg, gezippt |
|
|  | Portable Version mit FFmpeg, gepackt |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Installationsschritte</summary>
|
<summary>🛠️ Installationsschritte</summary>
|
||||||
|
|
||||||
1. **EXE-Installationsprogramm (`.exe`)**: Doppelklicken Sie auf die Datei und folgen Sie dem Setup-Assistenten.
|
1. **EXE-Installer (`.exe`)**: Doppelklicken Sie auf die Datei und folgen Sie dem Installationsassistenten.
|
||||||
2. **Portable Version (`.zip`)**: Extrahieren Sie das Archiv an den gewünschten Speicherort und führen Sie `ytsage.exe` aus.
|
2. **Portable Version (`.zip`)**: Entpacken Sie das Archiv an den gewünschten Ort und starten Sie `ytsage.exe`.
|
||||||
3. **FFmpeg gebündelt**: Wählen Sie die gebündelten FFmpeg-Versionen, wenn Sie FFmpeg nicht auf Ihrem System installiert haben.
|
3. **Integriertes FFmpeg**: Wählen Sie die Versionen mit integriertem FFmpeg, falls FFmpeg nicht bereits auf Ihrem System installiert ist.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Formatieren | Beschreibung |
|
| Format | Beschreibung |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Debian-Paket |
|
|  | Debian-Paket |
|
||||||
|  | AppImage, tragbar |
|
|  | AppImage, portabel |
|
||||||
|  | RPM-Paket |
|
|  | RPM-Paket |
|
||||||
|  | Flatpak-Bundle |
|
|  | Flatpak Bundle |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Installationsschritte</summary>
|
<summary>🛠️ Installationsschritte</summary>
|
||||||
@@ -136,7 +137,7 @@ ytsage
|
|||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
@@ -147,7 +148,7 @@ ytsage
|
|||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./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
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
@@ -155,26 +156,26 @@ ytsage
|
|||||||
|
|
||||||
#### 🍎 macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
| Formatieren | Beschreibung |
|
| Format | Beschreibung |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Gezippte Anwendung für Apple Silicon |
|
|  | Gepackte App für Apple Silicon |
|
||||||
|  | Disk-Image-Installationsprogramm für Apple Silicon |
|
|  | Disk Image Installer für Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Installationsschritte</summary>
|
<summary>🛠️ Installationsschritte</summary>
|
||||||
|
|
||||||
- **DMG-Installationsprogramm (`.dmg`)**: Doppelklicken Sie zum Mounten und ziehen Sie dann `YTSage.app` in Ihren Anwendungsordner.
|
- **DMG-Installer (`.dmg`)**: Doppelklick zum Mounten, dann `YTSage.app` in den Programme-Ordner ziehen.
|
||||||
- **App-Archiv (`.zip`)**: Extrahieren Sie die ZIP-Datei und verschieben Sie `YTSage.app` in Ihren Anwendungsordner.
|
- **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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<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
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
@@ -183,19 +184,19 @@ cd YTSage
|
|||||||
|
|
||||||
### 2. Abhängigkeiten installieren
|
### 2. Abhängigkeiten installieren
|
||||||
|
|
||||||
#### ⚡ Mit UV
|
#### ⚡ Mit uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 Oder mit Standard-Pip
|
#### 📦 Oder mit Standard-pip
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Führen Sie die Anwendung aus
|
### 3. Anwendung starten
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -209,46 +210,47 @@ python -m ytsage.main
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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>
|
<td><img src="../branding/screenshots/playlist.png" alt="Playlist-Download" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Download-Einstellungen</em></td>
|
<td align="center"><em>Download-Einstellungen</em></td>
|
||||||
<td align="center"><em>Playlist-Download</em></td>
|
<td align="center"><em>Playlist-Download</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="Audioformat-Auswahl" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Benutzerdefinierte Optionen" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Audioformat</em></td>
|
<td align="center"><em>Audioformat</em></td>
|
||||||
<td align="center"><em>Benutzerdefinierte Optionen</em></td>
|
<td align="center"><em>Benutzerdefinierte Optionen</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
## 📖 Verwendung
|
<a id="usage"></a>
|
||||||
|
## 📖 Bedienung
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Grundlegende Verwendung</summary>
|
<summary>🎯 Grundlegende Bedienung</summary>
|
||||||
|
|
||||||
1. **YTSage starten**
|
1. **YTSage starten**
|
||||||
2. **YouTube-URL einfügen** (oder verwenden Sie die Schaltfläche „URL einfügen“)
|
2. **YouTube-URL einfügen** (oder die Schaltfläche "Paste URL" verwenden)
|
||||||
3. **Klicken Sie auf „Analysieren“**
|
3. **Auf "Analyze" klicken**
|
||||||
4. **Format auswählen:**
|
4. **Format auswählen:**
|
||||||
- `Video` für Video-Downloads
|
- `Video` für Video-Downloads
|
||||||
- `Audio Only` zur Audioextraktion
|
- `Audio Only` für Audio-Extraktion
|
||||||
5. **Optionen wählen:**
|
5. **Optionen wählen:**
|
||||||
- Untertitel aktivieren und Sprache auswählen
|
- Untertitel aktivieren & Sprache auswählen
|
||||||
- Untertitelzusammenführung aktivieren
|
- Untertitel-Merging aktivieren
|
||||||
- Miniaturansicht speichern
|
- Thumbnail speichern
|
||||||
- Entfernen Sie Sponsorsegmente
|
- Sponsoren-Segmente entfernen
|
||||||
- Beschreibung speichern
|
- Beschreibung speichern
|
||||||
- Kapitel einbetten
|
- Kapitel integrieren
|
||||||
6. **Ausgabeverzeichnis auswählen**
|
6. **Ausgabeverzeichnis wählen**
|
||||||
7. **Klicken Sie auf „Herunterladen“**
|
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>
|
</details>
|
||||||
|
|
||||||
@@ -256,94 +258,97 @@ python -m ytsage.main
|
|||||||
<summary>📋 Playlist-Download</summary>
|
<summary>📋 Playlist-Download</summary>
|
||||||
|
|
||||||
1. **Playlist-URL einfügen**
|
1. **Playlist-URL einfügen**
|
||||||
2. **Klicken Sie auf „Analysieren“**
|
2. **Auf "Analyze" klicken**
|
||||||
3. **Wählen Sie Videos aus der Playlist-Auswahl aus (optional, standardmäßig alle)**
|
3. **Videos aus dem Playlist-Selector auswählen (optional, standardmäßig alle)**
|
||||||
4. **Wählen Sie das gewünschte Format/die gewünschte Qualität**
|
4. **Gewünschtes Format/Qualität wählen**
|
||||||
5. **Klicken Sie auf „Herunterladen“**
|
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>
|
||||||
|
|
||||||
<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`.
|
1. Öffnen Sie `Download Settings`.
|
||||||
2. Aktivieren Sie `Generic Mode`.
|
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`.
|
4. Klicken Sie auf `Analyze`.
|
||||||
5. Wählen Sie ein Format und laden Sie es wie gewohnt herunter.
|
5. Wählen Sie ein Format und laden Sie es wie gewohnt herunter.
|
||||||
|
|
||||||
Hinweise:
|
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.
|
- 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 Websites erfordern je nach Extraktor Cookies, eine Anmeldesitzung, einen Proxy oder zusätzliche YT-DLP-Argumente.
|
- Einige Seiten erfordern Cookies, Login, Proxy oder zusätzliche yt-dlp-Argumente je nach Extractor.
|
||||||
- Wenn eine Site ausfällt, aktualisieren Sie yt-dlp zunächst über die Registerkarte des integrierten Updaters, bevor Sie das Problem melden.
|
- Wenn eine Seite fehlschlägt, aktualisieren Sie zuerst yt-dlp über den integrierten Update-Tab, bevor Sie das Problem melden.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰 Medien- und Download-Optionen</summary>
|
<summary>🧰 Medien- & Download-Optionen</summary>
|
||||||
|
|
||||||
- **Untertiteloptionen:** Sprachen filtern und Untertitel in die Videodatei einbetten
|
- **Untertitel-Optionen:** Sprachen filtern und Untertitel in die Videodatei einbetten.
|
||||||
- **Untertitel zusammenführen:** Untertitel für fest codierte Untertitel in die Videodatei einbinden
|
- **Untertitel-Merging:** Mergt Untertitel in die Videodatei für fest eingebrannte (hardcoded) Untertitel.
|
||||||
- **Beschreibung speichern:** Speichern Sie die Videobeschreibung als Textdatei
|
- **Beschreibung speichern:** Speichert die Videobeschreibung als Textdatei.
|
||||||
- **Miniaturansicht speichern:** Speichern Sie die Miniaturansicht des Videos als Bilddatei
|
- **Thumbnail speichern:** Speichert das Video-Thumbnail als Bilddatei.
|
||||||
- **Kapitel einbetten:** Betten Sie Kapitelmarkierungen als Metadaten für kompatible Videoplayer ein
|
- **Kapitel integrieren:** Bettet Kapitelmarken als Metadaten für kompatible Videoplayer ein.
|
||||||
- **Sponsorensegmente entfernen:** Entfernen Sie Sponsorsegmente aus dem Video mit SponsorBlock
|
- **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
|
- **Video zuschneiden:** Laden Sie nur bestimmte Teile eines Videos herunter, indem Sie Zeitbereiche im Format `HH:MM:SS` angeben.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️ Ausgabe- und Dateieinstellungen</summary>
|
<summary>⚙️ Ausgabe- & Dateieinstellungen</summary>
|
||||||
|
|
||||||
- **Geschwindigkeitsbegrenzer:** Begrenzen Sie die Download-Geschwindigkeit, zum Beispiel `500K` auf 500 KB/s
|
- **Geschwindigkeitsbegrenzer:** Begrenzt die Download-Geschwindigkeit, z. B. `500K` für 500 KB/s.
|
||||||
- **Download-Pfad speichern:** Speichern Sie den Standard-Download-Pfad für zukünftige Downloads. Verfügbar unter **Download-Einstellungen → Download-Pfad**.
|
- **Download-Pfad speichern:** Speichert den Standard-Download-Pfad für zukünftige Downloads. Verfügbar unter **Download Settings → Download Path**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Ausgabeformat erzwingen:** Video-Downloads in ein bestimmtes Containerformat wie `mp4`, `webm` oder `mkv` erzwingen. Verfügbar unter **Download-Einstellungen → Ausgabeformat-Einstellungen**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Audio-Normalisierung:** Standardisieren Sie die Lautstärke für reine Audio-Downloads mit EBU R128.
|
- **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>
|
||||||
|
|
||||||
<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.
|
- **Cookie-Login:** Loggen Sie sich mit Cookies bei YouTube ein, um auf private Inhalte zuzugreifen.
|
||||||
So verwenden Sie es:
|
Verwendung:
|
||||||
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.
|
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 auch manuell extrahieren:
|
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)
|
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
|
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
|
c. Erstellen Sie eine Datei namens `cookies.txt` und fügen Sie die Cookies ein
|
||||||
d. Wählen Sie in der App die Datei „cookies.txt“ aus
|
d. Wählen Sie die Datei `cookies.txt` in der App aus
|
||||||
- **Proxy-Unterstützung:** Verwenden Sie einen Proxy-Server für Downloads, zum Beispiel `http://<proxy-server>:<port>`
|
- **Proxy-Support:** Verwenden Sie einen Proxy-Server für Downloads, z. B. `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**.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Werkzeuge und Wartung</summary>
|
<summary>🛠️ Tools & Wartung</summary>
|
||||||
|
|
||||||
- **Benutzerdefinierte Befehle:** Greifen Sie über Befehlszeilenargumente auf erweiterte yt-dlp-Funktionen zu
|
- **Benutzerdefinierte Befehle:** Greifen Sie auf erweiterte yt-dlp-Funktionen über Befehlszeilenargumente zu.
|
||||||
- **Registerkarte „Updater“:** Integrierte Update-Tools von einem Ort aus in den benutzerdefinierten Optionen verwalten:
|
- **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 den Veröffentlichungskanälen Stable und Nightly
|
- **yt-dlp Updates:** Suchen Sie nach Updates und wechseln Sie zwischen Stable- und Nightly-Release-Kanälen.
|
||||||
- **FFmpeg-Versionsprüfer:** Überprüfen Sie Ihre FFmpeg-Version und öffnen Sie die Installationsanleitungen
|
- **FFmpeg-Versionsprüfung:** Überprüfen Sie Ihre FFmpeg-Version und öffnen Sie Installationsanleitungen.
|
||||||
- **Deno-Updates:** Überprüfen und aktualisieren Sie die Deno-Laufzeitumgebung
|
- **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.
|
- **FFmpeg/yt-dlp/Deno Erkennung:** Erkennt Pfade und Versionen von FFmpeg, yt-dlp und Deno automatisch aus dem About-Dialog.
|
||||||
- **Download-Verlauf:** Zeigen Sie frühere Downloads mit Miniaturansichten und Status über die Schaltfläche **Verlauf** an.
|
- **Download-Historie:** Zeigt vergangene Downloads mit Thumbnails und Status über die Schaltfläche **History** an.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Lokalisierung</summary>
|
<summary>🌍 Lokalisierung</summary>
|
||||||
|
|
||||||
YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie Ihre bevorzugte Sprache unter **Benutzerdefinierte Optionen → Sprache** aus.
|
YTSage unterstützt **14 Sprachen** für globale Barrierefreiheit. Wählen Sie Ihre bevorzugte Sprache unter **Custom Options → Language**.
|
||||||
|
|
||||||
### Unterstützte Sprachen
|
### Unterstützte Sprachen
|
||||||
|
|
||||||
@@ -361,7 +366,7 @@ YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie
|
|||||||
|
|
||||||
| Sprache | Datei | Sprache | Datei |
|
| 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) |
|
| 🇸🇦 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) |
|
| 🇩🇪 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) |
|
| 🇮🇩 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) |
|
| 🇧🇷 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) |
|
| 🇹🇷 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>
|
</details>
|
||||||
|
|
||||||
@@ -379,50 +384,50 @@ YTSage unterstützt **14 Sprachen** für weltweite Zugänglichkeit. Wählen Sie
|
|||||||
<details>
|
<details>
|
||||||
<summary>Klicken Sie hier, um häufige Probleme und Lösungen anzuzeigen</summary>
|
<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.
|
- **Download schlägt fehl:** Überprüfen Sie Ihre Internetverbindung und stellen Sie sicher, dass das Video verfügbar ist.
|
||||||
- **Spezifische Downloadfehler:**
|
- **Spezifische Download-Fehler:**
|
||||||
- **Private Videos:** Verwenden Sie die Cookie-Authentifizierung, um auf private Inhalte zuzugreifen.
|
- **Private Videos:** Verwenden Sie 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.
|
- **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 Beschränkungen zu umgehen.
|
- **Geoblockierte Videos:** Erwägen Sie die Verwendung eines VPN, um regionale Einschränkungen zu umgehen.
|
||||||
- **Entfernte/gelöschte Videos:** Das Video ist nicht mehr auf YouTube verfügbar.
|
- **Gelöschte Videos:** Das Video ist auf YouTube nicht mehr verfügbar.
|
||||||
- **Live-Streams:** Live-Streams können nicht heruntergeladen werden; Warten Sie, bis der Stream beendet ist.
|
- **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.
|
- **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.
|
- **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.
|
- **Premium-Inhalte:** Erfordert ein YouTube-Premium-Abonnement.
|
||||||
- **Urheberrechtliche Sperren:** Der Inhalt ist aufgrund von Urheberrechtsbeschränkungen gesperrt.
|
- **Urheberrechtssperren:** 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.
|
- **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 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.
|
- **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:**
|
**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:**
|
**Sichere Alternativen:**
|
||||||
- ✅ **Pip-Installation verwenden:** `pip install ytsage` (empfohlen)
|
- ✅ **Verwenden Sie die pip-Installation:** `pip install ytsage` (Empfohlen)
|
||||||
- ✅ **Aus dem Quellcode erstellen**: Folgen Sie diesem [guide](../.github/CI_CD_README.md)
|
- ✅ **Aus dem Quellcode bauen**: Folgen Sie diesem [Leitfaden](.github/CI_CD_README.md)
|
||||||
- ✅ **Setzen Sie die Anwendung in Ihre Antivirensoftware auf die Whitelist
|
- ✅ **App auf die Whitelist setzen** in Ihrer Antiviren-Software.
|
||||||
|
|
||||||
#### 🍎 macOS: „App ist beschädigt und kann nicht geöffnet werden“
|
#### 🍎 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äneattribut entfernen.
|
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).
|
1. **Öffnen Sie das Terminal** (Sie finden es über Spotlight).
|
||||||
2. **Geben Sie den folgenden Befehl ein**, drücken Sie aber noch nicht die Eingabetaste. Achten Sie darauf, das Leerzeichen am Ende einzufügen:
|
2. **Geben Sie den folgenden Befehl ein**, aber drücken Sie noch **nicht** Enter. Stellen Sie sicher, dass am Ende ein Leerzeichen steht:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
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 die Eingabetaste**, um den Befehl auszuführen.
|
4. **Drücken Sie Enter**, um den Befehl auszuführen.
|
||||||
5. **Versuchen Sie erneut, YTSage.app zu öffnen.** Es sollte jetzt korrekt starten.
|
5. **Versuchen Sie erneut, YTSage.app zu öffnen.** Sie sollte nun korrekt starten.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **Konfigurationsorte (Erweitert)**
|
#### **Speicherorte der Konfiguration (Erweitert)**
|
||||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
@@ -430,45 +435,45 @@ Wenn dieser Fehler unter macOS Sonoma oder neuer auftritt, müssen Sie das Quara
|
|||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<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
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- Der Sponsor-Link ist auch direkt in der App im Info-Dialog verfügbar.
|
- Der Sponsoring-Link ist auch direkt in der App über den About-Dialog verfügbar.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="contributing"></a>
|
||||||
## 👥 Mitwirken
|
## 👥 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
|
1. 🍴 Forken Sie das Repository
|
||||||
2. 🌿 Erstellen Sie Ihren Feature-Branch:
|
2. 🌿 Erstellen Sie einen Feature-Branch:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/AmazingFeature
|
||||||
```
|
```
|
||||||
3. 💾 Übernehmen Sie Ihre Änderungen:
|
3. 💾 Committen Sie Ihre Änderungen:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Add some AmazingFeature'
|
||||||
```
|
```
|
||||||
4. 📤 Zur Filiale schieben:
|
4. 📤 Pushen Sie in den Branch:
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
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`)
|
- Aktualisieren Sie die entsprechende lokalisierte README-Datei (z. B. `readme-translations/README.de.md`)
|
||||||
- Halten Sie App-Strings synchron, indem Sie `ytsage/languages/<code>.json` bearbeiten
|
- Halten Sie die 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`
|
- Wenn Ihre Sprache fehlt, beginnen Sie mit der `README.md` und erstellen Sie `README.<code>.md`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 Projektstruktur</summary>
|
<summary>📂 Projektstruktur</summary>
|
||||||
|
|
||||||
## YTSage – Projektstruktur
|
## YTSage - Projektstruktur
|
||||||
|
|
||||||
Dieses Dokument beschreibt die organisierte Ordnerstruktur von YTSage.
|
Dieses Dokument beschreibt die organisierte Ordnerstruktur von YTSage.
|
||||||
|
|
||||||
@@ -476,58 +481,58 @@ Dieses Dokument beschreibt die organisierte Ordnerstruktur von YTSage.
|
|||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # GitHub-Konfiguration
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Ticket-Vorlagen
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Bug-Report-Vorlage
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # GitHub Actions Workflows
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Linux Build Workflow
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # macOS Build Workflow
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Windows Build Workflow
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Master Release Workflow
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # CI/CD-Dokumentation
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Branding-Assets (Screenshots, SVGs)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # App-Icons
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Screenshots für die Dokumentation
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # SVG-Assets
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # Lizenzdatei
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Projekt-Metadaten und Abhängigkeiten
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Projekt-Dokumentation
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Python-Abhängigkeiten (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Quellcode-Paket
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Laufzeit-Assets
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # App-Icons
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Audiodateien
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Lokalisierungsdateien
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Arabische Übersetzung
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Deutsche Übersetzung
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Englische Übersetzung
|
||||||
│ └── ... # Other languages
|
│ └── ... # Weitere Sprachen
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Hauptgeschäftslogik
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py # Core-Paket-Initialisierung
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Deno-Integration
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Download-Funktionalität
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg-Integration
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Hilfsfunktionen
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # yt-dlp-Integration
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Benutzeroberflächen-Komponenten
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py # GUI-Paket-Initialisierung
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Hauptfenster der App
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Dialog-Klassen
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Hilfsmodule
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py # Utils-Paket-Initialisierung
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Konfigurationsverwaltung
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Logging-Tool
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Paket-Einstiegspunkt
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Hauptskript zur Ausführung
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Sterngeschichte
|
## ⭐️ Star History
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Sterngeschichte
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -541,7 +546,7 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Lizenz
|
## 📜 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
|
## 🙏 Danksagungen
|
||||||
|
|
||||||
@@ -550,13 +555,13 @@ Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie i
|
|||||||
|
|
||||||
<div align="center">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Kernkomponenten</th></tr>
|
<tr class="section"><th colspan="2">Kernkomponenten</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Bibliotheken und Frameworks</th></tr>
|
<tr class="section"><th colspan="2">Bibliotheken & Frameworks</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>GUI-Framework</td>
|
<td>GUI-Framework</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Bildverarbeitung</td>
|
||||||
</tr>
|
</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>
|
<td>HTTP-Anfragen</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">Verpackung</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Versions- und Pakethandhabung</td>
|
<td>Versionsverwaltung & Packaging</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Markdown-Rendering</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Protokollierung</td>
|
<td>Logging</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Vermögenswerte und Mitwirkende</th></tr>
|
<tr class="section"><th colspan="2">Assets & Mitwirkende</th></tr>
|
||||||
<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>
|
<td>Benachrichtigungston</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>Code-Mitwirkender</td>
|
<td>Code-Contributor</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -607,12 +613,12 @@ Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie i
|
|||||||
|
|
||||||
## ⚠️ Haftungsausschluss
|
## ⚠️ 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">
|
<div align="center">
|
||||||
|
|
||||||
Hergestellt mit ❤️ von [oop7](https://github.com/oop7)
|
Erstellt mit ❤️ von [oop7](https://github.com/oop7)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+238
-232
@@ -12,25 +12,25 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Un descargador de YouTube moderno con una interfaz PySide6 limpia.**
|
**Un moderno descargador de YouTube con una interfaz PySide6 elegante.**
|
||||||
Descargue videos en cualquier calidad, extraiga audio, obtenga subtítulos y más.
|
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)
|
Inglés: [EN](../README.md)
|
||||||
| العربية: [AR](README.ar.md)
|
| Árabe: [AR](README.ar.md)
|
||||||
| Alemán: [DE](README.de.md)
|
| Alemán: [DE](README.de.md)
|
||||||
| Español: [ES](README.es.md)
|
| Español: [ES](README.es.md)
|
||||||
| Francés: [FR](README.fr.md)
|
| Francés: [FR](README.fr.md)
|
||||||
| हिन्दी: [HI](README.hi.md)
|
| Hindi: [HI](README.hi.md)
|
||||||
| Bahasa Indonesia: [ID](README.id.md)
|
| Indonesio: [ID](README.id.md)
|
||||||
| Italiano: [IT](README.it.md)
|
| Italiano: [IT](README.it.md)
|
||||||
| Traducción: [JA](README.ja.md)
|
| Japonés: [JA](README.ja.md)
|
||||||
| Polonia: [PL](README.pl.md)
|
| Polaco: [PL](README.pl.md)
|
||||||
| Português: [PT](README.pt.md)
|
| Portugués: [PT](README.pt.md)
|
||||||
| Ruso: [RU](README.ru.md)
|
| Ruso: [RU](README.ru.md)
|
||||||
| Turco: [TR](README.tr.md)
|
| Turco: [TR](README.tr.md)
|
||||||
| Traducción: [ZH](README.zh.md)
|
| Chino: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Instalación</a> •
|
<a href="#installation">Instalación</a> •
|
||||||
@@ -38,8 +38,8 @@ Inglés: [EN](../README.md)
|
|||||||
<a href="#usage">Uso</a> •
|
<a href="#usage">Uso</a> •
|
||||||
<a href="#screenshots">Capturas de pantalla</a> •
|
<a href="#screenshots">Capturas de pantalla</a> •
|
||||||
<a href="#troubleshooting">Solución de problemas</a> •
|
<a href="#troubleshooting">Solución de problemas</a> •
|
||||||
<a href="#sponsor">Patrocinador</a> •
|
<a href="#sponsor">Patrocinar</a> •
|
||||||
<a href="#contributing">Contribuyendo</a>
|
<a href="#contributing">Contribuir</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</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:
|
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
|
- Interfaz PySide6 moderna y limpia
|
||||||
- Descargas con un solo clic de vídeo, audio y subtítulos.
|
- Descarga con un solo clic para video, audio y subtítulos
|
||||||
- Funciones avanzadas como SponsorBlock, combinación de subtítulos y selección de listas de reproducción
|
- Funciones avanzadas como SponsorBlock, fusió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
|
- Modo genérico (Generic Mode) opcional para sitios compatibles con yt-dlp más allá de YouTube
|
||||||
- Soporte multiplataforma y fácil instalación.
|
- Soporte multiplataforma e instalación sencilla
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="features"></a>
|
||||||
## ✨ Características
|
## ✨ Características
|
||||||
|
|
||||||
<div align="center">
|
<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 |
|
| 🎥 Tabla de formatos | 🚫 Integración de SponsorBlock | 🎞️ Pantalla FPS/HDR |
|
||||||
| 🎵 Extracción de audio | 📝 Seleccionar y fusionar múltiples subtítulos | 🔄 Actualización automática yt-dlp |
|
| 🎵 Extracción de audio | 📝 Selección y fusión de subtítulos | 🔄 Actualización automática de yt-dlp |
|
||||||
| ✨ Interfaz de usuario sencilla | 💾 Guardar descripción y miniatura | 🛠️ FFmpeg/yt-dlp/Detección de Deno |
|
| ✨ 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 |
|
| 📋 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 |
|
| 📜 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 |
|
| 🎚️ 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 |
|
| 🌍 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>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="installation"></a>
|
||||||
## 🚀 Instalación
|
## 🚀 Instalación
|
||||||
|
|
||||||
### ⚡ Instalación rápida (recomendado)
|
### ⚡ Instalación rápida (Recomendado)
|
||||||
|
|
||||||
Instale YTSage desde PyPI:
|
Instala YTSage vía PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Actualizar una instalación existente</summary>
|
<summary>🔄 Actualizar instalación existente</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,41 +95,41 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Luego inicie la aplicación:
|
Luego, ejecuta la aplicación:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
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 |
|
| Formato | Descripción |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Instalador estándar |
|
|  | Instalador estándar |
|
||||||
|  | Con FFmpeg incluido |
|
|  | Con FFmpeg incorporado |
|
||||||
|  | Versión portátil, no requiere instalación |
|
|  | Versión portable, no requiere instalación |
|
||||||
|  | Portátil con FFmpeg, con cremallera |
|
|  | Portable con FFmpeg, comprimido |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Pasos de instalación</summary>
|
<summary>🛠️ Pasos de instalación</summary>
|
||||||
|
|
||||||
1. **Instalador EXE (`.exe`)**: haga doble clic en el archivo y siga el asistente de configuración.
|
1. **Instalador EXE (`.exe`)**: Haz doble clic en el archivo y sigue el asistente de configuración.
|
||||||
2. **Versión portátil (`.zip`)**: extraiga el archivo a la ubicación deseada y ejecute `ytsage.exe`.
|
2. **Versión portable (`.zip`)**: Extrae el archivo en el lugar deseado y ejecuta `ytsage.exe`.
|
||||||
3. **FFmpeg incluido**: elija las versiones incluidas de FFmpeg si no tiene FFmpeg instalado en su sistema.
|
3. **FFmpeg incorporado**: Elige las versiones con FFmpeg incorporado si no tienes FFmpeg instalado en tu sistema.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Formato | Descripción |
|
| Formato | Descripción |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Paquete Debian |
|
|  | Paquete Debian |
|
||||||
|  | AppImage, portátil |
|
|  | AppImage, portable |
|
||||||
|  | Paquete RPM |
|
|  | Paquete RPM |
|
||||||
|  | Paquete plano |
|
|  | Flatpak Bundle |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Pasos de instalación</summary>
|
<summary>🛠️ Pasos de instalación</summary>
|
||||||
@@ -136,43 +137,43 @@ ytsage
|
|||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **Imagen de aplicación (`.AppImage`)**:
|
- **AppImage (`.AppImage`)**:
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **Flatpak**: siga las instrucciones en Flathub o ejecute:
|
- **Flatpak**: Sigue las instrucciones en Flathub o ejecuta:
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🍎macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
| Formato | Descripción |
|
| Formato | Descripción |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Aplicación comprimida para Apple Silicon |
|
|  | Aplicación comprimida para Apple Silicon |
|
||||||
|  | Instalador de imágenes de disco para Apple Silicon |
|
|  | Instalador de imagen de disco para Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Pasos de instalación</summary>
|
<summary>🛠️ Pasos de instalación</summary>
|
||||||
|
|
||||||
- **Instalador de DMG (`.dmg`)**: haga doble clic para montar, luego arrastre `YTSage.app` a su carpeta de Aplicaciones.
|
- **Instalador DMG (`.dmg`)**: Haz doble clic para montar, luego arrastra `YTSage.app` a tu carpeta de Aplicaciones.
|
||||||
- **Archivo de aplicaciones (`.zip`)**: extrae el zip y mueve `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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻 Instalación manual desde la fuente</summary>
|
<summary>💻 Instalación manual desde el código fuente</summary>
|
||||||
|
|
||||||
### 1. Clonar el repositorio
|
### 1. Clonar el repositorio
|
||||||
|
|
||||||
@@ -183,7 +184,7 @@ cd YTSage
|
|||||||
|
|
||||||
### 2. Instalar dependencias
|
### 2. Instalar dependencias
|
||||||
|
|
||||||
#### ⚡ Con ultravioleta
|
#### ⚡ Con uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
@@ -195,7 +196,7 @@ uv pip install .
|
|||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Ejecute la aplicación
|
### 3. Ejecutar la aplicación
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -209,167 +210,171 @@ python -m ytsage.main
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Descarga de lista de reproducción" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Configuración de descarga</em></td>
|
<td align="center"><em>Ajustes de descarga</em></td>
|
||||||
<td align="center"><em>Descargar lista de reproducción</em></td>
|
<td align="center"><em>Descarga de lista de reproducción</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="Selección de formato de audio" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opción personalizada" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Formato de audio</em></td>
|
<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>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="usage"></a>
|
||||||
## 📖 Uso
|
## 📖 Uso
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Uso básico</summary>
|
<summary>🎯 Uso básico</summary>
|
||||||
|
|
||||||
1. **Inicie YTSage**
|
1. **Lanza YTSage**
|
||||||
2. **Pegue la URL de YouTube** (o use el botón "Pegar URL")
|
2. **Pega la URL de YouTube** (o usa el botón "Paste URL")
|
||||||
3. **Haga clic en "Analizar"**
|
3. **Haz clic en "Analyze"**
|
||||||
4. **Seleccione formato:**
|
4. **Selecciona el formato:**
|
||||||
- `Video` para descargas de videos
|
- `Video` para descargas de video
|
||||||
- `Audio Only` para extracción de audio
|
- `Audio Only` para extracción de audio
|
||||||
5. **Elija Opciones:**
|
5. **Elige opciones:**
|
||||||
- Habilitar subtítulos y seleccionar idioma.
|
- Activar subtítulos y elegir idioma
|
||||||
- Habilitar la combinación de subtítulos
|
- Activar fusión de subtítulos
|
||||||
- Guardar miniatura
|
- Guardar miniatura
|
||||||
- Eliminar segmentos de patrocinadores
|
- Eliminar segmentos patrocinados
|
||||||
- Guardar descripción
|
- Guardar descripción
|
||||||
- Insertar capítulos
|
- Integrar capítulos
|
||||||
6. **Seleccione el directorio de salida**
|
6. **Selecciona directorio de salida**
|
||||||
7. **Haga clic en "Descargar"**
|
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>
|
||||||
|
|
||||||
<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**
|
1. **Pega la URL de la lista de reproducción**
|
||||||
2. **Haga clic en "Analizar"**
|
2. **Haz clic en "Analyze"**
|
||||||
3. **Seleccione videos del selector de lista de reproducción (opcional, el valor predeterminado es todos)**
|
3. **Selecciona videos del selector de listas (opcional, todos por defecto)**
|
||||||
4. **Elija el formato/calidad deseado**
|
4. **Elige formato/calidad deseada**
|
||||||
5. **Haga clic en "Descargar"**
|
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>
|
||||||
|
|
||||||
<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:
|
Cómo usarlo:
|
||||||
|
|
||||||
1. Abra `Download Settings`.
|
1. Abre `Download Settings`.
|
||||||
2. Habilite `Generic Mode`.
|
2. Activa `Generic Mode`.
|
||||||
3. Pegue una URL de lista de reproducción o video compatible que no sea de YouTube.
|
3. Pega una URL de video o lista de reproducción compatible que no sea de YouTube.
|
||||||
4. Haga clic en `Analyze`.
|
4. Haz clic en `Analyze`.
|
||||||
5. Elija un formato y descárguelo como de costumbre.
|
5. Elige el formato y descarga como de costumbre.
|
||||||
|
|
||||||
Notas:
|
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.
|
- 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, una sesión de inicio de sesión, un proxy o argumentos yt-dlp adicionales según el extractor.
|
- Algunos sitios requieren cookies, inicio de sesión, proxy o argumentos adicionales de yt-dlp dependiendo del extractor.
|
||||||
- Si un sitio falla, actualice primero yt-dlp desde la pestaña de actualización integrada antes de informar el problema.
|
- Si un sitio falla, actualiza primero yt-dlp desde la pestaña de actualización integrada antes de informar del problema.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **Opciones de subtítulos:** Filtra idiomas e incrusta 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
|
- **Fusión de subtítulos:** Fusiona subtítulos en el archivo de video para subtítulos fijos (hardcoded).
|
||||||
- **Guardar descripción:** Guarde la descripción del video como un archivo de texto.
|
- **Guardar descripción:** Guarda la descripción del video como un archivo de texto.
|
||||||
- **Guardar miniatura:** Guarda la miniatura del vídeo como un archivo de imagen.
|
- **Guardar miniatura:** Guarda la miniatura del video como un archivo de imagen.
|
||||||
- **Incrustar capítulos:** Incrustar marcadores de capítulos como metadatos para reproductores de video compatibles
|
- **Integrar capítulos:** Incluye marcas de capítulo como metadatos para reproductores de video compatibles.
|
||||||
- **Eliminar segmentos de patrocinador:** Elimina segmentos de patrocinador del video usando SponsorBlock
|
- **Eliminar segmentos patrocinados:** Elimina segmentos patrocinados del video usando SponsorBlock.
|
||||||
- **Recortar video:** Descargue solo partes específicas de un video especificando rangos de tiempo en formato `HH:MM:SS`
|
- **Recortar video:** Descarga solo partes específicas de un video especificando rangos de tiempo en formato `HH:MM:SS`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **Limitador de velocidad:** Limita la velocidad de descarga, p. ej., `500K` para 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**.
|
- **Guardar ruta de descarga:** Guarda la ruta de descarga predeterminada para futuras descargas. Disponible en **Download Settings → Download Path**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Normalización de audio:** Estandarice el volumen para descargas de solo audio usando EBU R128.
|
- **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>
|
||||||
|
|
||||||
<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:
|
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.
|
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, extraiga las cookies manualmente:
|
2. Alternativamente, extrae 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)
|
a. Exporta cookies de tu 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
|
b. Copia las cookies en formato Netscape
|
||||||
c. Cree un archivo llamado `cookies.txt` y pegue las cookies en él
|
c. Crea un archivo llamado `cookies.txt` y pega las cookies
|
||||||
d. Seleccione el archivo `cookies.txt` en la aplicación
|
d. Selecciona el archivo `cookies.txt` en la aplicación
|
||||||
- **Soporte de proxy:** Utilice un servidor proxy para descargas, por ejemplo `http://<proxy-server>:<port>`
|
- **Soporte de proxy:** Usa un servidor proxy para las descargas, p. ej., `http://<servidor-proxy>:<puerto>`
|
||||||
- **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**.
|
- **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>
|
||||||
|
|
||||||
<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
|
- **Comandos personalizados:** Accede a funciones avanzadas de yt-dlp mediante argumentos de línea de comandos.
|
||||||
- **Pestaña Actualizador:** Administre las herramientas de actualización integradas desde un solo lugar en Opciones personalizadas:
|
- **Pestaña de actualización:** Gestiona herramientas de actualización desde un solo lugar en Opciones personalizadas:
|
||||||
- **Actualizaciones de yt-dlp:** Busque actualizaciones y cambie entre los canales de lanzamiento estable y nocturno
|
- **Actualizaciones de yt-dlp:** Busca actualizaciones y cambia entre canales estable y nightly.
|
||||||
- **Comprobador de versiones de FFmpeg:** Verifique su versión de FFmpeg y abra las guías de instalación
|
- **Verificador de versión de FFmpeg:** Verifica tu versión de FFmpeg y abre guías de instalación.
|
||||||
- **Actualizaciones de Deno:** Verifique y actualice el tiempo de ejecución de Deno
|
- **Actualizaciones de Deno:** Verifica y actualiza el motor de ejecución 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.
|
- **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:** Vea descargas anteriores con miniaturas y estados desde el botón **Historial**.
|
- **Historial de descargas:** Visualiza descargas pasadas con miniaturas y estados desde el botón **History**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Localización</summary>
|
<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 |
|
| Idioma | Código | Idioma | Código |
|
||||||
|----------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 Inglés | `en` | 🇪🇸 Español | `es` |
|
| 🇺🇸 Inglés | `en` | 🇪🇸 Español | `es` |
|
||||||
| 🇸🇦 Árabe | `ar` | 🇫🇷 Francés | `fr` |
|
| 🇸🇦 Árabe | `ar` | 🇫🇷 Francés | `fr` |
|
||||||
| 🇩🇪 Alemán | `de` | 🇮🇳 hindi | `hi` |
|
| 🇩🇪 Alemán | `de` | 🇮🇳 Hindi | `hi` |
|
||||||
| 🇮🇩 Indonesio | `id` | 🇮🇹 Italiano | `it` |
|
| 🇮🇩 Indonesio | `id` | 🇮🇹 Italiano | `it` |
|
||||||
| 🇯🇵 Japonés | `ja` | 🇵🇱 Polaco | `pl` |
|
| 🇯🇵 Japonés | `ja` | 🇵🇱 Polaco | `pl` |
|
||||||
| 🇧🇷 Portugués | `pt` | 🇷🇺 Ruso | `ru` |
|
| 🇧🇷 Portugués | `pt` | 🇷🇺 Ruso | `ru` |
|
||||||
| 🇹🇷 Turco | `tr` | 🇨🇳 Chino | `zh` |
|
| 🇹🇷 Turco | `tr` | 🇨🇳 Chino | `zh` |
|
||||||
|
|
||||||
### Léame Traducciones
|
### Traducciones del README
|
||||||
|
|
||||||
| Idioma | Archivo | Idioma | Archivo |
|
| 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) |
|
| 🇸🇦 Á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) |
|
| 🇮🇩 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) |
|
| 🇯🇵 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) |
|
| 🇧🇷 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) |
|
| 🇹🇷 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>
|
</details>
|
||||||
|
|
||||||
@@ -377,52 +382,52 @@ YTSage admite **14 idiomas** para accesibilidad mundial. Seleccione su idioma pr
|
|||||||
## 🛠️ Solución de problemas
|
## 🛠️ Solución de problemas
|
||||||
|
|
||||||
<details>
|
<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 tabla de formatos no aparece:** Actualiza yt-dlp a la última versión y cambia a yt-dlp nightly.
|
||||||
- **La descarga falla:** Verifique su conexión a Internet y asegúrese de que el video esté disponible.
|
- **Fallo de descarga:** Verifica tu conexión a internet y asegúrate de que el video esté disponible.
|
||||||
- **Errores de descarga específicos:**
|
- **Errores de descarga específicos:**
|
||||||
- **Vídeos privados:** Utilice la autenticación de cookies para acceder a contenido privado.
|
- **Videos privados:** Usa autenticación por cookies para acceder a contenido privado.
|
||||||
- **Contenido restringido por edad:** Inicie sesión en su cuenta de YouTube para ver videos restringidos por edad.
|
- **Contenido con restricción de edad:** Inicia sesión en tu cuenta de YouTube para ver videos restringidos.
|
||||||
- **Videos bloqueados geográficamente:** Considere usar una VPN para evitar las restricciones regionales.
|
- **Videos bloqueados geográficamente:** Considera usar una VPN para saltar restricciones regionales.
|
||||||
- **Videos eliminados/eliminados:** El video ya no está disponible en YouTube.
|
- **Videos 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.
|
- **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 y vuelve a intentarlo.
|
- **Errores de red:** Verifica tu conexión a internet e inténtalo de nuevo.
|
||||||
- **URL no válidas:** Asegúrese de que la URL sea correcta y provenga de una plataforma compatible.
|
- **URLs no válidas:** Asegúrate de que la URL sea correcta y de una plataforma compatible.
|
||||||
- **Contenido premium:** Requiere membresía de YouTube Premium.
|
- **Contenido Premium:** Requiere suscripción a YouTube Premium.
|
||||||
- **Bloqueos de derechos de autor:** El contenido está bloqueado debido a restricciones de derechos de autor.
|
- **Bloqueos por copyright:** El contenido está bloqueado por 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.
|
- **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ú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.
|
- **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 fácil es descargar el archivo `YTSage-v<version>-ffmpeg.exe`, que incluye FFmpeg.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 🛡️ Advertencia de Windows Defender/Antivirus
|
#### 🛡️ 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:**
|
**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:**
|
**Alternativas seguras:**
|
||||||
- ✅ **Usar instalación de pip:** `pip install ytsage` (recomendado)
|
- ✅ **Usa la instalación de pip:** `pip install ytsage` (Recomendado)
|
||||||
- ✅ **Construir desde la fuente**: siguiendo esto [guide](../.github/CI_CD_README.md)
|
- ✅ **Construye desde el código fuente**: siguiendo esta [guía](.github/CI_CD_README.md)
|
||||||
- ✅ **Incluye la aplicación en la lista blanca** en tu software antivirus
|
- ✅ **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"
|
#### 🍎 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).
|
1. **Abre el Terminal** (puedes encontrarlo usando Spotlight).
|
||||||
2. **Escriba el siguiente comando** pero **no** presione Entrar todavía. Asegúrate de incluir el espacio al final:
|
2. **Escribe el siguiente comando** pero **no presiones** Enter todavía. Asegúrate de incluir el espacio al final:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
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. **Presione Entrar** para ejecutar el comando.
|
4. **Presiona Enter** para ejecutar el comando.
|
||||||
5. **Intenta abrir YTSage.app nuevamente.** Ahora debería iniciarse correctamente.
|
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`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/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>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<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
|
- GitHub Sponsors: 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.
|
- El enlace de patrocinio también está disponible directamente en la aplicación a través del diálogo Acerca de.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="contributing"></a>
|
||||||
## 👥 Contribuyendo
|
## 👥 Contribuir
|
||||||
|
|
||||||
¡Agradecemos las contribuciones! Así es como puedes ayudar:
|
¡Agradecemos las contribuciones! Aquí tienes cómo puedes ayudar:
|
||||||
|
|
||||||
1. 🍴 Bifurca el repositorio
|
1. 🍴 Haz un Fork del repositorio
|
||||||
2. 🌿 Crea tu rama de funciones:
|
2. 🌿 Crea tu rama de características:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/AmazingFeature
|
||||||
```
|
```
|
||||||
3. 💾 Confirme sus cambios:
|
3. 💾 Haz commit de tus cambios:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Add some AmazingFeature'
|
||||||
```
|
```
|
||||||
4. 📤 Empuje a la sucursal:
|
4. 📤 Haz Push a la rama:
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
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`)
|
- Actualiza el archivo README localizado correspondiente (p. ej., `readme-translations/README.es.md`)
|
||||||
- Mantenga las cadenas de aplicaciones sincronizadas editando `ytsage/languages/<code>.json`
|
- Mantén las cadenas de la aplicación sincronizadas editando `ytsage/languages/<code>.json`
|
||||||
- Si falta su idioma, comience desde `README.md` y cree `README.<code>.md`
|
- Si falta tu idioma, comienza desde `README.md` y crea `README.<code>.md`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 Estructura del proyecto</summary>
|
<summary>📂 Estructura del proyecto</summary>
|
||||||
@@ -476,58 +481,58 @@ Este documento describe la estructura de carpetas organizada de YTSage.
|
|||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # Configuración de GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Plantillas de problemas
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Plantilla de informe de errores
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # Flujos de trabajo de GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Flujo de construcción para Linux
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # Flujo de construcción para macOS
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Flujo de construcción para Windows
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Flujo de liberación maestra
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # Documentación de CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Activos de marca (Capturas de pantalla, SVGs)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Iconos de la aplicación
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Capturas de pantalla para documentación
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # Activos SVG
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # Archivo de licencia
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Metadatos del proyecto y dependencias
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Documentación del proyecto
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Dependencias de Python (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Paquete de código fuente
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Activos en tiempo de ejecución
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Iconos de la aplicación
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Archivos de audio
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Archivos de localización
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Traducción al árabe
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Traducción al alemán
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Traducción al inglés
|
||||||
│ └── ... # Other languages
|
│ └── ... # Otros idiomas
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Lógica de negocio principal
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py # Init del paquete core
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Integración con Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Funcionalidad de descarga
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # Integración con FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Funciones de utilidad
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # Integración con yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Componentes de interfaz de usuario
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py # Init del paquete GUI
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Ventana principal de la aplicación
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Clases de diálogos
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Módulos de utilidad
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py # Init del paquete utils
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Gestión de configuración
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Utilidad de registro
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Punto de entrada del paquete
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Script de ejecución principal
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Historia de las estrellas
|
## ⭐️ Historial de estrellas
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Historia de las estrellas
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -541,16 +546,16 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Licencia
|
## 📜 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
|
## 🙏 Agradecimientos
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Mostrar agradecimientos</summary>
|
<summary>Ver agradecimientos</summary>
|
||||||
|
|
||||||
<div align="center">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Componentes principales</th></tr>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Bibliotecas y marcos</th></tr>
|
<tr class="section"><th colspan="2">Librerías y Frameworks</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>Marco GUI</td>
|
<td>Framework de GUI</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Procesamiento de imágenes</td>
|
||||||
</tr>
|
</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>
|
<td>Solicitudes HTTP</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">embalaje</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Manejo de versiones y paquetes</td>
|
<td>Gestión de versiones y empaquetado</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">rebaja</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>Representación de rebajas</td>
|
<td>Renderizado de Markdown</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Registro</td>
|
<td>Logging</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Activos y contribuyentes</th></tr>
|
<tr class="section"><th colspan="2">Activos y Colaboradores</th></tr>
|
||||||
<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>
|
<td>Sonido de notificación</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -607,7 +613,7 @@ Este proyecto tiene la licencia MIT; consulte el archivo [LICENSE](../LICENSE) p
|
|||||||
|
|
||||||
## ⚠️ Descargo de responsabilidad
|
## ⚠️ 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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+246
-240
@@ -13,33 +13,33 @@
|
|||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Un téléchargeur YouTube moderne avec une interface PySide6 épurée.**
|
**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)
|
Anglais : [EN](../README.md)
|
||||||
| Titre : [AR](README.ar.md)
|
| Arabe : [AR](README.ar.md)
|
||||||
| Allemand : [DE](README.de.md)
|
| Allemand : [DE](README.de.md)
|
||||||
| Espagnol : [ES](README.es.md)
|
| Espagnol : [ES](README.es.md)
|
||||||
| Anglais: [FR](README.fr.md)
|
| Français : [FR](README.fr.md)
|
||||||
| Nom : [HI](README.hi.md)
|
| Hindi : [HI](README.hi.md)
|
||||||
| Bahasa Indonésie : [ID](README.id.md)
|
| Indonésien : [ID](README.id.md)
|
||||||
| Italien : [IT](README.it.md)
|
| Italien : [IT](README.it.md)
|
||||||
| Nom : [JA](README.ja.md)
|
| Japonais : [JA](README.ja.md)
|
||||||
| Polski : [PL](README.pl.md)
|
| Polonais : [PL](README.pl.md)
|
||||||
| Portugais : [PT](README.pt.md)
|
| Portugais : [PT](README.pt.md)
|
||||||
| Russe : [RU](README.ru.md)
|
| Russe : [RU](README.ru.md)
|
||||||
| Turc : [TR](README.tr.md)
|
| Turc : [TR](README.tr.md)
|
||||||
| Nom : [ZH](README.zh.md)
|
| Chinois : [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Installation</a> •
|
<a href="#installation">Installation</a> •
|
||||||
<a href="#features">Caractéristiques</a> •
|
<a href="#features">Fonctionnalités</a> •
|
||||||
<a href="#usage">Utilisation</a> •
|
<a href="#usage">Utilisation</a> •
|
||||||
<a href="#screenshots">Captures d'écran</a> •
|
<a href="#screenshots">Captures d'écran</a> •
|
||||||
<a href="#troubleshooting">Dépannage</a> •
|
<a href="#troubleshooting">Dépannage</a> •
|
||||||
<a href="#sponsor">Commanditaire</a> •
|
<a href="#sponsor">Sponsor</a> •
|
||||||
<a href="#contributing">Contribuer</a>
|
<a href="#contributing">Contribution</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -47,39 +47,40 @@ Anglais : [EN](../README.md)
|
|||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="why-ytsage"></a>
|
||||||
## ❓Pourquoi YTSage ?
|
## ❓ Pourquoi YTSage ?
|
||||||
|
|
||||||
YTSage est conçu pour les utilisateurs qui souhaitent un **téléchargeur YouTube simple mais puissant**. Contrairement à d’autres outils, il propose :
|
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
|
- 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
|
- Fonctionnalités avancées comme SponsorBlock, la fusion des sous-titres et la sélection de playlists
|
||||||
- Mode générique en option pour les sites pris en charge par yt-dlp au-delà de YouTube
|
- Mode générique (Generic Mode) optionnel pour les sites pris en charge par yt-dlp au-delà de YouTube
|
||||||
- Prise en charge multiplateforme et installation facile
|
- Support multiplateforme et installation facile
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="features"></a>
|
||||||
## ✨ Caractéristiques
|
## ✨ Fonctionnalités
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Fonctionnalités principales | Fonctionnalités avancées | Fonctionnalités supplémentaires |
|
| Fonctionnalités de base | Fonctionnalités avancées | Fonctionnalités supplémentaires |
|
||||||
|--------------------------------------------------|-----------------------------------------|--------------------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Formater le tableau | 🚫 Intégration SponsorBlock | 🎞️ Affichage FPS/HDR |
|
| 🎥 Tableau des formats | 🚫 Intégration de SponsorBlock | 🎞️ Affichage FPS/HDR |
|
||||||
| 🎵 Extraction audio | 📝 Sélection et fusion de sous-titres multiples | 🔄 Mise à jour automatique yt-dlp |
|
| 🎵 Extraction audio | 📝 Sélection et fusion de sous-titres | 🔄 Mise à jour automatique de yt-dlp |
|
||||||
| ✨ Interface utilisateur simple | 💾 Enregistrer la description et la vignette | 🛠️ Détection FFmpeg/yt-dlp/Deno |
|
| ✨ Interface utilisateur simple | 💾 Enregistrement de la description et de la miniature | 🛠️ Détection de FFmpeg/yt-dlp/Deno |
|
||||||
| 📋 Prise en charge et sélecteur de playlist | 🚀 Limiteur de vitesse | ⚙️ Commandes personnalisées |
|
| 📋 Support et sélecteur de playlists | 🚀 Limiteur de vitesse | ⚙️ Commandes personnalisées |
|
||||||
| 📑 Intégrer les chapitres | ✂️ Couper les sections vidéo | 🍪 Connectez-vous avec les cookies |
|
| 📑 Intégration des chapitres | ✂️ Découpage de sections vidéo | 🍪 Connexion avec Cookies |
|
||||||
| 📜 Historique des téléchargements | 🔄 Sélection des chaînes de sortie | 🌐 Assistance proxy |
|
| 📜 Historique des téléchargements | 🔄 Sélection du canal de version | 🌐 Support Proxy |
|
||||||
| 🎚️ Conversion de formats audio | 🎬 Paramètres de format vidéo | 🆙 Onglet de mise à jour intégré |
|
| 🎚️ 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 |
|
| 🌍 Mode générique | 🔊 Normalisation audio (EBU R128) | 🌍 Localisation en 14 langues |
|
||||||
|
| 💾 Exportation de playlists | ⚙️ Qualité et sous-titres par défaut | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="installation"></a>
|
||||||
## 🚀Installation
|
## 🚀 Installation
|
||||||
|
|
||||||
### ⚡ Installation rapide (recommandé)
|
### ⚡ Installation rapide (Recommandé)
|
||||||
|
|
||||||
Installez YTSage depuis PyPI :
|
Installez YTSage via PyPI :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
@@ -100,81 +101,81 @@ Lancez ensuite l'application :
|
|||||||
ytsage
|
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 |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Installateur standard |
|
|  | Installateur standard |
|
||||||
|  | Avec FFmpeg fourni |
|
|  | Avec FFmpeg inclus |
|
||||||
|  | Version portable, aucune installation requise |
|
|  | Version portable, aucune installation requise |
|
||||||
|  | Portable avec FFmpeg, zippé |
|
|  | Portable avec FFmpeg, zippé |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Étapes d'installation</summary>
|
<summary>🛠️ Étapes d'installation</summary>
|
||||||
|
|
||||||
1. **EXE Installer (`.exe`)** : Double-cliquez sur le fichier et suivez l'assistant d'installation.
|
1. **Installateur EXE (`.exe`)** : Double-cliquez sur le fichier et suivez l'assistant de configuration.
|
||||||
2. **Version portable (`.zip`)** : Extrayez l'archive à l'emplacement souhaité et exécutez `ytsage.exe`.
|
2. **Version portable (`.zip`)** : Extrayez l'archive vers l'emplacement souhaité et lancez `ytsage.exe`.
|
||||||
3. **FFmpeg Bundled** : Choisissez les versions groupées de FFmpeg si FFmpeg n'est pas installé sur votre système.
|
3. **FFmpeg inclus** : Choisissez les versions avec FFmpeg inclus si vous n'avez pas FFmpeg installé sur votre système.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Formater | Descriptif |
|
| Format | Description |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Paquet Debian |
|
|  | Paquet Debian |
|
||||||
|  | AppImage, portable |
|
|  | AppImage, portable |
|
||||||
|  | Paquet RPM |
|
|  | Paquet RPM |
|
||||||
|  | Paquet Flatpak |
|
|  | Flatpak Bundle |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Étapes d'installation</summary>
|
<summary>🛠️ Étapes d'installation</summary>
|
||||||
|
|
||||||
- **DEB (`.deb`)** :
|
- **DEB (`.deb`)** :
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **AppImage (`.AppImage`)** :
|
- **AppImage (`.AppImage`)** :
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **Flatpak** : suivez les instructions sur Flathub ou exécutez :
|
- **Flatpak** : Suivez les instructions sur Flathub ou lancez :
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🍎macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
| Formater | Descriptif |
|
| Format | Description |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Application zippée pour Apple Silicon |
|
|  | Application zippée pour Apple Silicon |
|
||||||
|  | Programme d’installation d’image disque pour Apple Silicon |
|
|  | Installateur d'image disque pour Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Étapes d'installation</summary>
|
<summary>🛠️ Étapes d'installation</summary>
|
||||||
|
|
||||||
- **DMG Installer (`.dmg`)** : Double-cliquez pour monter, puis faites glisser `YTSage.app` dans votre dossier Applications.
|
- **Installateur DMG (`.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.
|
- **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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<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
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
@@ -183,7 +184,7 @@ cd YTSage
|
|||||||
|
|
||||||
### 2. Installer les dépendances
|
### 2. Installer les dépendances
|
||||||
|
|
||||||
#### ⚡Avec uv
|
#### ⚡ Avec uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
@@ -195,7 +196,7 @@ uv pip install .
|
|||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Exécutez l'application
|
### 3. Lancer l'application
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -209,147 +210,151 @@ python -m ytsage.main
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Téléchargement de playlist" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Paramètres de téléchargement</em></td>
|
<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>
|
||||||
<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/audio_format.png" alt="Sélection du format audio" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Options personnalisées" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Format audio</em></td>
|
<td align="center"><em>Format audio</em></td>
|
||||||
<td align="center"><em>Options personnalisées</em></td>
|
<td align="center"><em>Options personnalisées</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="usage"></a>
|
||||||
## 📖 Utilisation
|
## 📖 Utilisation
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Utilisation de base</summary>
|
<summary>🎯 Utilisation de base</summary>
|
||||||
|
|
||||||
1. **Lancer YTSage**
|
1. **Lancez YTSage**
|
||||||
2. **Collez l'URL YouTube** (ou utilisez le bouton « Coller l'URL »)
|
2. **Collez l'URL YouTube** (ou utilisez le bouton "Paste URL")
|
||||||
3. **Cliquez sur « Analyser »**
|
3. **Cliquez sur "Analyze"**
|
||||||
4. **Sélectionnez le format :**
|
4. **Sélectionnez le format :**
|
||||||
- `Video` pour les téléchargements de vidéos
|
- `Video` pour les téléchargements vidéo
|
||||||
- `Audio Only` pour l'extraction audio
|
- `Audio Only` pour l'extraction audio
|
||||||
5. **Choisissez les options :**
|
5. **Choisissez les options :**
|
||||||
- Activer les sous-titres et sélectionner la langue
|
- Activer les sous-titres et sélectionner la langue
|
||||||
- Activer la fusion des sous-titres
|
- Activer la fusion des sous-titres
|
||||||
- Enregistrer la vignette
|
- Enregistrer la miniature
|
||||||
- Supprimer les segments de sponsors
|
- Supprimer les segments sponsorisés
|
||||||
- Enregistrer la description
|
- Enregistrer la description
|
||||||
- Intégrer des chapitres
|
- Intégrer les chapitres
|
||||||
6. **Sélectionnez le répertoire de sortie**
|
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>
|
||||||
|
|
||||||
<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**
|
1. **Collez l'URL de la playlist**
|
||||||
2. **Cliquez sur « Analyser »**
|
2. **Cliquez sur "Analyze"**
|
||||||
3. ** Sélectionnez des vidéos dans le sélecteur de playlist (facultatif, par défaut : toutes) **
|
3. **Sélectionnez les vidéos du sélecteur de playlist (optionnel, toutes par défaut)**
|
||||||
4. **Choisissez le format/qualité souhaité**
|
4. **Choisissez le format/la qualité souhaitée**
|
||||||
5. **Cliquez sur "Télécharger"**
|
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>
|
||||||
|
|
||||||
<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`.
|
1. Ouvrez `Download Settings`.
|
||||||
2. Activez `Generic Mode`.
|
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`.
|
4. Cliquez sur `Analyze`.
|
||||||
5. Choisissez un format et téléchargez comme d'habitude.
|
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.
|
- 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>
|
||||||
|
|
||||||
<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
|
- **Options de sous-titres :** Filtrer les langues et intégrer les 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
|
- **Fusion de sous-titres :** Fusionner les sous-titres dans le fichier vidéo pour des sous-titres incrustés (hardcoded).
|
||||||
- **Enregistrer la description :** Enregistrez la description de la vidéo sous forme de fichier texte
|
- **Enregistrer la description :** Enregistrer 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
|
- **Enregistrer la miniature :** Enregistrer la miniature de la vidéo sous forme de fichier image.
|
||||||
- **Intégrer les chapitres :** Intégrer des marqueurs de chapitre en tant que métadonnées pour les lecteurs vidéo compatibles
|
- **Intégrer les chapitres :** Intégrer les marqueurs de chapitres comme 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
|
- **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 de temps au format `HH:MM:SS`
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️ Paramètres de sortie et de fichier</summary>
|
<summary>⚙️ Paramètres de sortie et de fichier</summary>
|
||||||
|
|
||||||
- **Speed Limiter :** Limitez la vitesse de téléchargement, par exemple `500K` à 500 Ko/s
|
- **Limiteur de vitesse :** Limiter la vitesse de téléchargement, par exemple `500K` pour 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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Normalisation audio :** Standardisez le volume pour les téléchargements audio uniquement à l'aide de l'EBU R128.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Accès et réseau</summary>
|
<summary>🌐 Accès et réseau</summary>
|
||||||
|
|
||||||
- **Connexion avec des cookies :** Connectez-vous à YouTube en utilisant des cookies pour accéder au contenu privé.
|
- **Connexion avec cookies :** Connectez-vous à YouTube à l'aide de cookies pour accéder au contenu privé.
|
||||||
Comment l'utiliser :
|
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.
|
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 :
|
2. Alternativement, extrayez 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)
|
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
|
b. Copiez les cookies au format Netscape
|
||||||
c. Créez un fichier nommé `cookies.txt` et collez-y les cookies
|
c. Créez un fichier nommé `cookies.txt` et collez-y les cookies
|
||||||
d. Sélectionnez le fichier `cookies.txt` dans l'application
|
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>`
|
- **Support 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**.
|
- **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>
|
||||||
|
|
||||||
<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
|
- **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 :
|
- **Onglet de mise à jour :** Gérez les outils de mise à jour intégrés depuis un seul endroit dans Options personnalisées :
|
||||||
- **Mises à jour yt-dlp :** Vérifiez les mises à jour et basculez entre les versions stables et nocturnes
|
- **Mises à jour de yt-dlp :** Vérifiez les mises à jour et basculez entre les canaux de version Stable et Nightly.
|
||||||
- **FFmpeg Version Checker :** Vérifiez votre version de FFmpeg et ouvrez les guides d'installation
|
- **Vérificateur de version FFmpeg :** Vérifiez votre version de FFmpeg et ouvrez les guides d'installation.
|
||||||
- **Mises à jour Deno :** Vérifiez et mettez à jour le runtime Deno
|
- **Mises à jour de Deno :** Vérifiez et mettez à jour le moteur d'exécution 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.
|
- **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 des vignettes et des statuts à partir du bouton **Historique**.
|
- **Historique des téléchargements :** Affichez les téléchargements passés avec les miniatures et les statuts depuis le bouton **History**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Localisation</summary>
|
<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
|
### Langues prises en charge
|
||||||
|
|
||||||
| Langue | Codes | Langue | Codes |
|
| Langue | Code | Langue | Code |
|
||||||
|--------------|------|--------------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 Anglais | `en` | Espagnol | `es` |
|
| 🇺🇸 Anglais | `en` | 🇪🇸 Espagnol | `es` |
|
||||||
| 🇸🇦 Arabe | `ar` | 🇫🇷 Français | `fr` |
|
| 🇸🇦 Arabe | `ar` | 🇫🇷 Français | `fr` |
|
||||||
| 🇩🇪 Allemand | `de` | 🇮🇳 Hindi | `hi` |
|
| 🇩🇪 Allemand | `de` | 🇮🇳 Hindi | `hi` |
|
||||||
| 🇮🇩 Indonésien | `id` | 🇮🇹 Italien | `it` |
|
| 🇮🇩 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` |
|
| 🇧🇷 Portugais | `pt` | 🇷🇺 Russe | `ru` |
|
||||||
| 🇹🇷 Turc | `tr` | 🇨🇳 Chinois | `zh` |
|
| 🇹🇷 Turc | `tr` | 🇨🇳 Chinois | `zh` |
|
||||||
|
|
||||||
### Traductions README
|
### Traductions du README
|
||||||
|
|
||||||
| Langue | Fichier | Langue | Fichier |
|
| 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) |
|
| 🇸🇦 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) |
|
| 🇩🇪 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) |
|
| 🇮🇩 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) |
|
| 🇧🇷 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) |
|
| 🇹🇷 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>
|
</details>
|
||||||
|
|
||||||
@@ -377,22 +382,22 @@ YTSage prend en charge **14 langues** pour une accessibilité mondiale. Sélecti
|
|||||||
## 🛠️ Dépannage
|
## 🛠️ Dépannage
|
||||||
|
|
||||||
<details>
|
<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.
|
- **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.
|
- **É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 :**
|
- **Erreurs de téléchargement spécifiques :**
|
||||||
- **Vidéos privées :** Utilisez l'authentification par cookie pour accéder au contenu privé.
|
- **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 des vidéos soumises à une limite d'âge.
|
- **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 :** Pensez à utiliser un VPN pour contourner les restrictions régionales.
|
- **Vidéos géo-bloquées :** Envisagez d'utiliser un VPN pour contourner les restrictions régionales.
|
||||||
- **Vidéos supprimées/supprimées :** La vidéo n'est plus disponible sur YouTube.
|
- **Vidéos 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.
|
- **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.
|
- **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.
|
- **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.
|
- **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.
|
- **Blocages pour 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é.
|
- **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 consiste à télécharger le fichier `YTSage-v<version>-ffmpeg.exe`, fourni avec FFmpeg.
|
- **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.
|
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 :**
|
**Pourquoi cela se produit :**
|
||||||
- L'heuristique antivirus peut identifier à tort les exécutables compressés comme suspects
|
- L'heuristique des antivirus peut identifier par erreur les exécutables packagés comme suspects.
|
||||||
|
|
||||||
**Alternatives sûres :**
|
**Alternatives sûres :**
|
||||||
- ✅ **Utiliser l'installation pip :** `pip install ytsage` (recommandé)
|
- ✅ **Utilisez l'installation pip :** `pip install ytsage` (recommandé)
|
||||||
- ✅ **Construire à partir des sources** : en suivant ceci [guide](../.github/CI_CD_README.md)
|
- ✅ **Compiler à partir des sources** : en suivant ce [guide](.github/CI_CD_README.md)
|
||||||
- ✅ **Liste blanche de l'application** dans votre logiciel antivirus
|
- ✅ **Mettre l'application en liste blanche** dans votre logiciel antivirus.
|
||||||
|
|
||||||
#### 🍎 macOS : "L'application est endommagée et ne peut pas être ouverte"
|
#### 🍎 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.
|
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).
|
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 :
|
2. **Tapez la commande suivante** mais **n'appuyez pas** encore sur Entrée. Assurez-vous d'inclure l'espace à la fin :
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
4. **Appuyez sur Entrée** pour exécuter la commande.
|
||||||
5. **Essayez d'ouvrir à nouveau YTSage.app.** Il devrait maintenant se lancer correctement.
|
5. **Essayez d'ouvrir à nouveau YTSage.app.** Il devrait maintenant se lancer correctement.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **Emplacements de configuration (avancé)**
|
#### **Emplacements de configuration (Avancé)**
|
||||||
- **Windows :** `%LOCALAPPDATA%\YTSage`
|
- **Windows :** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS :** `~/Library/Application Support/YTSage`
|
- **macOS :** `~/Library/Application Support/YTSage`
|
||||||
- **Linux :** `~/.local/share/YTSage`
|
- **Linux :** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<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
|
- GitHub Sponsors : https://github.com/sponsors/oop7
|
||||||
- Le lien du sponsor est également disponible directement dans l'application à partir de la boîte de dialogue À propos.
|
- Le lien de parrainage est également disponible directement dans l'application via la boîte de dialogue À propos.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<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
|
1. 🍴 Forkez le dépôt
|
||||||
2. 🌿 Créez votre branche de fonctionnalités :
|
2. 🌿 Créez votre branche de fonctionnalité :
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/AmazingFeature
|
||||||
```
|
```
|
||||||
3. 💾 Validez vos modifications :
|
3. 💾 Committez vos modifications :
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Add some AmazingFeature'
|
||||||
```
|
```
|
||||||
4. 📤 Push vers l'agence :
|
4. 📤 Pushez vers la branche :
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
git push origin feature/AmazingFeature
|
||||||
```
|
```
|
||||||
5. 🔄 Ouvrir une Pull Request
|
5. 🔄 Ouvrez une Pull Request
|
||||||
|
|
||||||
### 🌍 Contribuer aux traductions
|
### 🌍 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`
|
- 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>
|
<details>
|
||||||
<summary>📂 Structure du projet</summary>
|
<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
|
### 📁 Structure du projet
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # Configuration GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Modèles de tickets
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Modèle de rapport de bug
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # Workflows GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Workflow de build Linux
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # Workflow de build macOS
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Workflow de build Windows
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Workflow de release master
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # Documentation CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Actifs de marque (Captures d'écran, SVGs)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Icônes de l'application
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Captures d'écran pour la documentation
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # Actifs SVG
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # Fichier de licence
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Métadonnées du projet et dépendances
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Documentation du projet
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Dépendances Python (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Paquet source
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Actifs d'exécution
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Icônes de l'application
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Fichiers audio
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Fichiers de localisation
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Traduction arabe
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Traduction allemande
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Traduction anglaise
|
||||||
│ └── ... # Other languages
|
│ └── ... # Autres langues
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Logique métier principale
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py # Initialisation du paquet core
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Intégration Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Fonctionnalité de téléchargement
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # Intégration FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Fonctions utilitaires
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # Intégration yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Composants de l'interface utilisateur
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py # Initialisation du paquet GUI
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Fenêtre principale de l'application
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Classes de dialogues
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Modules utilitaires
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py # Initialisation du paquet utils
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Gestion de la configuration
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Utilitaires de log
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Point d'entrée du paquet
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Script d'exécution principal
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Histoire des étoiles
|
## ⭐️ Historique des étoiles
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Historique des étoiles
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -541,7 +546,7 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Licence
|
## 📜 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
|
## 🙏 Remerciements
|
||||||
|
|
||||||
@@ -550,7 +555,7 @@ Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus
|
|||||||
|
|
||||||
<div align="center">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Composants de base</th></tr>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>Traitement multimédia</td>
|
<td>Traitement média</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Runtime pour l'intégration avec yt-dlp</td>
|
||||||
</tr>
|
</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>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>Cadre GUI</td>
|
<td>Framework GUI</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Traitement d'images</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><a href="https://requests.readthedocs.io/">demandes</a></td>
|
<tr>
|
||||||
<td>Demandes HTTP</td>
|
<td><a href="https://requests.readthedocs.io/">requests</a></td>
|
||||||
|
<td>Requêtes HTTP</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">emballage</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Version et gestion des packages</td>
|
<td>Gestion des versions et des paquets</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Journalisation</td>
|
<td>Logging</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Actifs et contributeurs</th></tr>
|
<tr class="section"><th colspan="2">Actifs & Contributeurs</th></tr>
|
||||||
<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>
|
<td>Son de notification</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -605,7 +611,7 @@ Ce projet est sous licence MIT - voir le fichier [LICENSE](../LICENSE) pour plus
|
|||||||
|
|
||||||
</details>
|
</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.
|
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">
|
<div align="center">
|
||||||
|
|
||||||
Réalisé avec ❤️ par [oop7](https://github.com/oop7)
|
Fait avec ❤️ par [oop7](https://github.com/oop7)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+247
-240
@@ -12,29 +12,29 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**स्वच्छ PySide6 इंटरफ़ेस वाला एक आधुनिक YouTube डाउनलोडर।**
|
**एक आधुनिक YouTube डाउनलोडर, एक स्वच्छ PySide6 इंटरफ़ेस के साथ।**
|
||||||
किसी भी गुणवत्ता में वीडियो डाउनलोड करें, ऑडियो निकालें, उपशीर्षक प्राप्त करें और बहुत कुछ करें।
|
किसी भी गुणवत्ता में वीडियो डाउनलोड करें, ऑडियो निकालें, उपशीर्षक प्राप्त करें, और बहुत कुछ।
|
||||||
|
|
||||||
### 🌍 रीडमी भाषाएँ
|
### 🌍 README भाषाएँ
|
||||||
|
|
||||||
अंग्रेज़ी: [EN](../README.md)
|
अंग्रेज़ी: [EN](../README.md)
|
||||||
| उत्तर: [AR](README.ar.md)
|
| अरबी: [AR](README.ar.md)
|
||||||
| जर्मन: [DE](README.de.md)
|
| जर्मन: [DE](README.de.md)
|
||||||
| Español: [ES](README.es.md)
|
| स्पेनिश: [ES](README.es.md)
|
||||||
| फ़्रेंच: [FR](README.fr.md)
|
| फ्रेंच: [FR](README.fr.md)
|
||||||
| हिन्दी: [HI](README.hi.md)
|
| हिंदी: [HI](README.hi.md)
|
||||||
| बहासा इंडोनेशिया: [ID](README.id.md)
|
| इंडोनेशियाई: [ID](README.id.md)
|
||||||
| इटालियनो: [IT](README.it.md)
|
| इतालवी: [IT](README.it.md)
|
||||||
| उत्तर: [JA](README.ja.md)
|
| जापानी: [JA](README.ja.md)
|
||||||
| पोल्स्की: [PL](README.pl.md)
|
| पोलिश: [PL](README.pl.md)
|
||||||
| पुर्तगाली: [PT](README.pt.md)
|
| पुर्तगाली: [PT](README.pt.md)
|
||||||
| Русский: [RU](README.ru.md)
|
| रूसी: [RU](README.ru.md)
|
||||||
| तुर्की: [TR](README.tr.md)
|
| तुर्की: [TR](README.tr.md)
|
||||||
| उत्तर: [ZH](README.zh.md)
|
| चीनी: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">स्थापना</a> •
|
<a href="#installation">स्थापना</a> •
|
||||||
<a href="#features">विशेषताएं</a> •
|
<a href="#features">विशेषताएँ</a> •
|
||||||
<a href="#usage">उपयोग</a> •
|
<a href="#usage">उपयोग</a> •
|
||||||
<a href="#screenshots">स्क्रीनशॉट</a> •
|
<a href="#screenshots">स्क्रीनशॉट</a> •
|
||||||
<a href="#troubleshooting">समस्या निवारण</a> •
|
<a href="#troubleshooting">समस्या निवारण</a> •
|
||||||
@@ -49,12 +49,12 @@
|
|||||||
<a id="why-ytsage"></a>
|
<a id="why-ytsage"></a>
|
||||||
## ❓ YTSage क्यों?
|
## ❓ YTSage क्यों?
|
||||||
|
|
||||||
YTSage उन उपयोगकर्ताओं के लिए डिज़ाइन किया गया है जो **सरल लेकिन शक्तिशाली YouTube डाउनलोडर** चाहते हैं। अन्य उपकरणों के विपरीत, यह प्रदान करता है:
|
YTSage उन उपयोगकर्ताओं के लिए डिज़ाइन किया गया है जो एक **सरल लेकिन शक्तिशाली YouTube डाउनलोडर** चाहते हैं। अन्य उपकरणों के विपरीत, यह प्रदान करता है:
|
||||||
|
|
||||||
- एक साफ़, आधुनिक PySide6 इंटरफ़ेस
|
- एक आधुनिक और स्वच्छ PySide6 इंटरफ़ेस
|
||||||
- वीडियो, ऑडियो और उपशीर्षक के लिए एक-क्लिक डाउनलोड
|
- वीडियो, ऑडियो और उपशीर्षक के लिए वन-क्लिक डाउनलोड
|
||||||
- स्पॉन्सरब्लॉक, उपशीर्षक विलय और प्लेलिस्ट चयन जैसी उन्नत सुविधाएँ
|
- SponsorBlock, उपशीर्षक मर्जिंग, और प्लेलिस्ट चयन जैसी उन्नत सुविधाएँ
|
||||||
- YouTube से परे yt-dlp-समर्थित साइटों के लिए वैकल्पिक जेनेरिक मोड
|
- YouTube से इतर yt-dlp द्वारा समर्थित साइटों के लिए वैकल्पिक जेनेरिक मोड
|
||||||
- क्रॉस-प्लेटफ़ॉर्म समर्थन और आसान स्थापना
|
- क्रॉस-प्लेटफ़ॉर्म समर्थन और आसान स्थापना
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="features"></a>
|
||||||
@@ -62,31 +62,32 @@ YTSage उन उपयोगकर्ताओं के लिए डिज़
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| मुख्य विशेषताएं | उन्नत सुविधाएँ | अतिरिक्त सुविधाएँ |
|
| बुनियादी विशेषताएँ | उन्नत विशेषताएँ | अतिरिक्त विशेषताएँ |
|
||||||
|------------------------------------------------|------------------------------------------------|------------------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 प्रारूप तालिका | 🚫प्रायोजकब्लॉक एकीकरण | 🎞️ एफपीएस/एचडीआर डिस्प्ले |
|
| 🎥 प्रारूप तालिका | 🚫 SponsorBlock एकीकरण | 🎞️ FPS/HDR डिस्प्ले |
|
||||||
| 🎵 ऑडियो निष्कर्षण | 📝 बहु-उपशीर्षक चुनें और मर्ज करें | 🔄 ऑटो-अपडेट yt-dlp |
|
| 🎵 ऑडियो निष्कर्षण | 📝 उपशीर्षक चयन और मर्जिंग | 🔄 ऑटो yt-dlp अपडेट |
|
||||||
| ✨ सरल यूआई | 💾 विवरण और थंबनेल सहेजें | 🛠️ FFmpeg/yt-dlp/Deno डिटेक्शन |
|
| ✨ सरल यूजर इंटरफेस | 💾 विवरण और थंबनेल सहेजें | 🛠️ FFmpeg/yt-dlp/Deno डिटेक्शन |
|
||||||
| 📋 प्लेलिस्ट समर्थन और चयनकर्ता | 🚀 गति सीमक | ⚙️ कस्टम कमांड |
|
| 📋 प्लेलिस्ट समर्थन और चयनकर्ता | 🚀 गति सीमित करने वाला | ⚙️ कस्टम कमांड |
|
||||||
| 📑 अध्याय एम्बेड करें | ✂️ वीडियो अनुभाग ट्रिम करें | 🍪 कुकीज़ के साथ लॉगिन करें |
|
| 📑 अध्याय एकीकरण | ✂️ वीडियो अनुभाग ट्रिम करें | 🍪 कुकी लॉगिन |
|
||||||
| 📜इतिहास डाउनलोड करें | 🔄रिलीज़ चैनल चयन | 🌐 प्रॉक्सी सपोर्ट |
|
| 📜 डाउनलोड इतिहास | 🔄 रिलीज़ चैनल चयन | 🌐 प्रॉक्सी समर्थन |
|
||||||
| 🎚️ ऑडियो प्रारूप रूपांतरण | 🎬 वीडियो प्रारूप सेटिंग्स | 🆙 बिल्ट-इन अपडेटर टैब |
|
| 🎚️ ऑडियो प्रारूप रूपांतरण | 🎬 वीडियो प्रारूप सेटिंग्स | 🆙 एकीकृत अपडेट टैब |
|
||||||
| 🌍 जेनेरिक मोड | 🔊 ऑडियो सामान्यीकरण (EBU R128) | 🌍14 भाषाओं में स्थानीयकरण |
|
| 🌍 जेनेरिक मोड | 🔊 ऑडियो सामान्यीकरण (EBU R128) | 🌍 14 भाषाओं में स्थानीयकरण |
|
||||||
|
| 💾 प्लेलिस्ट निर्यात | ⚙️ डिफ़ॉल्ट गुणवत्ता और उपशीर्षक | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="installation"></a>
|
||||||
## 🚀 स्थापना
|
## 🚀 स्थापना
|
||||||
|
|
||||||
### ⚡ त्वरित इंस्टाल (अनुशंसित)
|
### ⚡ त्वरित स्थापना (अनुशंसित)
|
||||||
|
|
||||||
PyPI से YTSage इंस्टॉल करें:
|
PyPI के माध्यम से YTSage स्थापित करें:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄मौजूदा इंस्टॉलेशन को अपडेट करें</summary>
|
<summary>🔄 मौजूदा स्थापना को अपडेट करें</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,87 +95,87 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
फिर ऐप लॉन्च करें:
|
फिर एप्लिकेशन चलाएँ:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 📦 पूर्व-निर्मित निष्पादनयोग्य
|
### 📦 प्री-बिल्ट एक्जीक्यूटेबल्स (एक्ज़ीक्यूटेबल्स)
|
||||||
|
|
||||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
> [👉 नवीनतम रिलीज़ डाउनलोड करें](https://github.com/oop7/YTSage/releases/latest)
|
||||||
|
|
||||||
#### 🪟 खिड़कियाँ
|
#### 🪟 Windows
|
||||||
|
|
||||||
| प्रारूप | विवरण |
|
| प्रारूप | विवरण |
|
||||||
|-------|----|
|
|--------|-------------|
|
||||||
|  | मानक इंस्टॉलर |
|
|  | मानक इंस्टॉलर |
|
||||||
|  | FFmpeg बंडल के साथ |
|
|  | FFmpeg के साथ |
|
||||||
|  | पोर्टेबल संस्करण, किसी इंस्टॉलेशन की आवश्यकता नहीं |
|
|  | पोर्टेबल संस्करण, स्थापना की आवश्यकता नहीं है |
|
||||||
|  | FFmpeg के साथ पोर्टेबल, ज़िपित |
|
|  | FFmpeg के साथ पोर्टेबल, ज़िप्ड |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ इंस्टालेशन चरण</summary>
|
<summary>🛠️ स्थापना चरण</summary>
|
||||||
|
|
||||||
1. **EXE इंस्टॉलर (`.exe`)**: फ़ाइल पर डबल-क्लिक करें और सेटअप विज़ार्ड का पालन करें।
|
1. **EXE इंस्टॉलर (`.exe`)**: फ़ाइल पर डबल-क्लिक करें और सेटअप विज़ार्ड का पालन करें।
|
||||||
2. **पोर्टेबल संस्करण (`.zip`)**: संग्रह को अपने इच्छित स्थान पर निकालें और `ytsage.exe` चलाएँ।
|
2. **पोर्टेबल संस्करण (`.zip`)**: संग्रह को इच्छित स्थान पर निकालें और `ytsage.exe` चलाएँ।
|
||||||
3. **एफएफएमपीईजी बंडल**: यदि आपके सिस्टम पर एफएफएमपीईजी स्थापित नहीं है तो एफएफएमपीईजी बंडल संस्करण चुनें।
|
3. **बिल्ट-इन FFmpeg**: यदि आपके सिस्टम पर FFmpeg स्थापित नहीं है, तो बिल्ट-इन FFmpeg वाले संस्करण चुनें।
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 लिनक्स
|
#### 🐧 Linux
|
||||||
|
|
||||||
| प्रारूप | विवरण |
|
| प्रारूप | विवरण |
|
||||||
|-------|----|
|
|--------|-------------|
|
||||||
|  | डेबियन पैकेज |
|
|  | डेबियन पैकेज |
|
||||||
|  | ऐपइमेज, पोर्टेबल |
|
|  | AppImage, पोर्टेबल |
|
||||||
|  | आरपीएम पैकेज |
|
|  | RPM पैकेज |
|
||||||
|  | फ़्लैटपैक बंडल |
|
|  | Flatpak बंडल |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ इंस्टालेशन चरण</summary>
|
<summary>🛠️ स्थापना चरण</summary>
|
||||||
|
|
||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
sudo dpkg -i ytsage_*.deb
|
||||||
sudo apt-get install -f # Fix missing dependencies if any
|
sudo apt-get install -f # यदि आवश्यक हो तो गायब निर्भरताओं को ठीक करें
|
||||||
```
|
```
|
||||||
- **आरपीएम (`.rpm`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **ऐपइमेज (`.AppImage`)**:
|
- **AppImage (`.AppImage`)**:
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **फ्लैटपैक**: फ़्लैटहब पर निर्देशों का पालन करें या चलाएँ:
|
- **Flatpak**: Flathub पर निर्देशों का पालन करें या चलाएँ:
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🍎 मैकओएस
|
#### 🍎 macOS
|
||||||
|
|
||||||
| प्रारूप | विवरण |
|
| प्रारूप | विवरण |
|
||||||
|-------|----|
|
|--------|-------------|
|
||||||
|  | एप्पल सिलिकॉन के लिए ज़िप्ड एप्लिकेशन |
|
|  | Apple Silicon के लिए ज़िप्ड ऐप |
|
||||||
|  | एप्पल सिलिकॉन के लिए डिस्क छवि इंस्टॉलर |
|
|  | Apple Silicon के लिए डिस्क इमेज इंस्टॉलर |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ इंस्टालेशन चरण</summary>
|
<summary>🛠️ स्थापना चरण</summary>
|
||||||
|
|
||||||
- **डीएमजी इंस्टॉलर (`.dmg`)**: माउंट करने के लिए डबल-क्लिक करें, फिर `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में खींचें।
|
- **DMG इंस्टॉलर (`.dmg`)**: माउंट करने के लिए डबल-क्लिक करें, फिर `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में खींचें।
|
||||||
- **ऐप आर्काइव (`.zip`)**: ज़िप निकालें और `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में ले जाएं।
|
- **ऐप आर्काइव (`.zip`)**: ज़िप निकालें और `YTSage.app` को अपने एप्लिकेशन फ़ोल्डर में ले जाएँ।
|
||||||
|
|
||||||
*ध्यान दें: यदि आपको "ऐप क्षतिग्रस्त है" त्रुटि आती है, तो नीचे [macOS troubleshooting section](#troubleshooting) देखें।*
|
*नोट: यदि आपको "ऐप क्षतिग्रस्त है" त्रुटि मिलती है, तो नीचे macOS समस्या निवारण अनुभाग देखें।*
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻 स्रोत से मैन्युअल इंस्टालेशन</summary>
|
<summary>💻 स्रोत से मैन्युअल स्थापना</summary>
|
||||||
|
|
||||||
### 1. रिपॉजिटरी को क्लोन करें
|
### 1. रिपॉजिटरी क्लोन करें
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
@@ -183,13 +184,13 @@ cd YTSage
|
|||||||
|
|
||||||
### 2. निर्भरताएँ स्थापित करें
|
### 2. निर्भरताएँ स्थापित करें
|
||||||
|
|
||||||
#### ⚡ यूवी के साथ
|
#### ⚡ uv के साथ
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 या मानक पाइप के साथ
|
#### 📦 या मानक pip के साथ
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
@@ -209,324 +210,329 @@ python -m ytsage.main
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
<td><img src="../branding/screenshots/Download-Settings.png" alt="डाउनलोड सेटिंग्स" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="प्लेलिस्ट डाउनलोड" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>डाउनलोड सेटिंग्स</em></td>
|
<td align="center"><em>डाउनलोड सेटिंग्स</em></td>
|
||||||
<td align="center"><em>प्लेलिस्ट डाउनलोड</em></td>
|
<td align="center"><em>प्लेलिस्ट डाउनलोड</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="ऑडियो प्रारूप चयन" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="कस्टम विकल्प" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>ऑडियो फॉर्मेट</em></td>
|
<td align="center"><em>ऑडियो प्रारूप</em></td>
|
||||||
<td align="center"><em>कस्टम विकल्प</em></td>
|
<td align="center"><em>कस्टम विकल्प</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
## 📖 प्रयोग
|
<a id="usage"></a>
|
||||||
|
## 📖 उपयोग
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 मूल उपयोग</summary>
|
<summary>🎯 बुनियादी उपयोग</summary>
|
||||||
|
|
||||||
1. **YTSage लॉन्च करें**
|
1. **YTSage लॉन्च करें**
|
||||||
2. **यूट्यूब यूआरएल चिपकाएँ** (या "यूआरएल चिपकाएँ" बटन का उपयोग करें)
|
2. **YouTube URL पेस्ट करें** (या "Paste URL" बटन का उपयोग करें)
|
||||||
3. **"विश्लेषण करें" पर क्लिक करें**
|
3. **"Analyze" पर क्लिक करें**
|
||||||
4. **प्रारूप चुनें:**
|
4. **प्रारूप चुनें:**
|
||||||
- वीडियो डाउनलोड के लिए `Video`
|
- वीडियो डाउनलोड के लिए `Video`
|
||||||
- ऑडियो निष्कर्षण के लिए `Audio Only`
|
- ऑडियो निष्कर्षण के लिए `Audio Only`
|
||||||
5. **विकल्प चुनें:**
|
5. **विकल्प चुनें:**
|
||||||
- उपशीर्षक सक्षम करें और भाषा चुनें
|
- उपशीर्षक सक्षम करें और भाषा चुनें
|
||||||
- उपशीर्षक मर्ज सक्षम करें
|
- उपशीर्षक मर्जिंग सक्षम करें
|
||||||
- थंबनेल सहेजें
|
- थंबनेल सहेजें
|
||||||
- प्रायोजक खंड हटाएँ
|
- प्रायोजित अनुभाग हटाएँ
|
||||||
- विवरण सहेजें
|
- विवरण सहेजें
|
||||||
- अध्याय एम्बेड करें
|
- अध्याय एम्बेड करें
|
||||||
6. **आउटपुट डायरेक्टरी चुनें**
|
6. **आउटपुट निर्देशिका चुनें**
|
||||||
7. **"डाउनलोड" पर क्लिक करें**
|
7. **"Download" पर क्लिक करें**
|
||||||
|
|
||||||
> 💡 डिफ़ॉल्ट डाउनलोड निर्देशिका उपयोगकर्ता का "डाउनलोड" फ़ोल्डर है।
|
> 💡 डिफ़ॉल्ट डाउनलोड निर्देशिका उपयोगकर्ता का "Downloads" फ़ोल्डर है।
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 प्लेलिस्ट डाउनलोड</summary>
|
<summary>📋 प्लेलिस्ट डाउनलोड</summary>
|
||||||
|
|
||||||
1. **प्लेलिस्ट यूआरएल चिपकाएँ**
|
1. **प्लेलिस्ट URL पेस्ट करें**
|
||||||
2. **"विश्लेषण करें" पर क्लिक करें**
|
2. **"Analyze" पर क्लिक करें**
|
||||||
3. **प्लेलिस्ट चयनकर्ता से वीडियो चुनें (वैकल्पिक, सभी के लिए डिफ़ॉल्ट)**
|
3. **प्लेलिस्ट चयनकर्ता से वीडियो चुनें (वैकल्पिक, डिफ़ॉल्ट रूप से सभी)**
|
||||||
4. **वांछित प्रारूप/गुणवत्ता चुनें**
|
4. **वांछित प्रारूप/गुणवत्ता चुनें**
|
||||||
5. **"डाउनलोड" पर क्लिक करें**
|
5. **"Download" पर क्लिक करें**
|
||||||
|
|
||||||
> 💡 एप्लिकेशन स्वचालित रूप से डाउनलोड कतार को संभालता है
|
> 💡 एप्लिकेशन डाउनलोड कतार को स्वचालित रूप से प्रबंधित करता है, और आप प्लेलिस्ट प्रविष्टियों को `.txt`, `.csv`, `.m3u`, या `.json` फ़ाइलों के रूप में निर्यात कर सकते हैं।
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 गैर-यूट्यूब साइटों के लिए जेनेरिक मोड</summary>
|
<summary>🌍 गैर-YouTube साइटों के लिए जेनेरिक मोड</summary>
|
||||||
|
|
||||||
जब आप चाहते हैं कि YTSage, yt-dlp द्वारा समर्थित साइटों, जैसे कि डेलीमोशन, CBC जेम, टिकटॉक और अन्य से यूआरएल स्वीकार करे, तो जेनेरिक मोड का उपयोग करें।
|
जेनेरिक मोड (Generic Mode) का उपयोग तब करें जब आप चाहते हैं कि YTSage yt-dlp द्वारा समर्थित साइटों जैसे Dailymotion, CBC Gem, TikTok और अन्य से URL स्वीकार करे।
|
||||||
|
|
||||||
इसका उपयोग कैसे करें:
|
इसका उपयोग कैसे करें:
|
||||||
|
|
||||||
1. `Download Settings` खोलें।
|
1. `Download Settings` खोलें।
|
||||||
2. `Generic Mode` सक्षम करें।
|
2. `Generic Mode` सक्षम करें।
|
||||||
3. एक समर्थित गैर-यूट्यूब वीडियो या प्लेलिस्ट यूआरएल चिपकाएँ।
|
3. एक समर्थित वीडियो या प्लेलिस्ट URL पेस्ट करें जो YouTube नहीं है।
|
||||||
4. `Analyze` पर क्लिक करें।
|
4. `Analyze` पर क्लिक करें।
|
||||||
5. एक प्रारूप चुनें और हमेशा की तरह डाउनलोड करें।
|
5. एक प्रारूप चुनें और हमेशा की तरह डाउनलोड करें।
|
||||||
|
|
||||||
टिप्पणियाँ:
|
नोट्स:
|
||||||
|
|
||||||
- जेनेरिक मोड केवल YTSage के अंदर URL सत्यापन को बदलता है। लक्ष्य साइट को अभी भी आपके स्थापित yt-dlp संस्करण द्वारा समर्थित होना चाहिए।
|
- जेनेरिक मोड केवल YTSage के अंदर URL सत्यापन को बदलता है। लक्ष्य साइट अभी भी आपके स्थापित yt-dlp संस्करण द्वारा समर्थित होनी चाहिए।
|
||||||
- कुछ साइटों को एक्सट्रैक्टर के आधार पर कुकीज़, एक लॉगिन सत्र, एक प्रॉक्सी, या अतिरिक्त yt-dlp तर्क की आवश्यकता होती है।
|
- कुछ साइटों को एक्सट्रैक्टर के आधार पर कुकीज़, लॉगिन, प्रॉक्सी या अतिरिक्त yt-dlp तर्कों की आवश्यकता होती है।
|
||||||
- यदि कोई साइट विफल हो जाती है, तो समस्या की रिपोर्ट करने से पहले अंतर्निहित अपडेटर टैब से yt-dlp को अपडेट करें।
|
- यदि कोई साइट विफल हो जाती है, तो समस्या की रिपोर्ट करने से पहले एकीकृत अपडेट टैब से yt-dlp को अपडेट करें।
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰मीडिया और डाउनलोड विकल्प</summary>
|
<summary>🧰 मीडिया और डाउनलोड विकल्प</summary>
|
||||||
|
|
||||||
- **उपशीर्षक विकल्प:** भाषाओं को फ़िल्टर करें और वीडियो फ़ाइल में उपशीर्षक एम्बेड करें
|
- **उपशीर्षक विकल्प:** भाषाओं को फ़िल्टर करें और उपशीर्षक को वीडियो फ़ाइल में एम्बेड करें।
|
||||||
- **उपशीर्षक मर्ज:** हार्डकोडेड उपशीर्षक के लिए उपशीर्षक को वीडियो फ़ाइल में मर्ज करें
|
- **उपशीर्षक मर्जिंग:** हार्डकोडेड उपशीर्षक के लिए वीडियो फ़ाइल में उपशीर्षक मर्ज करें।
|
||||||
- **विवरण सहेजें:** वीडियो विवरण को टेक्स्ट फ़ाइल के रूप में सहेजें
|
- **विवरण सहेजें:** वीडियो विवरण को टेक्स्ट फ़ाइल के रूप में सहेजें।
|
||||||
- **थंबनेल सहेजें:** वीडियो थंबनेल को एक छवि फ़ाइल के रूप में सहेजें
|
- **थंबनेल सहेजें:** वीडियो थंबनेल को छवि फ़ाइल के रूप में सहेजें।
|
||||||
- **अध्याय एम्बेड करें:**संगत वीडियो प्लेयर के लिए मेटाडेटा के रूप में अध्याय मार्कर एम्बेड करें
|
- **अध्याय एम्बेड करें:** संगत वीडियो प्लेयर के लिए मेटाडेटा के रूप में अध्याय मार्कर शामिल करें।
|
||||||
- **प्रायोजक खंड हटाएं:** SponsorBlock का उपयोग करके वीडियो से प्रायोजक खंड हटाएं
|
- **प्रायोजित अनुभाग हटाएँ:** SponsorBlock का उपयोग करके वीडियो से प्रायोजित अनुभाग हटाएँ।
|
||||||
- **वीडियो ट्रिम करें:** `HH:MM:SS` प्रारूप में समय सीमा निर्दिष्ट करके वीडियो के केवल विशिष्ट भागों को डाउनलोड करें
|
- **वीडियो ट्रिम करें:** `HH:MM:SS` प्रारूप में समय सीमा निर्दिष्ट करके वीडियो के केवल विशिष्ट भागों को डाउनलोड करें।
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️ आउटपुट और फ़ाइल सेटिंग्स</summary>
|
<summary>⚙️ आउटपुट और फ़ाइल सेटिंग्स</summary>
|
||||||
|
|
||||||
- **स्पीड लिमिटर:** डाउनलोड स्पीड सीमित करें, उदाहरण के लिए `500K` 500 KB/s के लिए
|
- **गति सीमित करने वाला:** डाउनलोड गति को सीमित करें, उदाहरण के लिए `500K` 500 KB/s के लिए।
|
||||||
- **डाउनलोड पथ सहेजें:** भविष्य के डाउनलोड के लिए डिफ़ॉल्ट डाउनलोड पथ सहेजें। **डाउनलोड सेटिंग → डाउनलोड पथ** में उपलब्ध है।
|
- **डाउनलोड पथ सहेजें:** भविष्य के डाउनलोड के लिए डिफ़ॉल्ट डाउनलोड पथ सहेजता है। **Download Settings → Download Path** में उपलब्ध है।
|
||||||
- **आउटपुट फ़ाइल नाम प्रारूप:** `%(title)s`, `%(uploader)s`, और `%(resolution)s` जैसे वेरिएबल का उपयोग करके आउटपुट फ़ाइल नाम प्रारूप को अनुकूलित करें। **डाउनलोड सेटिंग्स → फ़ाइल नाम प्रारूप** में उपलब्ध है।- **फोर्स आउटपुट फॉर्मेट:** वीडियो डाउनलोड को एक विशिष्ट कंटेनर फॉर्मेट जैसे `mp4`, `webm`, या `mkv` में फोर्स करें। **डाउनलोड सेटिंग्स → आउटपुट फॉर्मेट सेटिंग्स** में उपलब्ध है।
|
- **डिफ़ॉल्ट वीडियो रिज़ॉल्यूशन:** स्वचालित चयन के लिए अपना पसंदीदा वीडियो रिज़ॉल्यूशन सेट करें (जैसे 1080p, 720p)। **Download Settings → Default Video Resolution** में उपलब्ध है।
|
||||||
- **ऑडियो प्रारूप रूपांतरण:** केवल-ऑडियो डाउनलोड को पसंदीदा प्रारूपों में परिवर्तित करें जैसे `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis`, या `Best`. **डाउनलोड सेटिंग्स → ऑडियो फॉर्मेट सेटिंग्स** में उपलब्ध है।
|
- **डिफ़ॉल्ट उपशीर्षक भाषाएँ:** स्वचालित चयन के लिए डिफ़ॉल्ट उपशीर्षक भाषाएँ सेट करें (अल्पविराम से अलग, जैसे `hi,en`)। **Download Settings → Default Subtitle Languages** में उपलब्ध है।
|
||||||
- **ऑडियो सामान्यीकरण:** EBU R128 का उपयोग करके केवल-ऑडियो डाउनलोड के लिए वॉल्यूम को मानकीकृत करें।
|
- **फ़ाइल नाम प्रारूप:** `%(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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 पहुंच और नेटवर्क</summary>
|
<summary>🌐 एक्सेस और नेटवर्क</summary>
|
||||||
|
|
||||||
- **कुकीज़ के साथ लॉगिन करें:** निजी सामग्री तक पहुंचने के लिए कुकीज़ का उपयोग करके यूट्यूब पर लॉगिन करें।
|
- **कुकी लॉगिन:** निजी सामग्री तक पहुँचने के लिए कुकीज़ का उपयोग करके YouTube में लॉगिन करें।
|
||||||
इसका उपयोग कैसे करें:
|
उपयोग:
|
||||||
1. **अनुशंसित:** ऐप में अंतर्निहित `Extract cookies from browser` विकल्प का उपयोग करें, फिर अपना ब्राउज़र और वैकल्पिक रूप से एक प्रोफ़ाइल चुनें।
|
1. **अनुशंसित:** ऐप में बिल्ट-इन `Extract cookies from browser` विकल्प का उपयोग करें, फिर अपना ब्राउज़र और वैकल्पिक रूप से प्रोफ़ाइल चुनें।
|
||||||
2. वैकल्पिक रूप से, कुकीज़ को मैन्युअल रूप से निकालें:
|
2. वैकल्पिक रूप से, कुकीज़ मैन्युअल रूप से निकालें:
|
||||||
ए. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) जैसे एक्सटेंशन का उपयोग करके अपने ब्राउज़र से कुकीज़ निर्यात करें
|
a. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) जैसे एक्सटेंशन का उपयोग करके अपने ब्राउज़र से कुकीज़ निर्यात करें
|
||||||
बी. कुकीज़ को नेटस्केप प्रारूप में कॉपी करें
|
b. नेटस्केप प्रारूप में कुकीज़ कॉपी करें
|
||||||
सी. `cookies.txt` नाम की एक फ़ाइल बनाएं और उसमें कुकीज़ पेस्ट करें
|
c. `cookies.txt` नामक फ़ाइल बनाएँ और कुकीज़ पेस्ट करें
|
||||||
घ. ऐप में `cookies.txt` फ़ाइल चुनें
|
d. ऐप में `cookies.txt` फ़ाइल चुनें
|
||||||
- **प्रॉक्सी समर्थन:** डाउनलोड के लिए प्रॉक्सी सर्वर का उपयोग करें, उदाहरण के लिए `http://<proxy-server>:<port>`
|
- **प्रॉक्सी समर्थन:** डाउनलोड के लिए प्रॉक्सी सर्वर का उपयोग करें, जैसे `http://<proxy-server>:<port>`
|
||||||
- **जेनेरिक मोड:** YTSage को yt-dlp द्वारा समर्थित गैर-यूट्यूब साइटों से विश्लेषण और डाउनलोड करने की अनुमति दें। इसे **डाउनलोड सेटिंग्स → जेनेरिक मोड** से सक्षम करें।
|
- **जेनेरिक मोड:** YTSage को yt-dlp द्वारा समर्थित गैर-YouTube साइटों से विश्लेषण और डाउनलोड करने की अनुमति देता है। इसे **Download Settings → Generic Mode** से सक्षम करें।
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ उपकरण और रखरखाव</summary>
|
<summary>🛠️ उपकरण और रखरखाव</summary>
|
||||||
|
|
||||||
- **कस्टम कमांड:** कमांड लाइन तर्कों के माध्यम से उन्नत yt-dlp सुविधाओं तक पहुंचें
|
- **कस्टम कमांड:** कमांड-लाइन तर्कों के माध्यम से उन्नत yt-dlp सुविधाओं तक पहुँचें।
|
||||||
- **अपडेटर टैब:** कस्टम विकल्पों में एक ही स्थान से अंतर्निहित अपडेट टूल प्रबंधित करें:
|
- **अपडेट टैब:** कस्टम विकल्पों में एक ही स्थान से बिल्ट-इन अपडेट टूल प्रबंधित करें:
|
||||||
- **yt-dlp अपडेट:** अपडेट की जांच करें और स्थिर और रात्रिकालीन रिलीज़ चैनलों के बीच स्विच करें
|
- **yt-dlp अपडेट:** अपडेट के लिए जाँच करें और स्टेबल और नाइटली रिलीज़ चैनलों के बीच स्विच करें।
|
||||||
- **एफएफएमपीईजी संस्करण जांचकर्ता:** अपना एफएफएमपीईजी संस्करण जांचें और इंस्टॉलेशन गाइड खोलें
|
- **FFmpeg संस्करण जाँचकर्ता:** अपने FFmpeg संस्करण को सत्यापित करें और स्थापना मार्गदर्शिकाएँ खोलें।
|
||||||
- **डेनो अपडेट:** डेनो रनटाइम की जांच करें और अपडेट करें
|
- **Deno अपडेट:** Deno रनटाइम की जाँच करें और अपडेट करें।
|
||||||
- **FFmpeg/yt-dlp/Deno डिटेक्शन:** अबाउट डायलॉग से FFmpeg, yt-dlp, और Deno पथ और संस्करणों का स्वचालित रूप से पता लगाएं।
|
- **FFmpeg/yt-dlp/Deno डिटेक्शन:** अबाउट डायलॉग से FFmpeg, yt-dlp और Deno के पथ और संस्करण का स्वचालित रूप से पता लगाता है।
|
||||||
- **डाउनलोड इतिहास:** **इतिहास** बटन से थंबनेल और स्थितियों के साथ पिछले डाउनलोड देखें।
|
- **डाउनलोड इतिहास:** **History** बटन से थंबनेल और स्थितियों के साथ पिछले डाउनलोड देखें।
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 स्थानीयकरण</summary>
|
<summary>🌍 स्थानीयकरण</summary>
|
||||||
|
|
||||||
YTSage दुनिया भर में पहुंच के लिए **14 भाषाओं** का समर्थन करता है। **कस्टम विकल्प → भाषा** से अपनी पसंदीदा भाषा चुनें।
|
YTSage वैश्विक पहुँच के लिए **14 भाषाओं** का समर्थन करता है। **Custom Options → Language** में अपनी पसंदीदा भाषा चुनें।
|
||||||
|
|
||||||
### समर्थित भाषाएँ
|
### समर्थित भाषाएँ
|
||||||
|
|
||||||
| भाषा | कोड | भाषा | कोड |
|
| भाषा | कोड | भाषा | कोड |
|
||||||
|-------|------|-------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 अंग्रेजी | `en` | 🇪🇸स्पेनिश | `es` |
|
| 🇺🇸 अंग्रेज़ी | `en` | 🇪🇸 स्पेनिश | `es` |
|
||||||
| 🇸🇦 अरबी | `ar` | 🇫🇷 फ्रेंच | `fr` |
|
| 🇸🇦 अरबी | `ar` | 🇫🇷 फ्रेंच | `fr` |
|
||||||
| 🇩🇪 जर्मन | `de` | 🇮🇳 हिंदी | `hi` |
|
| 🇩🇪 जर्मन | `de` | 🇮🇳 हिंदी | `hi` |
|
||||||
| 🇮🇩 इंडोनेशियाई | `id` | 🇮🇹इतालवी | `it` |
|
| 🇮🇩 इंडोनेशियाई | `id` | 🇮🇹 इतालवी | `it` |
|
||||||
| 🇯🇵 जापानी | `ja` | 🇵🇱 पोलिश | `pl` |
|
| 🇯🇵 जापानी | `ja` | 🇵🇱 पोलिश | `pl` |
|
||||||
| 🇧🇷 पुर्तगाली | `pt` | 🇷🇺 रूसी | `ru` |
|
| 🇧🇷 पुर्तगाली | `pt` | 🇷🇺 रूसी | `ru` |
|
||||||
| 🇹🇷तुर्की | `tr` | 🇨🇳 चीनी | `zh` |
|
| 🇹🇷 तुर्की | `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.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.id.md](README.id.md) | 🇮🇹 इतालवी | [README.it.md](README.it.md) |
|
||||||
| 🇯🇵 जापानी | [README.ja.md](README.ja.md) | 🇵🇱 पोलिश | [README.pl.md](README.pl.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.pt.md](README.pt.md) | 🇷🇺 रूसी | [README.ru.md](README.ru.md) |
|
||||||
| 🇹🇷तुर्की | [README.tr.md](README.tr.md) | 🇨🇳 चीनी | [README.zh.md](README.zh.md) |
|
| 🇹🇷 तुर्की | [README.tr.md](README.tr.md) | 🇨🇳 चीनी | [README.zh.md](README.zh.md) |
|
||||||
|
|
||||||
> 💡 **अनुवाद में योगदान देना चाहते हैं?** अधिक भाषाएँ जोड़ने में हमारी सहायता के लिए [Contributing](#contributing) अनुभाग देखें!
|
> 💡 **अनुवाद में मदद करना चाहते हैं?** अधिक भाषाओं को जोड़ने में हमारी सहायता करने के लिए [योगदान](#contributing) अनुभाग देखें!
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="troubleshooting"></a>
|
||||||
## 🛠️समस्या निवारण
|
## 🛠️ समस्या निवारण
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>सामान्य समस्याएं और समाधान देखने के लिए क्लिक करें</summary>
|
<summary>सामान्य समस्याओं और समाधानों को देखने के लिए क्लिक करें</summary>
|
||||||
|
|
||||||
- **प्रारूप तालिका प्रदर्शित नहीं हो रही है:** yt-dlp को नवीनतम संस्करण में अपडेट करें, और रात में yt-dlp पर स्विच करें।
|
- **प्रारूप तालिका दिखाई नहीं दे रही है:** yt-dlp को नवीनतम संस्करण में अपडेट करें और yt-dlp नाइटली पर स्विच करें।
|
||||||
- **डाउनलोड विफल:** अपना इंटरनेट कनेक्शन जांचें और सुनिश्चित करें कि वीडियो उपलब्ध है।
|
- **डाउनलोड विफल:** अपना इंटरनेट कनेक्शन जाँचें और सुनिश्चित करें कि वीडियो उपलब्ध है।
|
||||||
- **विशिष्ट डाउनलोड त्रुटियाँ:**
|
- **विशिष्ट डाउनलोड त्रुटियाँ:**
|
||||||
- **निजी वीडियो:** निजी सामग्री तक पहुंचने के लिए कुकी प्रमाणीकरण का उपयोग करें।
|
- **निजी वीडियो:** निजी सामग्री तक पहुँचने के लिए कुकी प्रमाणीकरण का उपयोग करें।
|
||||||
- **आयु-प्रतिबंधित सामग्री:** आयु-प्रतिबंधित वीडियो देखने के लिए YouTube खाते में लॉगिन करें।
|
- **आयु-प्रतिबंधित सामग्री:** आयु-प्रतिबंधित वीडियो देखने के लिए अपने YouTube खाते में लॉग इन करें।
|
||||||
- **जियो-अवरुद्ध वीडियो:** क्षेत्रीय प्रतिबंधों को बायपास करने के लिए वीपीएन का उपयोग करने पर विचार करें।
|
- **जियो-ब्लॉक किए गए वीडियो:** क्षेत्रीय प्रतिबंधों को दरकिनार करने के लिए VPN का उपयोग करने पर विचार करें।
|
||||||
- **हटाए गए/हटाए गए वीडियो:** वीडियो अब YouTube पर उपलब्ध नहीं है।
|
- **हटाए गए वीडियो:** वीडियो अब YouTube पर उपलब्ध नहीं है।
|
||||||
- **लाइव स्ट्रीम:** लाइव स्ट्रीम डाउनलोड नहीं की जा सकतीं; स्ट्रीम समाप्त होने की प्रतीक्षा करें.
|
- **लाइव स्ट्रीम:** प्रसारण के दौरान लाइव स्ट्रीम डाउनलोड नहीं की जा सकतीं; स्ट्रीम समाप्त होने तक प्रतीक्षा करें।
|
||||||
- **नेटवर्क त्रुटियां:** अपना इंटरनेट कनेक्शन जांचें और पुनः प्रयास करें।
|
- **नेटवर्क त्रुटियाँ:** अपना इंटरनेट कनेक्शन जाँचें और पुनः प्रयास करें।
|
||||||
- **अमान्य यूआरएल:** सुनिश्चित करें कि यूआरएल सही है और समर्थित प्लेटफॉर्म से है।
|
- **अमान्य URL:** सुनिश्चित करें कि URL सही है और समर्थित प्लेटफ़ॉर्म से है।
|
||||||
- **प्रीमियम सामग्री:** YouTube प्रीमियम सदस्यता की आवश्यकता है।
|
- **प्रीमियम सामग्री:** YouTube प्रीमियम सदस्यता की आवश्यकता है।
|
||||||
- **कॉपीराइट ब्लॉक:** कॉपीराइट प्रतिबंधों के कारण सामग्री अवरुद्ध है।
|
- **कॉपीराइट ब्लॉक:** कॉपीराइट प्रतिबंधों के कारण सामग्री अवरुद्ध है।
|
||||||
- **डाउनलोड के बाद वीडियो और ऑडियो फ़ाइलों को अलग करें:** ऐसा तब होता है जब FFmpeg गायब है या पता नहीं चला है। उच्च गुणवत्ता वाले वीडियो और ऑडियो स्ट्रीम को मर्ज करने के लिए YTSage को FFmpeg की आवश्यकता होती है।
|
- **डाउनलोड के बाद वीडियो और ऑडियो फ़ाइलें अलग हैं:** यह तब होता है जब FFmpeg गायब होता है या पता नहीं चल पाता है। उच्च गुणवत्ता वाले वीडियो और ऑडियो स्ट्रीम को मर्ज करने के लिए YTSage को FFmpeg की आवश्यकता होती है।
|
||||||
- **समाधान:** सुनिश्चित करें कि FFmpeg आपके सिस्टम के PATH में स्थापित और पहुंच योग्य है। विंडोज़ उपयोगकर्ताओं के लिए, सबसे आसान विकल्प `YTSage-v<version>-ffmpeg.exe` फ़ाइल डाउनलोड करना है, जो FFmpeg के साथ बंडल में आती है।
|
- **समाधान:** सुनिश्चित करें कि FFmpeg स्थापित है और आपके सिस्टम PATH में सुलभ है। विंडोज उपयोगकर्ताओं के लिए, सबसे आसान विकल्प `YTSage-v<version>-ffmpeg.exe` फ़ाइल डाउनलोड करना है, जो FFmpeg के साथ आती है।
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 🛡️ विंडोज डिफेंडर / एंटीवायरस चेतावनी
|
#### 🛡️ Windows Defender / एंटीवायरस चेतावनी
|
||||||
|
|
||||||
कुछ एंटीवायरस सॉफ़्टवेयर `.exe` फ़ाइलों को गलत सकारात्मक के रूप में चिह्नित कर सकते हैं। यह पैकेज्ड एप्लिकेशन की **ज्ञात सीमा** है।
|
कुछ एंटीवायरस सॉफ़्टवेयर `.exe` फ़ाइलों को गलत सकारात्मक (फॉल्स पॉजिटिव) के रूप में चिह्नित कर सकते हैं। यह पैक किए गए एप्लिकेशन की **ज्ञात सीमा** है।
|
||||||
|
|
||||||
**ऐसा क्यों होता है:**
|
**यह क्यों होता है:**
|
||||||
- एंटीवायरस अनुमान पैक किए गए निष्पादन योग्य को संदिग्ध के रूप में गलत पहचान सकता है
|
- एंटीवायरस हिउरिस्टिक्स पैक किए गए एक्जीक्यूटेबल्स को संदिग्ध के रूप में गलत तरीके से पहचान सकते हैं।
|
||||||
|
|
||||||
**सुरक्षित विकल्प:**
|
**सुरक्षित विकल्प:**
|
||||||
- ✅ **पाइप इंस्टॉलेशन का उपयोग करें:** `pip install ytsage` (अनुशंसित)
|
- ✅ **pip स्थापना का उपयोग करें:** `pip install ytsage` (अनुशंसित)
|
||||||
- ✅ **स्रोत से निर्माण**: इसका पालन करके [guide](../.github/CI_CD_README.md)
|
- ✅ **स्रोत से बिल्ड करें**: इस [गाइड](.github/CI_CD_README.md) का पालन करते हुए
|
||||||
- ✅ **एप्लिकेशन को अपने एंटीवायरस सॉफ़्टवेयर में श्वेतसूची में डालें**
|
- ✅ **एप्लिकेशन को व्हाइटलिस्ट करें** अपने एंटीवायरस सॉफ़्टवेयर में।
|
||||||
|
|
||||||
#### 🍎 macOS: "ऐप क्षतिग्रस्त है और खोला नहीं जा सकता"
|
#### 🍎 macOS: "ऐप क्षतिग्रस्त है और खोला नहीं जा सकता"
|
||||||
यदि आपको यह त्रुटि macOS सोनोमा या नए पर दिखाई देती है, तो आपको संगरोध विशेषता को हटाना होगा।
|
यदि आप macOS Sonoma या नए पर यह त्रुटि देखते हैं, तो आपको क्वारंटाइन एट्रिब्यूट को हटाने की आवश्यकता है।
|
||||||
|
|
||||||
1. **टर्मिनल खोलें** (आप इसे स्पॉटलाइट का उपयोग करके पा सकते हैं)।
|
1. **टर्मिनल खोलें** (आप इसे Spotlight का उपयोग करके पा सकते हैं)।
|
||||||
2. **निम्न आदेश टाइप करें** लेकिन **अभी तक Enter न दबाएँ। अंत में स्थान शामिल करना सुनिश्चित करें:
|
2. **निम्न कमांड टाइप करें** लेकिन अभी Enter **न दबाएँ**। सुनिश्चित करें कि अंत में स्थान शामिल है:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
xattr -d com.apple.quarantine
|
||||||
```
|
```
|
||||||
3. ** `YTSage.app` फ़ाइल** को अपनी फाइंडर विंडो से खींचें और इसे सीधे टर्मिनल विंडो में छोड़ें। इससे स्वचालित रूप से सही फ़ाइल पथ पेस्ट हो जाएगा.
|
3. **अपनी फाइंडर विंडो से `YTSage.app` फ़ाइल खींचें** और इसे सीधे टर्मिनल विंडो में छोड़ें। यह स्वचालित रूप से सही फ़ाइल पथ पेस्ट कर देगा।
|
||||||
4. कमांड चलाने के लिए **एंटर** दबाएं।
|
4. **Enter दबाएँ** कमांड चलाने के लिए।
|
||||||
5. **YTSage.app को दोबारा खोलने का प्रयास करें।** इसे अब सही ढंग से लॉन्च होना चाहिए।
|
5. **YTSage.app को फिर से खोलने का प्रयास करें।** इसे अब ठीक से लॉन्च होना चाहिए।
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **कॉन्फ़िगरेशन स्थान (उन्नत)**
|
#### **कॉन्फ़िगरेशन स्थान (उन्नत)**
|
||||||
- **विंडोज़:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **मैकओएस:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **लिनक्स:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<a id="sponsor"></a>
|
||||||
## 💖 प्रायोजक
|
## 💖 प्रायोजक
|
||||||
|
|
||||||
यदि YTSage आपका समय बचाता है, तो परियोजना को प्रायोजित करने पर विचार करें। प्रायोजन विकास के समय, सभी प्लेटफार्मों पर परीक्षण और भविष्य में सुधारों को कवर करने में मदद करता है।
|
यदि YTSage आपका समय बचाता है, तो कृपया प्रोजेक्ट को प्रायोजित करने पर विचार करें। प्रायोजन विकास समय, सभी प्लेटफ़ॉर्म पर परीक्षण और भविष्य के सुधारों को कवर करने में मदद करता है।
|
||||||
|
|
||||||
- GitHub प्रायोजक: https://github.com/sponsors/oop7
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- प्रायोजक लिंक सीधे ऐप के अंदर अबाउट डायलॉग से भी उपलब्ध है।
|
- प्रायोजन लिंक ऐप में अबाउट डायलॉग के माध्यम से सीधे उपलब्ध है।
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="contributing"></a>
|
||||||
## 👥 योगदान दे रहे हैं
|
## 👥 योगदान
|
||||||
|
|
||||||
हम योगदान का स्वागत करते हैं! यहां बताया गया है कि आप कैसे मदद कर सकते हैं:
|
हम योगदान का स्वागत करते हैं! यहाँ बताया गया है कि आप कैसे मदद कर सकते हैं:
|
||||||
|
|
||||||
1. 🍴 रिपॉजिटरी को फोर्क करें
|
1. 🍴 रिपॉजिटरी को फोर्क करें
|
||||||
2. 🌿 अपनी फीचर शाखा बनाएं:
|
2. 🌿 अपनी फीचर शाखा बनाएँ:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/AmazingFeature
|
||||||
```
|
```
|
||||||
3. 💾 अपने परिवर्तन प्रतिबद्ध करें:
|
3. 💾 अपने बदलाव कमिट करें:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Add some AmazingFeature'
|
||||||
```
|
```
|
||||||
4. 📤 शाखा को धक्का:
|
4. 📤 शाखा में पुश करें:
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
git push origin feature/AmazingFeature
|
||||||
```
|
```
|
||||||
5. 🔄 एक पुल अनुरोध खोलें
|
5. 🔄 एक पुल रिक्वेस्ट खोलें
|
||||||
|
|
||||||
### 🌍 अनुवाद में योगदान
|
### 🌍 अनुवाद में योगदान करें
|
||||||
|
|
||||||
- मिलान वाली स्थानीयकृत README फ़ाइल को अपडेट करें (उदाहरण के लिए `README.es.md`)
|
- संबंधित स्थानीयकृत README फ़ाइल को अपडेट करें (जैसे `readme-translations/README.hi.md`)
|
||||||
- `ytsage/languages/<code>.json` को संपादित करके ऐप स्ट्रिंग्स को सिंक में रखें
|
- `ytsage/languages/<code>.json` को संपादित करके ऐप स्ट्रिंग्स को सिंक में रखें
|
||||||
- यदि आपकी भाषा गायब है, तो `README.md` से शुरू करें और `README.<code>.md` बनाएं
|
- यदि आपकी भाषा गायब है, तो `README.md` से शुरू करें और `README.<code>.md` बनाएँ
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 परियोजना संरचना</summary>
|
<summary>📂 प्रोजेक्ट संरचना</summary>
|
||||||
|
|
||||||
## YTSage - परियोजना संरचना
|
## YTSage - प्रोजेक्ट संरचना
|
||||||
|
|
||||||
यह दस्तावेज़ YTSage की संगठित फ़ोल्डर संरचना का वर्णन करता है।
|
यह दस्तावेज़ YTSage की संगठित फ़ोल्डर संरचना का वर्णन करता है।
|
||||||
|
|
||||||
### 📁परियोजना संरचना
|
### 📁 प्रोजेक्ट संरचना
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # GitHub कॉन्फ़िगरेशन
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # इश्यू टेम्पलेट
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # बग रिपोर्ट टेम्पलेट
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # GitHub Actions वर्कफ़्लो
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # लिनक्स बिल्ड वर्कफ़्लो
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # macOS बिल्ड वर्कफ़्लो
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # विंडोज बिल्ड वर्कफ़्लो
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # मास्टर रिलीज़ वर्कफ़्लो
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # CI/CD दस्तावेज़ीकरण
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # ब्रांडिंग एसेट्स (स्क्रीनशॉट, SVGs)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # ऐप आइकन
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # दस्तावेज़ीकरण के लिए स्क्रीनशॉट
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # SVG एसेट्स
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # लाइसेंस फ़ाइल
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # प्रोजेक्ट मेटाडेटा और निर्भरताएँ
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # प्रोजेक्ट दस्तावेज़ीकरण
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # पायथन निर्भरताएँ (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # स्रोत कोड पैकेज
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # रनटाइम एसेट्स
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # ऐप आइकन
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # ऑडियो फ़ाइलें
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # स्थानीयकरण फ़ाइलें
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # अरबी अनुवाद
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # जर्मन अनुवाद
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # अंग्रेज़ी अनुवाद
|
||||||
│ └── ... # Other languages
|
│ └── ... # अन्य भाषाएँ
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # मुख्य व्यावसायिक तर्क
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Deno एकीकरण
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # डाउनलोड कार्यक्षमता
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg एकीकरण
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # उपयोगिता कार्य
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # yt-dlp एकीकरण
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # यूजर इंटरफेस घटक
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # ऐप की मुख्य विंडो
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # संवाद वर्ग
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # उपयोगिता मॉड्यूल
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # कॉन्फ़िगरेशन प्रबंधन
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # लॉगिंग टूल
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # पैकेज प्रविष्टि बिंदु
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # मुख्य निष्पादन स्क्रिप्ट
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ सितारा इतिहास
|
## ⭐️ स्टार इतिहास
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## सितारा इतिहास
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -540,16 +546,16 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 लाइसेंस
|
## 📜 लाइसेंस
|
||||||
|
|
||||||
यह प्रोजेक्ट एमआईटी लाइसेंस के तहत लाइसेंस प्राप्त है - विवरण के लिए [LICENSE](../LICENSE) फ़ाइल देखें।
|
यह प्रोजेक्ट MIT लाइसेंस के तहत है - विवरण के लिए [LICENSE](LICENSE) फ़ाइल देखें।
|
||||||
|
|
||||||
## 🙏 आभार
|
## 🙏 धन्यवाद
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary> आभार दिखाएं</summary>
|
<summary>धन्यवाद प्रदर्शित करें</summary>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<p>सुधार का सुझाव देने या बग की रिपोर्ट करने के लिए एक मुद्दा खोलकर इस परियोजना में योगदान देने वाले सभी लोगों को हार्दिक धन्यवाद।</p>
|
<p>उन सभी को बहुत-बहुत धन्यवाद जिन्होंने सुधार का सुझाव देने या बग की रिपोर्ट करने के लिए इश्यू खोलकर इस प्रोजेक्ट में योगदान दिया है।</p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr class="section"><th colspan="2">मुख्य घटक</th></tr>
|
<tr class="section"><th colspan="2">मुख्य घटक</th></tr>
|
||||||
@@ -559,39 +565,40 @@ YTSage/
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>मीडिया प्रोसेसिंग</td>
|
<td>मीडिया प्रसंस्करण</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<td><a href="https://deno.com/">Deno</a></td>
|
||||||
<td>yt-dlp के साथ एकीकरण के लिए रनटाइम</td>
|
<td>yt-dlp एकीकरण के लिए रनटाइम</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">लाइब्रेरी और फ्रेमवर्क</th></tr>
|
<tr class="section"><th colspan="2">पुस्तकालय और फ्रेमवर्क</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>GUI फ्रेमवर्क</td>
|
<td>GUI फ्रेमवर्क</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">तकिया</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>इमेज प्रोसेसिंग</td>
|
<td>छवि प्रसंस्करण</td>
|
||||||
</tr>
|
</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>
|
<td>HTTP अनुरोध</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">पैकेजिंग</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>संस्करण और पैकेज हैंडलिंग</td>
|
<td>संस्करण प्रबंधन और पैकेजिंग</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">मार्कडाउन</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>मार्कडाउन रेंडरिंग</td>
|
<td>Markdown रेंडरिंग</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>लॉगिंग</td>
|
<td>लॉगिंग</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">संपत्ति और योगदानकर्ता</th></tr>
|
<tr class="section"><th colspan="2">एसेट्स और योगदानकर्ता</th></tr>
|
||||||
<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>
|
<td>अधिसूचना ध्वनि</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -606,12 +613,12 @@ YTSage/
|
|||||||
|
|
||||||
## ⚠️ अस्वीकरण
|
## ⚠️ अस्वीकरण
|
||||||
|
|
||||||
यह उपकरण केवल व्यक्तिगत उपयोग के लिए है. कृपया YouTube की सेवा की शर्तों और सामग्री निर्माताओं के अधिकारों का सम्मान करें।
|
यह उपकरण केवल व्यक्तिगत उपयोग के लिए है। कृपया YouTube की सेवा की शर्तों और सामग्री रचनाकारों के अधिकारों का सम्मान करें।
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
❤️ के साथ [oop7](https://github.com/oop7) द्वारा बनाया गया
|
[oop7](https://github.com/oop7) द्वारा ❤️ के साथ बनाया गया
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+253
-247
@@ -13,80 +13,81 @@
|
|||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Pengunduh YouTube modern dengan antarmuka PySide6 yang bersih.**
|
**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)
|
Inggris: [EN](../README.md)
|
||||||
| Nilai: [AR](README.ar.md)
|
| Arab: [AR](README.ar.md)
|
||||||
| Jerman: [DE](README.de.md)
|
| Jerman: [DE](README.de.md)
|
||||||
| Spanyol: [ES](README.es.md)
|
| Spanyol: [ES](README.es.md)
|
||||||
| Perancis: [FR](README.fr.md)
|
| Prancis: [FR](README.fr.md)
|
||||||
| nilai: [HI](README.hi.md)
|
| Hindi: [HI](README.hi.md)
|
||||||
| Bahasa Indonesia: [ID](README.id.md)
|
| Indonesia: [ID](README.id.md)
|
||||||
| Italia: [IT](README.it.md)
|
| Italia: [IT](README.it.md)
|
||||||
| Nilai: [JA](README.ja.md)
|
| Jepang: [JA](README.ja.md)
|
||||||
| Polski: [PL](README.pl.md)
|
| Polandia: [PL](README.pl.md)
|
||||||
| Portugis: [PT](README.pt.md)
|
| Portugis: [PT](README.pt.md)
|
||||||
| Jawaban: [RU](README.ru.md)
|
| Rusia: [RU](README.ru.md)
|
||||||
| Turki: [TR](README.tr.md)
|
| Turki: [TR](README.tr.md)
|
||||||
| nama: [ZH](README.zh.md)
|
| Mandarin: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Instalasi</a> •
|
<a href="#instalasi">Instalasi</a> •
|
||||||
<a href="#features">Fitur</a> •
|
<a href="#fitur">Fitur</a> •
|
||||||
<a href="#usage">Penggunaan</a> •
|
<a href="#penggunaan">Penggunaan</a> •
|
||||||
<a href="#screenshots">Tangkapan Layar</a> •
|
<a href="#screenshot">Screenshot</a> •
|
||||||
<a href="#troubleshooting">Pemecahan Masalah</a> •
|
<a href="#troubleshooting">Troubleshooting</a> •
|
||||||
<a href="#sponsor">Sponsor</a> •
|
<a href="#sponsor">Sponsor</a> •
|
||||||
<a href="#contributing">Berkontribusi</a>
|
<a href="#kontribusi">Kontribusi</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="mengapa-ytsage"></a>
|
||||||
## ❓ Mengapa YTSage?
|
## ❓ 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
|
- Antarmuka PySide6 yang modern dan bersih
|
||||||
- Unduhan sekali klik untuk video, audio, dan subtitle
|
- Unduh video, audio, dan subtitle sekali klik
|
||||||
- Fitur lanjutan seperti SponsorBlock, penggabungan subtitle, dan pemilihan playlist
|
- Fitur canggih seperti SponsorBlock, penggabungan subtitle, dan pemilihan playlist
|
||||||
- Mode Generik Opsional untuk situs yang didukung yt-dlp di luar YouTube
|
- Mode Generik Opsional untuk situs di luar YouTube yang didukung oleh yt-dlp
|
||||||
- Dukungan lintas platform dan instalasi mudah
|
- Dukungan lintas platform dan instalasi mudah
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="fitur"></a>
|
||||||
## ✨ Fitur
|
## ✨ Fitur
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Fitur Inti | Fitur Lanjutan | Fitur Ekstra |
|
| Fitur Dasar | Fitur Lanjutan | Fitur Tambahan |
|
||||||
|----------------------------------||-----------------------------------------|------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Format Tabel | 🚫 Integrasi Blok Sponsor | 🎞️ Tampilan FPS/HDR |
|
| 🎥 Tabel Format | 🚫 Integrasi SponsorBlock | 🎞️ Tampilan FPS/HDR |
|
||||||
| 🎵 Ekstraksi Audio | 📝 Pilih & Gabungkan Multi-Subjudul | 🔄 Perbarui Otomatis yt-dlp |
|
| 🎵 Ekstraksi Audio | 📝 Pemilihan & Penggabungan Subtitle | 🔄 Pembaruan yt-dlp Otomatis |
|
||||||
| ✨ UI Sederhana | 💾 Simpan Deskripsi & Gambar Kecil | 🛠️ Deteksi FFmpeg/yt-dlp/Deno |
|
| ✨ Antarmuka Pengguna Sederhana | 💾 Simpan Deskripsi & Thumbnail | 🛠️ Deteksi FFmpeg/yt-dlp/Deno |
|
||||||
| 📋 Dukungan & Pemilih Daftar Putar | 🚀 Pembatas Kecepatan | ⚙️ Perintah Khusus |
|
| 📋 Dukungan & Pemilih Playlist | 🚀 Pembatas Kecepatan | ⚙️ Perintah Kustom |
|
||||||
| 📑 Sematkan Bab | ✂️ Pangkas Bagian Video | 🍪 Masuk dengan Cookie |
|
| 📑 Integrasi Bab (Chapters) | ✂️ Potong Bagian Video | 🍪 Login Cookie |
|
||||||
| 📜 Unduh Riwayat | 🔄 Rilis Pilihan Saluran | 🌐 Dukungan Proksi |
|
| 📜 Riwayat Unduhan | 🔄 Pilihan Saluran Rilis | 🌐 Dukungan Proxy |
|
||||||
| 🎚️ Konversi Format Audio | 🎬 Pengaturan Format Video | 🆙 Tab Pembaruan Bawaan |
|
| 🎚️ Konversi Format Audio | 🎬 Pengaturan Format Video | 🆙 Tab Pembaruan Terintegrasi |
|
||||||
| 🌍 Mode Generik | 🔊 Normalisasi Audio (EBU R128) | 🌍 Lokalisasi dalam 14 Bahasa |
|
| 🌍 Mode Generik | 🔊 Normalisasi Audio (EBU R128) | 🌍 Lokalisasi dalam 14 Bahasa |
|
||||||
|
| 💾 Ekspor Playlist | ⚙️ Kualitas & Subtitle Default | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="instalasi"></a>
|
||||||
## 🚀 Instalasi
|
## 🚀 Instalasi
|
||||||
|
|
||||||
### ⚡ Instal Cepat (Disarankan)
|
### ⚡ Instalasi Cepat (Direkomendasikan)
|
||||||
|
|
||||||
Instal YTSage dari PyPI:
|
Instal YTSage melalui PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Perbarui instalasi yang ada</summary>
|
<summary>🔄 Perbarui Instalasi yang Ada</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,31 +95,31 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Kemudian luncurkan aplikasi:
|
Kemudian jalankan aplikasi:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
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 |
|
| Format | Deskripsi |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Pemasang standar |
|
|  | Installer Standar |
|
||||||
|  | Dengan FFmpeg dibundel |
|
|  | Dilengkapi dengan FFmpeg |
|
||||||
|  | Versi portabel, tidak perlu instalasi |
|
|  | Versi Portabel, tidak perlu instalasi |
|
||||||
|  | Portabel dengan FFmpeg, zip |
|
|  | Portabel dengan FFmpeg, dikompresi (ZIP) |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Langkah Instalasi</summary>
|
<summary>🛠️ Langkah Instalasi</summary>
|
||||||
|
|
||||||
1. **EXE Installer (`.exe`)**: Klik dua kali file tersebut dan ikuti panduan pengaturan.
|
1. **Installer EXE (`.exe`)**: Klik dua kali pada file dan ikuti wizard pengaturan.
|
||||||
2. **Versi Portabel (`.zip`)**: Ekstrak arsip ke lokasi yang Anda inginkan dan jalankan `ytsage.exe`.
|
2. **Versi Portabel (`.zip`)**: Ekstrak arsip ke lokasi yang diinginkan dan jalankan `ytsage.exe`.
|
||||||
3. **FFmpeg Bundled**: Pilih versi paket FFmpeg jika Anda belum menginstal FFmpeg di sistem Anda.
|
3. **FFmpeg Bawaan**: Jika Anda tidak memiliki FFmpeg di sistem Anda, pilih versi dengan FFmpeg bawaan.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Linux
|
#### 🐧 Linux
|
||||||
@@ -126,9 +127,9 @@ ytsage
|
|||||||
| Format | Deskripsi |
|
| Format | Deskripsi |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Paket Debian |
|
|  | Paket Debian |
|
||||||
|  | AppImage, portabel |
|
|  | AppImage, Portabel |
|
||||||
|  | Paket RPM |
|
|  | Paket RPM |
|
||||||
|  | Paket Flatpak |
|
|  | Bundel Flatpak |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Langkah Instalasi</summary>
|
<summary>🛠️ Langkah Instalasi</summary>
|
||||||
@@ -136,13 +137,13 @@ ytsage
|
|||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **Gambar Aplikasi (`.AppImage`)**:
|
- **AppImage (`.AppImage`)**:
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
@@ -157,22 +158,22 @@ ytsage
|
|||||||
|
|
||||||
| Format | Deskripsi |
|
| Format | Deskripsi |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Aplikasi zip untuk Apple Silicon |
|
|  | Aplikasi ZIP untuk Apple Silicon |
|
||||||
|  | Penginstal gambar disk untuk Apple Silicon |
|
|  | Installer Disk Image untuk Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Langkah Instalasi</summary>
|
<summary>🛠️ Langkah Instalasi</summary>
|
||||||
|
|
||||||
- **Pemasang DMG (`.dmg`)**: Klik dua kali untuk memasang, lalu seret `YTSage.app` ke dalam 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 Aplikasi 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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻 Instalasi Manual dari Sumber</summary>
|
<summary>💻 Instalasi Manual dari Sumber (Source)</summary>
|
||||||
|
|
||||||
### 1. Kloning Repositori
|
### 1. Kloning Repositori
|
||||||
|
|
||||||
@@ -183,7 +184,7 @@ cd YTSage
|
|||||||
|
|
||||||
### 2. Instal Dependensi
|
### 2. Instal Dependensi
|
||||||
|
|
||||||
#### ⚡ Dengan UV
|
#### ⚡ Dengan uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
@@ -203,227 +204,231 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="screenshot"></a>
|
||||||
## 📸 Tangkapan layar
|
## 📸 Screenshot
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Unduhan Playlist" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Pengaturan Unduhan</em></td>
|
<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>
|
||||||
<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/audio_format.png" alt="Pemilihan Format Audio" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opsi Kustom" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Format Audio</em></td>
|
<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>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="penggunaan"></a>
|
||||||
## 📖 Penggunaan
|
## 📖 Penggunaan
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Penggunaan Dasar</summary>
|
<summary>🎯 Penggunaan Dasar</summary>
|
||||||
|
|
||||||
1. **Luncurkan YTSage**
|
1. **Luncurkan YTSage**
|
||||||
2. **Tempel URL YouTube** (atau gunakan tombol "Tempel URL")
|
2. **Tempel URL YouTube** (atau gunakan tombol "Paste URL")
|
||||||
3. **Klik "Analisis"**
|
3. **Klik "Analyze"**
|
||||||
4. **Pilih Format:**
|
4. **Pilih Format:**
|
||||||
- `Video` untuk mengunduh video
|
- `Video` untuk unduhan video
|
||||||
- `Audio Only` untuk ekstraksi audio
|
- `Audio Only` untuk ekstraksi audio
|
||||||
5. **Pilih Opsi:**
|
5. **Pilih Opsi:**
|
||||||
- Aktifkan subtitle & pilih bahasa
|
- Aktifkan subtitle dan pilih bahasa
|
||||||
- Aktifkan penggabungan subtitle
|
- Aktifkan penggabungan subtitle
|
||||||
- Simpan gambar kecil
|
- Simpan thumbnail
|
||||||
- Hapus segmen sponsor
|
- Hapus bagian sponsor
|
||||||
- Simpan deskripsi
|
- Simpan deskripsi
|
||||||
- Sematkan bab
|
- Masukkan bab (chapters)
|
||||||
6. **Pilih Direktori Keluaran**
|
6. **Pilih Direktori Output**
|
||||||
7. **Klik "Unduh"**
|
7. **Klik "Download"**
|
||||||
|
|
||||||
> 💡 Direktori unduhan default adalah folder "Unduhan" milik pengguna.
|
> 💡 Direktori unduhan bawaan adalah folder "Downloads" pengguna.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 Unduh Daftar Putar</summary>
|
<summary>📋 Unduhan Playlist</summary>
|
||||||
|
|
||||||
1. **Tempel URL Daftar Putar**
|
1. **Tempel URL Playlist**
|
||||||
2. **Klik "Analisis"**
|
2. **Klik "Analyze"**
|
||||||
3. **Pilih video dari pemilih daftar putar (opsional, default untuk semua)**
|
3. **Pilih video dari pemilih playlist (opsional, default semua)**
|
||||||
4. **Pilih format/kualitas yang diinginkan**
|
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>
|
||||||
|
|
||||||
<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:
|
Cara menggunakannya:
|
||||||
|
|
||||||
1. Buka `Download Settings`.
|
1. Buka `Download Settings`.
|
||||||
2. Aktifkan `Generic Mode`.
|
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`.
|
4. Klik `Analyze`.
|
||||||
5. Pilih format dan unduh seperti biasa.
|
5. Pilih format dan unduh seperti biasa.
|
||||||
|
|
||||||
Catatan:
|
Catatan:
|
||||||
|
|
||||||
- Mode Generik hanya mengubah validasi URL di dalam YTSage. Situs target harus tetap didukung oleh versi yt-dlp yang Anda instal.
|
- 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.
|
- Beberapa situs memerlukan cookie, 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.
|
- Jika suatu situs gagal, perbarui yt-dlp dari tab pembaruan terintegrasi sebelum melaporkan masalah.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰 Opsi Media dan Unduhan</summary>
|
<summary>🧰 Opsi Media & Unduhan</summary>
|
||||||
|
|
||||||
- **Opsi Subtitle:** Filter bahasa dan sematkan subtitle ke dalam file video
|
- **Opsi Subtitle:** Filter bahasa dan masukkan subtitle ke dalam file video.
|
||||||
- **Penggabungan Subtitle:** Menggabungkan subtitle ke dalam file video untuk subtitle hardcode
|
- **Penggabungan Subtitle:** Menggabungkan subtitle ke dalam file video untuk subtitle permanen (hardcoded).
|
||||||
- **Simpan Deskripsi:** Simpan deskripsi video sebagai file teks
|
- **Simpan Deskripsi:** Simpan deskripsi video sebagai file teks.
|
||||||
- **Simpan Gambar Kecil:** Menyimpan gambar kecil video sebagai file gambar
|
- **Simpan Thumbnail:** Simpan thumbnail video sebagai file gambar.
|
||||||
- **Sematkan Bab:** Sematkan penanda bab sebagai metadata untuk pemutar video yang kompatibel
|
- **Masukkan Bab (Chapters):** Sertakan penanda bab sebagai metadata untuk pemutar video yang kompatibel.
|
||||||
- **Hapus Segmen Sponsor:** Hapus segmen sponsor dari video menggunakan SponsorBlock
|
- **Hapus Bagian Sponsor:** Gunakan SponsorBlock untuk menghapus segmen sponsor dari video.
|
||||||
- **Pangkas Video:** Unduh hanya bagian tertentu dari video dengan menentukan rentang waktu dalam format `HH:MM:SS`
|
- **Potong Video:** Unduh hanya bagian tertentu dari video dengan menentukan rentang waktu dalam format `JJ:MM:DD`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️ Pengaturan Output dan File</summary>
|
<summary>⚙️ Pengaturan Output & File</summary>
|
||||||
|
|
||||||
- **Pembatas Kecepatan:** Batasi kecepatan unduh, misalnya `500K` sebesar 500 KB/dtk
|
- **Pembatas Kecepatan:** Batasi kecepatan unduhan, misalnya `500K` untuk 500 KB/s.
|
||||||
- **Simpan Jalur Unduhan:** Simpan jalur unduhan default untuk unduhan berikutnya. Tersedia di **Pengaturan Unduhan → Jalur Unduhan**.
|
- **Simpan Jalur Unduhan:** Menyimpan jalur unduhan default untuk unduhan di masa mendatang. Tersedia di **Download Settings → Download Path**.
|
||||||
- **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**.
|
- **Resolusi Video Default:** Atur resolusi video pilihan Anda untuk pemilihan otomatis (misalnya 1080p, 720p). Tersedia di **Download Settings → Default Video Resolution**.
|
||||||
- **Format Output Paksa:** Paksa pengunduhan video ke dalam format wadah tertentu seperti `mp4`, `webm`, atau `mkv`. Tersedia di **Pengaturan Unduhan → Pengaturan Format Output**.
|
- **Bahasa Subtitle Default:** Atur bahasa subtitle default untuk pemilihan otomatis (dipisahkan koma, misalnya `id,en`). Tersedia di **Download Settings → Default Subtitle Languages**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Normalisasi Audio:** Standarkan volume untuk unduhan audio saja menggunakan EBU R128.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Akses dan Jaringan</summary>
|
<summary>🌐 Akses & Jaringan</summary>
|
||||||
|
|
||||||
- **Masuk dengan Cookie:** Masuk ke YouTube menggunakan cookie untuk mengakses konten pribadi.
|
- **Login Cookie:** Masuk ke YouTube menggunakan cookie untuk mengakses konten pribadi.
|
||||||
Cara menggunakannya:
|
Penggunaan:
|
||||||
1. **Disarankan:** Gunakan opsi `Extract cookies from browser` bawaan di aplikasi, lalu pilih browser Anda dan opsional profil.
|
1. **Direkomendasikan:** Gunakan opsi bawaan `Extract cookies from browser` di aplikasi, lalu pilih browser dan opsional profil Anda.
|
||||||
2. Alternatifnya, ekstrak cookie secara manual:
|
2. Secara opsional, 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)
|
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
|
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
|
d. Pilih file `cookies.txt` di aplikasi
|
||||||
- **Dukungan Proxy:** Gunakan server proxy untuk mendownload, misalnya `http://<proxy-server>:<port>`
|
- **Dukungan Proxy:** Gunakan server proxy untuk unduhan, misalnya `http://<server-proxy>:<port>`
|
||||||
- **Mode Generik:** Izinkan YTSage menganalisis dan mengunduh dari situs non-YouTube yang didukung oleh yt-dlp. Aktifkan dari **Pengaturan Unduhan → Mode Generik**.
|
- **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>
|
||||||
|
|
||||||
<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:
|
- **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
|
- **Pembaruan yt-dlp:** Periksa pembaruan dan beralih antara saluran rilis Stable dan Nightly.
|
||||||
- **Pemeriksa Versi FFmpeg:** Periksa versi FFmpeg Anda dan buka panduan instalasi
|
- **Pemeriksa Versi FFmpeg:** Verifikasi versi FFmpeg Anda dan buka panduan instalasi.
|
||||||
- **Pembaruan Deno:** Periksa dan perbarui runtime Deno
|
- **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.
|
- **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 **Riwayat**.
|
- **Riwayat Unduhan:** Lihat unduhan sebelumnya dengan thumbnail dan status dari tombol **History**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Lokalisasi</summary>
|
<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 yang Didukung
|
||||||
|
|
||||||
| Bahasa | Kode | Bahasa | Kode |
|
| Bahasa | Kode | Bahasa | Kode |
|
||||||
|----------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇮🇩 Bahasa Inggris | `en` | 🇪🇪 Spanyol | `es` |
|
| 🇺🇸 Inggris | `en` | 🇪🇸 Spanyol | `es` |
|
||||||
| Arab Saudi | `ar` | 🇫🇷 Perancis | `fr` |
|
| 🇸🇦 Arab | `ar` | 🇫🇷 Prancis | `fr` |
|
||||||
| 🇩🇪 Jerman | `de` | 🇮🇩 Hindi | `hi` |
|
| 🇩🇪 Jerman | `de` | 🇮🇳 Hindi | `hi` |
|
||||||
| 🇮🇩 Bahasa Indonesia | `id` | 🇮🇹 Italia | `it` |
|
| 🇮🇩 Indonesia | `id` | 🇮🇹 Italia | `it` |
|
||||||
| 🇯ppa Jepang | `ja` | 🇱 Polandia | `pl` |
|
| 🇯🇵 Jepang | `ja` | 🇵🇱 Polandia | `pl` |
|
||||||
| 🇧🇷 Portugis | `pt` | 🇷л Rusia | `ru` |
|
| 🇧🇷 Portugis | `pt` | 🇷🇺 Rusia | `ru` |
|
||||||
| 🇹🇷 Turki | `tr` | CNY Cina | `zh` |
|
| 🇹🇷 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)
|
| 🇺🇸 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) |
|
| 🇸🇦 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) |
|
| 🇩🇪 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) |
|
| 🇮🇩 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) |
|
| 🇯🇵 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) |
|
| 🇧🇷 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) |
|
| 🇹🇷 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>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="troubleshooting"></a>
|
||||||
## 🛠️ Pemecahan masalah
|
## 🛠️ Troubleshooting
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Klik untuk melihat masalah umum dan solusinya</summary>
|
<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.
|
- **Tabel format tidak muncul:** Perbarui yt-dlp ke versi terbaru dan coba beralih ke yt-dlp Nightly.
|
||||||
- **Pengunduhan gagal:** Periksa koneksi internet Anda dan pastikan video tersedia.
|
- **Unduhan gagal:** Periksa koneksi internet Anda dan pastikan video tersedia.
|
||||||
- **Kesalahan pengunduhan tertentu:**
|
- **Kesalahan Unduhan Spesifik:**
|
||||||
- **Video pribadi:** Gunakan autentikasi cookie untuk mengakses konten pribadi.
|
- **Video Pribadi:** Gunakan autentikasi cookie untuk mengakses konten pribadi.
|
||||||
- **Konten dengan batasan usia:** Masuk ke akun YouTube untuk melihat video dengan batasan usia.
|
- **Konten Dibatasi Usia:** Masuk ke akun YouTube Anda untuk melihat video yang dibatasi usia.
|
||||||
- **Video yang diblokir secara geografis:** Pertimbangkan untuk menggunakan VPN untuk melewati batasan regional.
|
- **Video yang Diblokir Geo:** Pertimbangkan menggunakan VPN untuk melewati batasan regional.
|
||||||
- **Video yang dihapus/dihapus:** Video tidak lagi tersedia di YouTube.
|
- **Video Dihapus:** Video tidak lagi tersedia di YouTube.
|
||||||
- **Streaming langsung:** Streaming langsung tidak dapat diunduh; tunggu hingga streaming berakhir.
|
- **Live Stream:** Streaming langsung tidak dapat diunduh saat sedang disiarkan; tunggu hingga streaming selesai.
|
||||||
- **Kesalahan jaringan:** Periksa koneksi internet Anda dan coba lagi.
|
- **Kesalahan Jaringan:** Periksa koneksi internet Anda dan coba lagi.
|
||||||
- **URL tidak valid:** Pastikan URL benar dan berasal dari platform yang didukung.
|
- **URL Tidak Valid:** Pastikan URL benar dan berasal dari platform yang didukung.
|
||||||
- **Konten premium:** Memerlukan keanggotaan YouTube Premium.
|
- **Konten Premium:** Memerlukan langganan YouTube Premium.
|
||||||
- **Pemblokiran hak cipta:** Konten diblokir karena pembatasan hak cipta.
|
- **Blokir 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.
|
- **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 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.
|
- **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
|
#### 🛡️ 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:**
|
**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:**
|
**Opsi Aman:**
|
||||||
- ✅ **Gunakan instalasi pip:** `pip install ytsage` (disarankan)
|
- ✅ **Gunakan instalasi pip:** `pip install ytsage` (direkomendasikan)
|
||||||
- ✅ **Bangun dari sumber**: dengan mengikuti [guide](../.github/CI_CD_README.md) ini
|
- ✅ **Build dari sumber**: Mengikuti [panduan](.github/CI_CD_README.md) ini
|
||||||
- ✅ **Masukkan aplikasi ke daftar putih** di perangkat lunak antivirus Anda
|
- ✅ **Whitelist aplikasi** di perangkat lunak antivirus Anda.
|
||||||
|
|
||||||
#### 🍎 macOS: "Aplikasi rusak dan tidak dapat dibuka"
|
#### 🍎 macOS: "App is damaged and can’t be opened"
|
||||||
Jika Anda melihat kesalahan ini di macOS Sonoma atau lebih baru, Anda harus menghapus atribut karantina.
|
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).
|
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
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
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)**
|
#### **Lokasi Konfigurasi (Lanjutan)**
|
||||||
- **Jendela:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/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>
|
<a id="sponsor"></a>
|
||||||
## 💖 Sponsor
|
## 💖 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
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- Tautan sponsor juga tersedia langsung di dalam aplikasi dari dialog Tentang.
|
- Tautan sponsor tersedia langsung melalui dialog About di dalam aplikasi.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="kontribusi"></a>
|
||||||
## 👥 Berkontribusi
|
## 👥 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:
|
2. 🌿 Buat cabang fitur Anda:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/FiturLuarBiasa
|
||||||
```
|
```
|
||||||
3. 💾 Komit perubahan Anda:
|
3. 💾 Komit perubahan Anda:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Tambah FiturLuarBiasa'
|
||||||
```
|
```
|
||||||
4. 📤 Dorong ke cabang:
|
4. 📤 Push ke cabang:
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
git push origin feature/FiturLuarBiasa
|
||||||
```
|
```
|
||||||
5. 🔄 Buka Permintaan Tarik
|
5. 🔄 Buka Pull Request
|
||||||
|
|
||||||
### 🌍 Berkontribusi pada Terjemahan
|
### 🌍 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`
|
- 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>
|
<details>
|
||||||
<summary>📂 Struktur Proyek</summary>
|
<summary>📂 Struktur Proyek</summary>
|
||||||
|
|
||||||
## YTSage - Struktur Proyek
|
## YTSage - Struktur Proyek
|
||||||
|
|
||||||
Dokumen ini menjelaskan struktur folder YTSage yang terorganisir.
|
Dokumen ini menjelaskan struktur folder yang terorganisir dari YTSage.
|
||||||
|
|
||||||
### 📁 Struktur Proyek
|
### 📁 Struktur Proyek
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # Konfigurasi GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Templat Issue
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Templat laporan bug
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # Alur kerja GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Alur kerja build Linux
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # Alur kerja build macOS
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Alur kerja build Windows
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Alur kerja rilis master
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # Dokumentasi CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Aset branding (screenshot, SVG)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Ikon aplikasi
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Screenshot untuk dokumentasi
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # Aset SVG
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # File lisensi
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Metadata proyek dan dependensi
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Dokumentasi proyek
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Dependensi Python (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Paket kode sumber
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Aset runtime
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Ikon aplikasi
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # File audio
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # File lokalisasi
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Terjemahan Arab
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Terjemahan Jerman
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Terjemahan Inggris
|
||||||
│ └── ... # Other languages
|
│ └── ... # Bahasa lainnya
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Logika bisnis inti
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Integrasi Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Fungsionalitas pengunduhan
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # Integrasi FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Fungsi utilitas
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # Integrasi yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Komponen antarmuka pengguna
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Jendela utama aplikasi
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Kelas dialog
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Modul utilitas
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Manajemen konfigurasi
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Alat logging
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Titik masuk paket
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Skrip eksekusi utama
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Sejarah Bintang
|
## ⭐️ Riwayat Bintang
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Sejarah Bintang
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -541,22 +546,22 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Lisensi
|
## 📜 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>
|
<details>
|
||||||
<summary>Tampilkan Ucapan Terima Kasih</summary>
|
<summary>Tampilkan Terima Kasih</summary>
|
||||||
|
|
||||||
<div align="center">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Komponen Inti</th></tr>
|
<tr class="section"><th colspan="2">Komponen Utama</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Perpustakaan & Kerangka Kerja</th></tr>
|
<tr class="section"><th colspan="2">Pustaka & Framework</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>Kerangka GUI</td>
|
<td>Framework GUI</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Pemrosesan Gambar</td>
|
||||||
</tr>
|
</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>
|
<td>Permintaan HTTP</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">kemasan</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Penanganan Versi & Paket</td>
|
<td>Manajemen Versi & Pemaketan</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">penurunan harga</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>Render Penurunan Harga</td>
|
<td>Rendering Markdown</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">logguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Pencatatan</td>
|
<td>Logging</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Aset & Kontributor</th></tr>
|
<tr class="section"><th colspan="2">Aset & Kontributor</th></tr>
|
||||||
<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>
|
<td>Suara Notifikasi</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Kontributor Kode</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -607,7 +613,7 @@ Proyek ini dilisensikan di bawah Lisensi MIT - lihat file [LICENSE](../LICENSE)
|
|||||||
|
|
||||||
## ⚠️ Penafian
|
## ⚠️ 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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+277
-271
@@ -12,81 +12,82 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Un moderno downloader da YouTube con un'interfaccia PySide6 pulita.**
|
**Un downloader YouTube moderno con un'interfaccia PySide6 pulita.**
|
||||||
Scarica video di qualsiasi qualità, estrai audio, recupera sottotitoli e altro ancora.
|
Scarica video in qualsiasi qualità, estrai audio, ottieni sottotitoli e molto altro.
|
||||||
|
|
||||||
### 🌍 README Lingue
|
### 🌍 Lingue del README
|
||||||
|
|
||||||
Inglese: [EN](../README.md)
|
Inglese: [EN](../README.md)
|
||||||
| Indirizzo: [AR](README.ar.md)
|
| Arabo: [AR](README.ar.md)
|
||||||
| Tedesco: [DE](README.de.md)
|
| Tedesco: [DE](README.de.md)
|
||||||
| Español: [ES](README.es.md)
|
| Spagnolo: [ES](README.es.md)
|
||||||
| Francese: [FR](README.fr.md)
|
| Francese: [FR](README.fr.md)
|
||||||
| Nome: [HI](README.hi.md)
|
| Hindi: [HI](README.hi.md)
|
||||||
| Bahasa Indonesia: [ID](README.id.md)
|
| Indonesiano: [ID](README.id.md)
|
||||||
| Italiano: [IT](README.it.md)
|
| Italiano: [IT](README.it.md)
|
||||||
| 日本語: [JA](README.ja.md)
|
| Giapponese: [JA](README.ja.md)
|
||||||
| Polacco: [PL](README.pl.md)
|
| Polacco: [PL](README.pl.md)
|
||||||
| Portoghese: [PT](README.pt.md)
|
| Portoghese: [PT](README.pt.md)
|
||||||
| Russo: [RU](README.ru.md)
|
| Russo: [RU](README.ru.md)
|
||||||
| Turchia: [TR](README.tr.md)
|
| Turco: [TR](README.tr.md)
|
||||||
| Nome: [ZH](README.zh.md)
|
| Cinese: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Installazione</a> •
|
<a href="#installazione">Installazione</a> •
|
||||||
<a href="#features">Caratteristiche</a> •
|
<a href="#caratteristiche">Caratteristiche</a> •
|
||||||
<a href="#usage">Utilizzo</a> •
|
<a href="#utilizzo">Utilizzo</a> •
|
||||||
<a href="#screenshots">Screenshot</a> •
|
<a href="#screenshot">Screenshot</a> •
|
||||||
<a href="#troubleshooting">Risoluzione dei problemi</a> •
|
<a href="#risoluzione-dei-problemi">Risoluzione dei problemi</a> •
|
||||||
<a href="#sponsor">Sponsor</a> •
|
<a href="#sponsor">Sponsor</a> •
|
||||||
<a href="#contributing">Contribuendo</a>
|
<a href="#contribuire">Contribuire</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="perché-ytsage"></a>
|
||||||
## ❓Perché YTSage?
|
## ❓ Perché YTSage?
|
||||||
|
|
||||||
YTSage è progettato per gli utenti che desiderano un **downloader YouTube semplice ma potente**. A differenza di altri strumenti, offre:
|
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
|
- Un'interfaccia PySide6 moderna e pulita
|
||||||
- Download con un clic per video, audio e sottotitoli
|
- Download di video, audio e sottotitoli con un solo clic
|
||||||
- Funzionalità avanzate come SponsorBlock, fusione dei sottotitoli e selezione della playlist
|
- Funzioni avanzate come SponsorBlock, fusione dei sottotitoli e selezione della playlist
|
||||||
- Modalità generica opzionale per i siti supportati da yt-dlp oltre YouTube
|
- Modalità Generica opzionale per siti diversi da YouTube supportati da yt-dlp
|
||||||
- Supporto multipiattaforma e facilità di installazione
|
- Supporto multipiattaforma e installazione semplice
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="caratteristiche"></a>
|
||||||
## ✨Caratteristiche
|
## ✨ Caratteristiche
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Caratteristiche principali | Funzionalità avanzate | Funzionalità extra |
|
| Funzioni Base | Funzioni Avanzate | Funzioni Extra |
|
||||||
|------------------------------------|----------------------------------------------|------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Tabella dei formati | 🚫Integrazione SponsorBlock | 🎞️ Visualizzazione FPS/HDR |
|
| 🎥 Tabella Formati | 🚫 Integrazione SponsorBlock | 🎞️ Visualizzazione FPS/HDR |
|
||||||
| 🎵Estrazione audio | 📝 Seleziona e unisci più sottotitoli | 🔄 Aggiornamento automatico yt-dlp |
|
| 🎵 Estrazione Audio | 📝 Selezione e Fusione Sottotitoli | 🔄 Aggiornamento automatico yt-dlp |
|
||||||
| ✨Interfaccia utente semplice | 💾 Salva descrizione e miniatura | 🛠️ Rilevamento FFmpeg/yt-dlp/Deno |
|
| ✨ Interfaccia Utente Semplice | 💾 Salva Descrizione e Anteprima | 🛠️ Rilevamento FFmpeg/yt-dlp/Deno |
|
||||||
| 📋 Supporto e selettore playlist | 🚀Limitatore di velocità | ⚙️ Comandi personalizzati |
|
| 📋 Supporto e Selettore Playlist | 🚀 Limitatore di Velocità | ⚙️ Comandi Personalizzati |
|
||||||
| 📑 Incorpora capitoli | ✂️ Taglia le sezioni video | 🍪 Accedi con i cookie |
|
| 📑 Integrazione Capitoli | ✂️ Ritaglio Sezioni Video | 🍪 Login tramite Cookie |
|
||||||
| 📜 Scarica Cronologia | 🔄 Rilascio Selezione canale | 🌐Supporto proxy |
|
| 📜 Cronologia Download | 🔄 Scelta del Canale di Rilascio | 🌐 Supporto Proxy |
|
||||||
| 🎚️ Conversione del formato audio | 🎬 Impostazioni formato video | 🆙 Scheda Aggiornamento integrata |
|
| 🎚️ Conversione Formato Audio | 🎬 Impostazioni Formato Video | 🆙 Tab Aggiornamento Integrato |
|
||||||
| 🌍 Modalità generica | 🔊 Normalizzazione audio (EBU R128) | 🌍 Localizzazione in 14 lingue |
|
| 🌍 Modalità Generica | 🔊 Normalizzazione Audio (EBU R128) | 🌍 Localizzazione in 14 lingue |
|
||||||
|
| 💾 Esportazione Playlist | ⚙️ Qualità e Sottotitoli Predefiniti | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="installazione"></a>
|
||||||
## 🚀 Installazione
|
## 🚀 Installazione
|
||||||
|
|
||||||
### ⚡ Installazione rapida (consigliata)
|
### ⚡ Installazione Rapida (Consigliata)
|
||||||
|
|
||||||
Installa YTSage da PyPI:
|
Installa YTSage tramite PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Aggiorna un'installazione esistente</summary>
|
<summary>🔄 Aggiornare un'installazione esistente</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,51 +95,51 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Quindi avvia l'app:
|
Quindi esegui l'applicazione:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
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 |
|
| Formato | Descrizione |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Programma di installazione standard |
|
|  | Installer Standard |
|
||||||
|  | Con FFmpeg in bundle |
|
|  | Include FFmpeg |
|
||||||
|  | Versione portatile, nessuna installazione richiesta |
|
|  | Versione Portable, nessuna installazione richiesta |
|
||||||
|  | Portatile con FFmpeg, zippato |
|
|  | Portable con FFmpeg, compresso (ZIP) |
|
||||||
|
|
||||||
<details>
|
<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.
|
1. **Installer EXE (`.exe`)**: Fare doppio clic sul file e seguire la procedura guidata.
|
||||||
2. **Versione portatile (`.zip`)**: estrai l'archivio nella posizione desiderata ed esegui `ytsage.exe`.
|
2. **Versione Portable (`.zip`)**: Estrarre l'archivio nella posizione desiderata ed eseguire `ytsage.exe`.
|
||||||
3. **FFmpeg in bundle**: scegli le versioni in bundle di FFmpeg se non hai FFmpeg installato sul tuo sistema.
|
3. **FFmpeg integrato**: Se non hai FFmpeg sul tuo sistema, scegli le versioni con FFmpeg integrato.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Formato | Descrizione |
|
| Formato | Descrizione |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Pacchetto Debian |
|
|  | Pacchetto Debian |
|
||||||
|  | AppImage, portatile |
|
|  | AppImage, Portable |
|
||||||
|  | Pacchetto RPM |
|
|  | Pacchetto RPM |
|
||||||
|  | Pacchetto Flatpack |
|
|  | Bundle Flatpak |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Passaggi di installazione</summary>
|
<summary>🛠️ Passaggi per l'installazione</summary>
|
||||||
|
|
||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
@@ -147,7 +148,7 @@ ytsage
|
|||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **Flatpak**: segui le istruzioni su Flathub o esegui:
|
- **Flatpak**: Seguire le istruzioni su Flathub o eseguire:
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
@@ -157,22 +158,22 @@ ytsage
|
|||||||
|
|
||||||
| Formato | Descrizione |
|
| Formato | Descrizione |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Applicazione zippata per Apple Silicon |
|
|  | App ZIP per Apple Silicon |
|
||||||
|  | Programma di installazione dell'immagine disco per Apple Silicon |
|
|  | Installer Disk Image per Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<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.
|
- **Installer DMG (`.dmg`)**: Fare doppio clic per montare, quindi trascinare `YTSage.app` nella cartella Applicazioni.
|
||||||
- **Archivio app (`.zip`)**: estrai il file zip e sposta `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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻 Installazione manuale dalla fonte</summary>
|
<summary>💻 Installazione manuale dai sorgenti</summary>
|
||||||
|
|
||||||
### 1. Clonare il repository
|
### 1. Clonare il repository
|
||||||
|
|
||||||
@@ -181,7 +182,7 @@ git clone https://github.com/oop7/YTSage.git
|
|||||||
cd YTSage
|
cd YTSage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Installa le dipendenze
|
### 2. Installare le dipendenze
|
||||||
|
|
||||||
#### ⚡ Con uv
|
#### ⚡ Con uv
|
||||||
|
|
||||||
@@ -189,7 +190,7 @@ cd YTSage
|
|||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 Oppure con pip standard
|
#### 📦 O con pip standard
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
@@ -203,226 +204,230 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="screenshot"></a>
|
||||||
## 📸 Schermate
|
## 📸 Screenshot
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Download Playlist" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Scarica impostazioni</em></td>
|
<td align="center"><em>Impostazioni Download</em></td>
|
||||||
<td align="center"><em>Scarica playlist</em></td>
|
<td align="center"><em>Download Playlist</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="Selezione Formato Audio" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opzioni Personalizzate" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Formato audio</em></td>
|
<td align="center"><em>Formato Audio</em></td>
|
||||||
<td align="center"><em>Opzioni personalizzate</em></td>
|
<td align="center"><em>Opzioni Personalizzate</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="utilizzo"></a>
|
||||||
## 📖 Utilizzo
|
## 📖 Utilizzo
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Utilizzo di base</summary>
|
<summary>🎯 Utilizzo Base</summary>
|
||||||
|
|
||||||
1. **Avvia YTSage**
|
1. **Avvia YTSage**
|
||||||
2. **Incolla l'URL di YouTube** (o utilizza il pulsante "Incolla URL")
|
2. **Incolla un URL di YouTube** (o usa il pulsante "Incolla URL")
|
||||||
3. **Fai clic su "Analizza"**
|
3. **Clicca su "Analizza"**
|
||||||
4. **Seleziona formato:**
|
4. **Scegli il formato:**
|
||||||
- `Video` per i download di video
|
- `Video` per il download del video
|
||||||
- `Audio Only` per l'estrazione audio
|
- `Solo Audio` per l'estrazione dell'audio
|
||||||
5. **Scegli le opzioni:**
|
5. **Seleziona le opzioni:**
|
||||||
- Abilita i sottotitoli e seleziona la lingua
|
- Abilita i sottotitoli e scegli la lingua
|
||||||
- Abilita l'unione dei sottotitoli
|
- Abilita la fusione dei sottotitoli
|
||||||
- Salva miniatura
|
- Salva l'anteprima (thumbnail)
|
||||||
- Rimuovere i segmenti dello sponsor
|
- Rimuovi sezioni sponsor
|
||||||
- Salva descrizione
|
- Salva la descrizione
|
||||||
- Incorpora capitoli
|
- Incorpora i capitoli
|
||||||
6. **Seleziona directory di output**
|
6. **Scegli la directory di destinazione**
|
||||||
7. **Fai clic su "Scarica"**
|
7. **Clicca su "Download"**
|
||||||
|
|
||||||
> 💡 La directory di download predefinita è la cartella "Download" dell'utente.
|
> 💡 La directory di download predefinita è la cartella "Download" dell'utente.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 Download della playlist</summary>
|
<summary>📋 Download Playlist</summary>
|
||||||
|
|
||||||
1. **Incolla l'URL della playlist**
|
1. **Incolla l'URL della playlist**
|
||||||
2. **Fai clic su "Analizza"**
|
2. **Clicca su "Analizza"**
|
||||||
3. **Seleziona i video dal selettore della playlist (facoltativo, l'impostazione predefinita è tutti)**
|
3. **Seleziona i video dal selettore (opzionale, tutti per impostazione predefinita)**
|
||||||
4. **Scegli il formato/la qualità desiderata**
|
4. **Scegli il formato/qualità desiderati**
|
||||||
5. **Fai clic su "Scarica"**
|
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>
|
||||||
|
|
||||||
<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`.
|
1. Apri `Impostazioni Download`.
|
||||||
2. Abilita `Generic Mode`.
|
2. Abilita `Modalità Generica`.
|
||||||
3. Incolla un video o un URL di playlist non YouTube supportato.
|
3. Incolla un URL di un video o di una playlist supportata che non sia YouTube.
|
||||||
4. Fare clic su `Analyze`.
|
4. Clicca su `Analizza`.
|
||||||
5. Scegli un formato e scarica come al solito.
|
5. Scegli un formato e scarica normalmente.
|
||||||
|
|
||||||
Note:
|
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.
|
- 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, una sessione di accesso, un proxy o argomenti yt-dlp aggiuntivi a seconda dell'estrattore.
|
- Alcuni siti richiedono cookie, login, 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.
|
- Se un sito fallisce, aggiorna yt-dlp dal tab di aggiornamento integrato prima di segnalare il problema.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **Opzioni Sottotitoli:** Filtra le lingue e incorpora i sottotitoli nel file video.
|
||||||
- **Unione sottotitoli:** unisci i sottotitoli nel file video per i sottotitoli hardcoded
|
- **Fusione Sottotitoli:** Fonde i sottotitoli nel file video per sottotitoli permanenti (hardcoded).
|
||||||
- **Salva descrizione:** salva la descrizione del video come file di testo
|
- **Salva Descrizione:** Salva la descrizione del video come file di testo.
|
||||||
- **Salva miniatura:** salva la miniatura del video come file immagine
|
- **Salva Anteprima:** Salva l'anteprima (thumbnail) del video come file immagine.
|
||||||
- **Incorpora capitoli:** incorpora indicatori di capitolo come metadati per lettori video compatibili
|
- **Incorpora Capitoli:** Include i segnaposti dei capitoli come metadati per i lettori video compatibili.
|
||||||
- **Rimuovi segmenti di sponsor:** rimuovi i segmenti di sponsor dal video utilizzando SponsorBlock
|
- **Rimuovi Sezioni Sponsor:** Usa SponsorBlock per rimuovere i segmenti sponsorizzati dal video.
|
||||||
- **Taglia video:** scarica solo parti specifiche di un video specificando gli intervalli di tempo nel formato `HH:MM:SS`
|
- **Ritaglia Video:** Scarica solo parti specifiche del video specificando un intervallo di tempo nel formato `HH:MM:SS`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **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**.
|
- **Salva Percorso Download:** Salva il percorso di download predefinito per i download futuri. Disponibile in **Impostazioni Download → Percorso 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**.
|
- **Risoluzione Video Predefinita:** Imposta la risoluzione video preferita per la selezione automatica (es. 1080p, 720p). Disponibile in **Impostazioni Download → Risoluzione Video Predefinita**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Normalizzazione audio:** Standardizza il volume per i download solo audio utilizzando EBU R128.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Accesso e Rete</summary>
|
<summary>🌐 Accesso e Rete</summary>
|
||||||
|
|
||||||
- **Accedi con i cookie:** Accedi a YouTube utilizzando i cookie per accedere ai contenuti privati.
|
- **Login tramite Cookie:** Accedi a YouTube utilizzando i cookie per accedere ai contenuti privati.
|
||||||
Come usarlo:
|
Utilizzo:
|
||||||
1. **Consigliato:** utilizza l'opzione `Extract cookies from browser` integrata nell'app, quindi seleziona il browser e, facoltativamente, un profilo.
|
1. **Consigliato:** Usa l'opzione integrata nell'app `Estrai cookie dal browser`, quindi scegli il browser e opzionalmente il profilo.
|
||||||
2. In alternativa, estrarre manualmente i cookie:
|
2. In alternativa, estrai i cookie manualmente:
|
||||||
un. Esporta i cookie dal tuo browser utilizzando un'estensione come [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file)
|
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 in formato Netscape
|
b. Copia i cookie nel formato Netscape
|
||||||
c. Crea un file denominato `cookies.txt` e incollaci i cookie
|
c. Crea un file chiamato `cookies.txt` e incolla i cookie
|
||||||
d. Seleziona il file `cookies.txt` nell'app
|
d. Seleziona il file `cookies.txt` nell'app
|
||||||
- **Supporto proxy:** utilizza un server proxy per i download, ad esempio `http://<proxy-server>:<port>`
|
- **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**.
|
- **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>
|
||||||
|
|
||||||
<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
|
- **Comandi Personalizzati:** Accedi alle funzioni 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:
|
- **Tab Aggiornamento:** Gestisci gli strumenti di aggiornamento integrati da un unico posto nelle Opzioni Personalizzate:
|
||||||
- **Aggiornamenti yt-dlp:** controlla gli aggiornamenti e passa tra i canali di rilascio stabile e notturno
|
- **Aggiornamento yt-dlp:** Controlla gli aggiornamenti e passa tra i canali di rilascio Stabile e Nightly.
|
||||||
- **Controllo versione FFmpeg:** controlla la tua versione di FFmpeg e apri le guide di installazione
|
- **Controllo Versione FFmpeg:** Verifica la tua versione di FFmpeg e apri le guide all'installazione.
|
||||||
- **Aggiornamenti Deno:** controlla e aggiorna il runtime Deno
|
- **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 dalla finestra di dialogo Informazioni.
|
- **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 precedenti con miniature e stati dal pulsante **Cronologia**.
|
- **Cronologia Download:** Visualizza i download passati con anteprime e stati dal pulsante **Cronologia**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Localizzazione</summary>
|
<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 |
|
| Lingua | Codice | Lingua | Codice |
|
||||||
|----------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 Inglese | `en` | 🇪🇸Spagnolo | `es` |
|
| 🇺🇸 Inglese | `en` | 🇪🇸 Spagnolo | `es` |
|
||||||
| 🇸🇦 Arabo | `ar` | 🇫🇷 Francese | `fr` |
|
| 🇸🇦 Arabo | `ar` | 🇫🇷 Francese | `fr` |
|
||||||
| 🇩🇪 Tedesco | `de` | 🇮🇳 Hindi | `hi` |
|
| 🇩🇪 Tedesco | `de` | 🇮🇳 Hindi | `hi` |
|
||||||
| 🇮🇩 Indonesiano | `id` | 🇮🇹Italiano | `it` |
|
| 🇮🇩 Indonesiano | `id` | 🇮🇹 Italiano | `it` |
|
||||||
| 🇯🇵Giapponese | `ja` | 🇵🇱 Polacco | `pl` |
|
| 🇯🇵 Giapponese | `ja` | 🇵🇱 Polacco | `pl` |
|
||||||
| 🇧🇷 Portoghese | `pt` | 🇷🇺 Russo | `ru` |
|
| 🇧🇷 Portoghese | `pt` | 🇷🇺 Russo | `ru` |
|
||||||
| 🇹🇷 Turco | `tr` | 🇨🇳Cinese | `zh` |
|
| 🇹🇷 Turco | `tr` | 🇨🇳 Cinese | `zh` |
|
||||||
|
|
||||||
### Traduzioni README
|
### Traduzioni del README
|
||||||
|
|
||||||
| Lingua | File | Lingua | File |
|
| 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) |
|
| 🇸🇦 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) |
|
| 🇩🇪 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) |
|
| 🇮🇩 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) |
|
| 🇯🇵 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) |
|
| 🇧🇷 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>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="risoluzione-dei-problemi"></a>
|
||||||
## 🛠️ Risoluzione dei problemi
|
## 🛠️ Risoluzione dei problemi
|
||||||
|
|
||||||
<details>
|
<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.
|
- **La tabella dei formati non appare:** Aggiorna yt-dlp all'ultima versione e prova a passare a yt-dlp Nightly.
|
||||||
- **Download non riuscito:** controlla la tua connessione Internet e assicurati che il video sia disponibile.
|
- **Download fallito:** Controlla la tua connessione internet e assicurati che il video sia disponibile.
|
||||||
- **Errori di download specifici:**
|
- **Errori di download specifici:**
|
||||||
- **Video privati:** utilizza l'autenticazione tramite cookie per accedere ai contenuti privati.
|
- **Video Privati:** Usa 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à.
|
- **Contenuti con limiti di età:** Accedi al tuo account YouTube per visualizzare i video con limiti di età.
|
||||||
- **Video geo-bloccati:** valuta la possibilità di utilizzare una VPN per aggirare le restrizioni regionali.
|
- **Video bloccati geograficamente:** Considera l'uso di una VPN per aggirare le restrizioni regionali.
|
||||||
- **Video rimossi/eliminati:** il video non è più disponibile su YouTube.
|
- **Video rimosso:** Il video non è più disponibile su YouTube.
|
||||||
- **Streaming live:** Gli streaming live non possono essere scaricati; attendere la fine dello streaming.
|
- **Live Stream:** I live stream non possono essere scaricati durante la trasmissione; attendi la fine dello stream.
|
||||||
- **Errori di rete:** controlla la connessione Internet e riprova.
|
- **Errori di rete:** Controlla la tua connessione internet e riprova.
|
||||||
- **URL non validi:** assicurati che l'URL sia corretto e provenga da una piattaforma supportata.
|
- **URL non valido:** Assicurati che l'URL sia corretto e provenga da una piattaforma supportata.
|
||||||
- **Contenuti premium:** richiede l'abbonamento a YouTube Premium.
|
- **Contenuti Premium:** Richiede un abbonamento YouTube Premium.
|
||||||
- **Blocchi dovuti al copyright:** Il contenuto è bloccato a causa di restrizioni sul copyright.
|
- **Blocco 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à.
|
- **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<version>-ffmpeg.exe`, fornito in bundle con FFmpeg.
|
- **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
|
#### 🛡️ 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:**
|
**Perché succede:**
|
||||||
- L'euristica dell'antivirus può identificare erroneamente gli eseguibili compressi come sospetti
|
- Le euristiche dell'antivirus potrebbero identificare erroneamente gli eseguibili pacchettizzati come sospetti.
|
||||||
|
|
||||||
**Alternative sicure:**
|
**Opzioni sicure:**
|
||||||
- ✅ **Utilizza installazione pip:** `pip install ytsage` (consigliato)
|
- ✅ **Usa l'installazione tramite pip:** `pip install ytsage` (consigliato)
|
||||||
- ✅ **Crea dal codice sorgente**: seguendo questo [guide](../.github/CI_CD_README.md)
|
- ✅ **Compila dai sorgenti**: Seguendo questa [guida](.github/CI_CD_README.md)
|
||||||
- ✅ **Autorizza l'applicazione** nel tuo software antivirus
|
- ✅ **Aggiungi l'applicazione alla whitelist** nel tuo software antivirus.
|
||||||
|
|
||||||
#### 🍎 macOS: "L'app è danneggiata e non può essere aperta"
|
#### 🍎 macOS: "L’app è danneggiata e non può essere aperta"
|
||||||
Se visualizzi questo errore su macOS Sonoma o versioni successive, devi rimuovere l'attributo quarantena.
|
Se visualizzi questo errore su macOS Sonoma o versioni successive, devi rimuovere l'attributo di quarantena.
|
||||||
|
|
||||||
1. **Apri Terminale** (puoi trovarlo utilizzando Spotlight).
|
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:
|
2. **Digita il seguente comando** ma **NON** premere ancora Invio. Assicurati di includere lo spazio alla fine:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
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. **Premere Invio** per eseguire il comando.
|
4. **Premi Invio** per eseguire il comando.
|
||||||
5. **Prova ad aprire nuovamente YTSage.app.** Ora dovrebbe avviarsi correttamente.
|
5. **Prova a riaprire YTSage.app.** Ora dovrebbe avviarsi correttamente.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **Posizioni di configurazione (avanzate)**
|
#### **Percorsi di configurazione (Avanzato)**
|
||||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/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>
|
<a id="sponsor"></a>
|
||||||
## 💖 Sponsor
|
## 💖 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
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- Il collegamento allo sponsor è disponibile anche direttamente all'interno dell'app dalla finestra di dialogo Informazioni.
|
- Il link per la sponsorizzazione è disponibile direttamente tramite il dialogo Informazioni all'interno dell'app.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="contribuire"></a>
|
||||||
## 👥 Contribuire
|
## 👥 Contribuire
|
||||||
|
|
||||||
Diamo il benvenuto ai contributi! Ecco come puoi aiutare:
|
I contributi sono benvenuti! Ecco come puoi aiutare:
|
||||||
|
|
||||||
1. 🍴 Effettua il fork del repository
|
1. 🍴 Fork del repository
|
||||||
2. 🌿 Crea il tuo ramo di funzionalità:
|
2. 🌿 Crea il tuo ramo per la funzione:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/FunzioneIncredibile
|
||||||
```
|
```
|
||||||
3. 💾 Applica le tue modifiche:
|
3. 💾 Fai il commit delle tue modifiche:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Aggiungi FunzioneIncredibile'
|
||||||
```
|
```
|
||||||
4. 📤 Spingere verso il ramo:
|
4. 📤 Fai il push sul ramo:
|
||||||
```bash
|
```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
|
### 🌍 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`
|
- 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>
|
<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/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # Configurazioni GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Modelli per segnalazioni
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Modello per segnalazione bug
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # Workflow GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Workflow build Linux
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # Workflow build macOS
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Workflow build Windows
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Workflow release master
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # Documentazione CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Asset di branding (screenshot, SVG)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Icone dell'app
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Screenshot per la documentazione
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # Asset SVG
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # File della licenza
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Metadati del progetto e dipendenze
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Documentazione del progetto
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Dipendenze Python (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Pacchetto del codice sorgente
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Asset runtime
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Icone dell'app
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # File audio
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # File di localizzazione
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Traduzione araba
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Traduzione tedesca
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Traduzione inglese
|
||||||
│ └── ... # Other languages
|
│ └── ... # Altre lingue
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Logica di business principale
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Integrazione Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Funzionalità di download
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # Integrazione FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Funzioni di utilità
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # Integrazione yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Componenti dell'interfaccia utente
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Finestra principale dell'app
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Classi per i dialoghi
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Moduli di utilità
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Gestione configurazione
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Strumenti di logging
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Punto di ingresso del pacchetto
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Script di esecuzione principale
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Storia delle stelle
|
## ⭐️ Cronologia Stelle
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Storia delle stelle
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -541,63 +546,64 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Licenza
|
## 📜 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
|
## 🙏 Ringraziamenti
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Mostra Ringraziamenti</summary>
|
<summary>Mostra Ringraziamenti</summary>
|
||||||
|
|
||||||
<div align="center">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Componenti principali</th></tr>
|
<tr class="section"><th colspan="2">Componenti Principali</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>Elaborazione multimediale</td>
|
<td>Elaborazione Media</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Librerie e framework</th></tr>
|
<tr class="section"><th colspan="2">Librerie e Framework</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>Framework GUI</td>
|
<td>Framework GUI</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">Cuscino</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>Elaborazione immagini</td>
|
<td>Elaborazione Immagini</td>
|
||||||
</tr>
|
</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>
|
<td>Richieste HTTP</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">imballaggio</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Gestione versioni e pacchetti</td>
|
<td>Gestione Versioni e Packaging</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">ribasso</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>Rendering riduzione</td>
|
<td>Rendering Markdown</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Registrazione</td>
|
<td>Logging</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Risorse e contributori</th></tr>
|
<tr class="section"><th colspan="2">Asset e Collaboratori</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nuova notifica 09 di Universfield</a></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>
|
<td>Suono di Notifica</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>Codice Contributore</td>
|
<td>Collaboratore al Codice</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -607,12 +613,12 @@ Questo progetto è concesso in licenza con la licenza MIT: per i dettagli vedere
|
|||||||
|
|
||||||
## ⚠️ Disclaimer
|
## ⚠️ 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">
|
<div align="center">
|
||||||
|
|
||||||
Realizzato con ❤️ da [oop7](https://github.com/oop7)
|
Creato con ❤️ da [oop7](https://github.com/oop7)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+279
-272
@@ -12,81 +12,82 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**クリーンな PySide6 インターフェイスを備えた最新の YouTube ダウンローダー。**
|
**クリーンなPySide6インターフェースを備えたモダンなYouTubeダウンローダー。**
|
||||||
任意の品質でビデオをダウンロードしたり、音声を抽出したり、字幕を取得したりできます。
|
あらゆる品質でのビデオダウンロード、オーディオ抽出、字幕取得などが可能です。
|
||||||
|
|
||||||
### 🌍 README 言語
|
### 🌍 README 言語
|
||||||
|
|
||||||
英語: [EN](../README.md)
|
英語: [EN](../README.md)
|
||||||
|番号: [AR](README.ar.md)
|
| アラビア語: [AR](README.ar.md)
|
||||||
|ドイツ語: [DE](README.de.md)
|
| ドイツ語: [DE](README.de.md)
|
||||||
|スペイン語: [ES](README.es.md)
|
| スペイン語: [ES](README.es.md)
|
||||||
|フランセ: [FR](README.fr.md)
|
| フランス語: [FR](README.fr.md)
|
||||||
|名前: [HI](README.hi.md)
|
| ヒンディー語: [HI](README.hi.md)
|
||||||
|インドネシア語: [ID](README.id.md)
|
| インドネシア語: [ID](README.id.md)
|
||||||
|イタリアーノ: [IT](README.it.md)
|
| イタリア語: [IT](README.it.md)
|
||||||
| 日本語: [JA](README.ja.md)
|
| 日本語: [JA](README.ja.md)
|
||||||
|ポルスキー: [PL](README.pl.md)
|
| ポーランド語: [PL](README.pl.md)
|
||||||
|ポルトガル語: [PT](README.pt.md)
|
| ポルトガル語: [PT](README.pt.md)
|
||||||
| Русский: [RU](README.ru.md)
|
| ロシア語: [RU](README.ru.md)
|
||||||
|テュルクチェ: [TR](README.tr.md)
|
| トルコ語: [TR](README.tr.md)
|
||||||
| 中文: [ZH](README.zh.md)
|
| 中国語: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">インストール</a> •
|
<a href="#インストール">インストール</a> •
|
||||||
<a href="#features">特徴</a> •
|
<a href="#機能">機能</a> •
|
||||||
<a href="#usage">使用方法</a> •
|
<a href="#使い方">使い方</a> •
|
||||||
<a href="#screenshots">スクリーンショット</a> •
|
<a href="#スクリーンショット">スクリーンショット</a> •
|
||||||
<a href="#troubleshooting">トラブルシューティング</a> •
|
<a href="#トラブルシューティング">トラブルシューティング</a> •
|
||||||
<a href="#sponsor">スポンサー</a> •
|
<a href="#スポンサー">スポンサー</a> •
|
||||||
<a href="#contributing">貢献しています</a>
|
<a href="#貢献">貢献</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="なぜytsageなのか"></a>
|
||||||
## ❓ なぜ YTSage なのか?
|
## ❓ なぜ YTSage なのか?
|
||||||
|
|
||||||
YTSage は、**シンプルかつ強力な YouTube ダウンローダー**を求めるユーザー向けに設計されています。他のツールとは異なり、次の機能を提供します。
|
YTSageは、**シンプルでありながら強力なYouTubeダウンローダー**を求めるユーザーのために設計されています。他のツールとは異なり、以下の機能を提供します:
|
||||||
|
|
||||||
- クリーンでモダンな PySide6 インターフェイス
|
- モダンでクリーンなPySide6インターフェース
|
||||||
- ワンクリックでビデオ、オーディオ、字幕をダウンロード
|
- ビデオ、オーディオ、字幕のワンクリックダウンロード
|
||||||
- スポンサーブロック、字幕の結合、プレイリストの選択などの高度な機能
|
- SponsorBlock、字幕結合、プレイリスト選択などの高度な機能
|
||||||
- YouTube 以外の yt-dlp 対応サイト向けのオプションの汎用モード
|
- yt-dlpがサポートするYouTube以外のサイト向けのオプションのジェネリックモード
|
||||||
- クロスプラットフォームのサポートと簡単なインストール
|
- クロスプラットフォーム対応と簡単なインストール
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="機能"></a>
|
||||||
## ✨ 特徴
|
## ✨ 機能
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
|コア機能 |高度な機能 |追加機能 |
|
| 基本機能 | 高度な機能 | 追加機能 |
|
||||||
|---------------------------------|-------------------------------------------|-------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 テーブルのフォーマット | 🚫 スポンサーブロックの統合 | 🎞️ FPS/HDR ディスプレイ |
|
| 🎥 フォーマットテーブル | 🚫 SponsorBlock統合 | 🎞️ FPS/HDR表示 |
|
||||||
| 🎵 オーディオ抽出 | 📝 複数字幕の選択と結合 | 🔄 yt-dlp を自動更新 |
|
| 🎵 オーディオ抽出 | 📝 字幕選択と結合 | 🔄 yt-dlp自動更新 |
|
||||||
| ✨シンプルなUI | 💾 説明とサムネイルを保存 | 🛠️ FFmpeg/yt-dlp/Deno 検出 |
|
| ✨ シンプルなユーザーインターフェース | 💾 説明とサムネイルの保存 | 🛠️ FFmpeg/yt-dlp/Deno検出 |
|
||||||
| 📋 プレイリストのサポートとセレクター | 🚀 スピードリミッター | ⚙️ カスタムコマンド |
|
| 📋 プレイリストのサポートと選択 | 🚀 速度制限 | ⚙️ カスタムコマンド |
|
||||||
| 📑 章を埋め込む | ✂️ ビデオセクションをトリミング | 🍪 Cookie でログイン |
|
| 📑 チャプター統合 | ✂️ ビデオセクションのトリミング | 🍪 クッキーログイン |
|
||||||
| 📜 ダウンロード履歴 | 🔄 チャンネル選択をリリース | 🌐 プロキシサポート |
|
| 📜 ダウンロード履歴 | 🔄 リリースチャネルの選択 | 🌐 プロキシサポート |
|
||||||
| 🎚️ オーディオ形式変換 | 🎬 ビデオ形式設定 | 🆙 内蔵アップデータタブ |
|
| 🎚️ オーディオフォーマット変換 | 🎬 ビデオフォーマット設定 | 🆙 統合アップデートタブ |
|
||||||
| 🌍 汎用モード | 🔊 オーディオ正規化 (EBU R128) | 🌍 14 言語のローカリゼーション |
|
| 🌍 ジェネリックモード | 🔊 オーディオノーマライズ (EBU R128) | 🌍 14言語へのローカライズ |
|
||||||
|
| 💾 プレイリストのエクスポート | ⚙️ デフォルトの品質と字幕 | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="インストール"></a>
|
||||||
## 🚀 インストール
|
## 🚀 インストール
|
||||||
|
|
||||||
### ⚡ クイックインストール (推奨)
|
### ⚡ クイックインストール (推奨)
|
||||||
|
|
||||||
PyPI から YTSage をインストールします。
|
PyPI経由でYTSageをインストールします:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 既存のインストールを更新します</summary>
|
<summary>🔄 既存のインストールを更新する</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,41 +95,41 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
次に、アプリを起動します。
|
その後、アプリケーションを実行します:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 📦 ビルド済みの実行可能ファイル
|
### 📦 ビルド済み実行ファイル (Executable)
|
||||||
|
|
||||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
> [👉 最新リリースをダウンロード](https://github.com/oop7/YTSage/releases/latest)
|
||||||
|
|
||||||
#### 🪟 Windows
|
#### 🪟 Windows
|
||||||
|
|
||||||
|フォーマット |説明 |
|
| フォーマット | 説明 |
|
||||||
|----------|---------------|
|
|--------|-------------|
|
||||||
|  |標準インストーラー |
|
|  | 標準インストーラー |
|
||||||
|  | FFmpeg がバンドルされている |
|
|  | FFmpeg同梱 |
|
||||||
|  |ポータブル版、インストール不要 |
|
|  | ポータブル版、インストール不要 |
|
||||||
|  | FFmpeg、zip 形式でポータブル |
|
|  | FFmpeg同梱、ポータブル版 (ZIP縮小) |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ インストール手順</summary>
|
<summary>🛠️ インストール手順</summary>
|
||||||
|
|
||||||
1. **EXE インストーラー (`.exe`)**: ファイルをダブルクリックし、セットアップ ウィザードに従います。
|
1. **EXE インストーラー (`.exe`)**: ファイルをダブルクリックし、セットアップウィザードに従います。
|
||||||
2. **ポータブル バージョン (`.zip`)**: アーカイブを目的の場所に解凍し、`ytsage.exe` を実行します。
|
2. **ポータブル版 (`.zip`)**: アーカイブを任意の場所に展開し、`ytsage.exe` を実行します。
|
||||||
3. **FFmpeg バンドル**: システムに FFmpeg がインストールされていない場合は、FFmpeg バンドル バージョンを選択します。
|
3. **内蔵 FFmpeg**: システムに FFmpeg がインストールされていない場合は、FFmpeg 同梱版を選択してください。
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
|フォーマット |説明 |
|
| フォーマット | 説明 |
|
||||||
|----------|---------------|
|
|--------|-------------|
|
||||||
|  | Debian パッケージ |
|
|  | Debian パッケージ |
|
||||||
|  | AppImage、ポータブル |
|
|  | AppImage、ポータブル |
|
||||||
|  | RPM パッケージ |
|
|  | RPM パッケージ |
|
||||||
|  |フラットパックバンドル |
|
|  | Flatpak バンドル |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ インストール手順</summary>
|
<summary>🛠️ インストール手順</summary>
|
||||||
@@ -136,18 +137,18 @@ ytsage
|
|||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
sudo dpkg -i ytsage_*.deb
|
||||||
sudo apt-get install -f # Fix missing dependencies if any
|
sudo apt-get install -f # 必要に応じて不足している依存関係を修正
|
||||||
```
|
```
|
||||||
- **RPM (`.rpm`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **アプリ画像 (`.AppImage`)**:
|
- **AppImage (`.AppImage`)**:
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **Flatpak**: Flathub の指示に従うか、次のコマンドを実行します。
|
- **Flatpak**: Flathub の指示に従うか、以下を実行します:
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
@@ -155,18 +156,18 @@ ytsage
|
|||||||
|
|
||||||
#### 🍎 macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
|フォーマット |説明 |
|
| フォーマット | 説明 |
|
||||||
|----------|---------------|
|
|--------|-------------|
|
||||||
|  | Apple Silicon 用の ZIP アプリケーション |
|
|  | Apple Silicon 用 ZIP アプリ |
|
||||||
|  | Apple Silicon 用のディスク イメージ インストーラー |
|
|  | Apple Silicon 用ディスクイメージインストーラー |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ インストール手順</summary>
|
<summary>🛠️ インストール手順</summary>
|
||||||
|
|
||||||
- **DMG インストーラー (`.dmg`)**: ダブルクリックしてマウントし、`YTSage.app` をアプリケーション フォルダーにドラッグします。
|
- **DMG インストーラー (`.dmg`)**: ダブルクリックしてマウントし、`YTSage.app` をアプリケーションフォルダにドラッグします。
|
||||||
- **アプリ アーカイブ (`.zip`)**: zip を解凍し、`YTSage.app` をアプリケーション フォルダーに移動します。
|
- **App アーカイブ (`.zip`)**: ZIP を展開し、`YTSage.app` をアプリケーションフォルダに移動します。
|
||||||
|
|
||||||
*注意:「アプリが破損しています」エラーが発生した場合は、以下の[macOS troubleshooting section](#troubleshooting)を参照してください。*
|
*注意: 「アプリが破損しています」というエラーが表示される場合は、以下の macOS トラブルシューティング セクションを参照してください。*
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -174,7 +175,7 @@ ytsage
|
|||||||
<details>
|
<details>
|
||||||
<summary>💻 ソースからの手動インストール</summary>
|
<summary>💻 ソースからの手動インストール</summary>
|
||||||
|
|
||||||
### 1. リポジトリのクローンを作成します
|
### 1. リポジトリをクローンする
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
@@ -183,13 +184,13 @@ cd YTSage
|
|||||||
|
|
||||||
### 2. 依存関係をインストールする
|
### 2. 依存関係をインストールする
|
||||||
|
|
||||||
#### ⚡ UV あり
|
#### ⚡ uv を使用する場合
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 または標準の pip を使用
|
#### 📦 または標準の pip を使用する場合
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
@@ -203,330 +204,335 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="スクリーンショット"></a>
|
||||||
## 📸 スクリーンショット
|
## 📸 スクリーンショット
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
<td><img src="../branding/screenshots/Download-Settings.png" alt="ダウンロード設定" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="プレイリストダウンロード" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>ダウンロード設定</em></td>
|
<td align="center"><em>ダウンロード設定</em></td>
|
||||||
<td align="center"><em>プレイリストダウンロード</em></td>
|
<td align="center"><em>プレイリストダウンロード</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="オーディオフォーマット選択" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="カスタムオプション" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>オーディオフォーマット</em></td>
|
<td align="center"><em>オーディオフォーマット</em></td>
|
||||||
<td align="center"><em>カスタム オプション</em></td>
|
<td align="center"><em>カスタムオプション</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
## 📖 使用法
|
<a id="使い方"></a>
|
||||||
|
## 📖 使い方
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 基本的な使い方</summary>
|
<summary>🎯 基本的な使い方</summary>
|
||||||
|
|
||||||
1. **YTSage を起動**
|
1. **YTSage を起動する**
|
||||||
2. **YouTube URL を貼り付け** (または [URL を貼り付け] ボタンを使用)
|
2. **YouTube の URL を貼り付ける** (または「URL を貼り付け」ボタンを使用)
|
||||||
3. **「分析」をクリックします**
|
3. **「分析」をクリックする**
|
||||||
4. **形式を選択します:**
|
4. **フォーマットを選択する:**
|
||||||
- `Video` ビデオダウンロード用
|
- ビデオダウンロードの場合は `Video`
|
||||||
- `Audio Only` 音声抽出用
|
- オーディオ抽出の場合は `Audio Only`
|
||||||
5. **オプションを選択します:**
|
5. **オプションを選択する:**
|
||||||
- 字幕を有効にし、言語を選択します
|
- 字幕を有効にして言語を選択
|
||||||
- 字幕のマージを有効にする
|
- 字幕結合を有効化
|
||||||
- サムネイルの保存
|
- サムネイルを保存
|
||||||
- スポンサーセグメントの削除
|
- スポンサーセクションを削除
|
||||||
- 説明の保存
|
- 説明を保存
|
||||||
- 章を埋め込む
|
- チャプターを埋め込む
|
||||||
6. **出力ディレクトリを選択**
|
6. **出力ディレクトリを選択する**
|
||||||
7. **「ダウンロード」をクリックします**
|
7. **「ダウンロード」をクリックする**
|
||||||
|
|
||||||
> 💡 デフォルトのダウンロード ディレクトリは、ユーザーの「ダウンロード」フォルダーです。
|
> 💡 デフォルトのダウンロードディレクトリは、ユーザーの「ダウンロード」フォルダです。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 プレイリストのダウンロード</summary>
|
<summary>📋 プレイリストのダウンロード</summary>
|
||||||
|
|
||||||
1. **プレイリストの URL を貼り付け**
|
1. **プレイリストの URL を貼り付ける**
|
||||||
2. **「分析」をクリックします**
|
2. **「分析」をクリックする**
|
||||||
3. **プレイリスト セレクターからビデオを選択します (オプション、デフォルトはすべて)**
|
3. **プレイリストセレクターからビデオを選択する (任意、デフォルトはすべて)**
|
||||||
4. **希望の形式/品質を選択します**
|
4. **希望のフォーマット/品質を選択する**
|
||||||
5. **「ダウンロード」をクリック**
|
5. **「ダウンロード」をクリックする**
|
||||||
|
|
||||||
> 💡 アプリケーションはダウンロードキューを自動的に処理します
|
> 💡 アプリケーションはダウンロードキューを自動的に管理し、プレイリストのエントリを `.txt`, `.csv`, `.m3u`, または `.json` ファイルとしてエクスポートできます。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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` を開きます。
|
1. `Download Settings` を開きます。
|
||||||
2. `Generic Mode` を有効にします。
|
2. `Generic Mode` を有効にします。
|
||||||
3. サポートされている YouTube 以外のビデオまたはプレイリストの URL を貼り付けます。
|
3. YouTube 以外のサポートされているビデオまたはプレイリストの URL を貼り付けます。
|
||||||
4. 「`Analyze`」をクリックします。
|
4. `Analyze` をクリックします。
|
||||||
5. 形式を選択し、通常どおりダウンロードします。
|
5. フォーマットを選択し、通常通りダウンロードします。
|
||||||
|
|
||||||
注:
|
注意:
|
||||||
|
|
||||||
- 汎用モードでは、YTSage 内の URL 検証のみが変更されます。ターゲット サイトは、インストールされている yt-dlp バージョンでサポートされている必要があります。
|
- ジェネリックモードは、YTSage 内部の URL バリデーションのみを変更します。対象サイトは、インストールされている yt-dlp バージョンでサポートされている必要があります。
|
||||||
- 一部のサイトでは、エクストラクターに応じて、Cookie、ログイン セッション、プロキシ、または追加の yt-dlp 引数が必要です。
|
- サイトによっては、エクストラクターに応じてクッキー、ログイン、プロキシ、または追加の yt-dlp 引数が必要になる場合があります。
|
||||||
- サイトに障害が発生した場合は、問題を報告する前に、まず組み込みのアップデーター タブから yt-dlp を更新してください。
|
- サイトが失敗する場合は、問題を報告する前に統合アップデートタブから yt-dlp を更新してください。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰 メディアとダウンロードのオプション</summary>
|
<summary>🧰 メディアとダウンロードのオプション</summary>
|
||||||
|
|
||||||
- **字幕オプション:** 言語をフィルターし、ビデオ ファイルに字幕を埋め込みます。
|
- **字幕オプション:** 言語をフィルタリングし、字幕をビデオファイルに埋め込みます。
|
||||||
- **字幕の結合:** ハードコードされた字幕のビデオ ファイルに字幕を結合します。
|
- **字幕結合:** 字幕をビデオファイルにマージして、焼き付け字幕(ハードコード)にします。
|
||||||
- **説明の保存:** ビデオの説明をテキスト ファイルとして保存します。
|
- **説明の保存:** ビデオの説明をテキストファイルとして保存します。
|
||||||
- **サムネイルの保存:** ビデオのサムネイルを画像ファイルとして保存します。
|
- **サムネイルの保存:** ビデオのサムネイルを画像ファイルとして保存します。
|
||||||
- **チャプターの埋め込み:** 互換性のあるビデオ プレーヤーのメタデータとしてチャプター マーカーを埋め込みます。
|
- **チャプターの埋め込み:** 対応しているビデオプレーヤー用に、チャプターマーカーをメタデータとして含めます。
|
||||||
- **スポンサー セグメントの削除:** SponsorBlock を使用してビデオからスポンサー セグメントを削除します。
|
- **スポンサーセクションを削除:** SponsorBlock を使用して、ビデオからスポンサーセグメントを削除します。
|
||||||
- **ビデオのトリミング:** `HH:MM:SS` 形式で時間範囲を指定して、ビデオの特定の部分のみをダウンロードします
|
- **ビデオのトリミング:** `HH:MM:SS` 形式で時間範囲を指定して、ビデオの特定のセクションのみをダウンロードします。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️ 出力とファイルの設定</summary>
|
<summary>⚙️ 出力とファイルの設定</summary>
|
||||||
|
|
||||||
- **速度リミッター:** ダウンロード速度を制限します (例: `500K` 500 KB/秒)
|
- **速度制限:** ダウンロード速度を制限します(例:500 KB/s の場合は `500K`)。
|
||||||
- **ダウンロード パスの保存:** 今後のダウンロードのためにデフォルトのダウンロード パスを保存します。 **[ダウンロード設定] → [ダウンロード パス]** で利用できます。
|
- **ダウンロードパスの保存:** 将来のダウンロードのためにデフォルトのダウンロードパスを保存します。**Download Settings → Download Path** で設定可能です。
|
||||||
- **出力ファイル名の形式:** `%(title)s`、`%(uploader)s`、`%(resolution)s` などの変数を使用して、出力ファイル名の形式をカスタマイズします。 **ダウンロード設定 → ファイル名形式**で利用できます。- **出力形式を強制:** ビデオを`mp4`、`webm`、`mkv`などの特定のコンテナ形式に強制的にダウンロードします。 **ダウンロード設定 → 出力形式設定**で利用できます。
|
- **デフォルトのビデオ解像度:** 自動選択のために好みのビデオ解像度を設定します(例:1080p, 720p)。**Download Settings → Default Video Resolution** で設定可能です。
|
||||||
- **オーディオ形式変換:** オーディオのみのダウンロードを、`AAC`、`MP3`、`FLAC`、`WAV`、`Opus`、`M4A`、などの優先形式に変換します。 `Vorbis`、または `Best`。 **ダウンロード設定 → オーディオ形式設定**で利用できます。
|
- **デフォルトの字幕言語:** 自動選択のためにデフォルトの字幕言語を設定します(カンマ区切り、例:`ja,en`)。**Download Settings → Default Subtitle Languages** で設定可能です。
|
||||||
- **オーディオの正規化:** EBU R128 を使用して、オーディオのみのダウンロードの音量を標準化します。
|
- **ファイル名形式:** `%(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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 アクセスとネットワーク</summary>
|
<summary>🌐 アクセスとネットワーク</summary>
|
||||||
|
|
||||||
- **Cookie を使用してログイン:** Cookie を使用して YouTube にログインし、プライベート コンテンツにアクセスします。
|
- **クッキーログイン:** クッキーを使用して YouTube にログインし、非公開コンテンツにアクセスします。
|
||||||
使用方法:
|
使用方法:
|
||||||
1. **推奨:** アプリに組み込まれている `Extract cookies from browser` オプションを使用し、ブラウザーとオプションでプロファイルを選択します。
|
1. **推奨:** アプリ内蔵の `Extract cookies from browser` オプションを使用し、ブラウザと(必要に応じて)プロフィールを選択します。
|
||||||
2. または、Cookie を手動で抽出します。
|
2. あるいは、クッキーを手動で抽出します:
|
||||||
a. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) のような拡張子を使用してブラウザから Cookie をエクスポートします。
|
a. [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) などの拡張機能を使用して、ブラウザからクッキーをエクスポートします。
|
||||||
b. Netscape 形式で Cookie をコピーします。
|
b. Netscape 形式でクッキーをコピーします。
|
||||||
c. `cookies.txt` という名前のファイルを作成し、そこに Cookie を貼り付けます。
|
c. `cookies.txt` という名前のファイルを作成し、クッキーを貼り付けます。
|
||||||
d.アプリで `cookies.txt` ファイルを選択します
|
d. アプリで `cookies.txt` ファイルを選択します。
|
||||||
- **プロキシ サポート:** ダウンロードにはプロキシ サーバーを使用します (例: `http://<proxy-server>:<port>`)
|
- **プロキシサポート:** ダウンロードにプロキシサーバーを使用します(例:`http://<proxy-server>:<port>`)。
|
||||||
- **汎用モード:** YTSage が yt-dlp でサポートされている YouTube 以外のサイトから分析してダウンロードできるようにします。 **[ダウンロード設定] → [汎用モード]** から有効にします。
|
- **ジェネリックモード:** YTSage が yt-dlp でサポートされている YouTube 以外のサイトから分析およびダウンロードできるようにします。**Download Settings → Generic Mode** から有効にします。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ ツールとメンテナンス</summary>
|
<summary>🛠️ ツールとメンテナンス</summary>
|
||||||
|
|
||||||
- **カスタム コマンド:** コマンドライン引数を介して高度な yt-dlp 機能にアクセスします
|
- **カスタムコマンド:** コマンドライン引数を介して高度な yt-dlp 機能にアクセスします。
|
||||||
- **「アップデータ」タブ:** カスタム オプションの 1 か所から組み込みの更新ツールを管理します。
|
- **アップデートタブ:** カスタムオプション内の一箇所で内蔵のアップデートツールを管理します:
|
||||||
- **yt-dlp アップデート:** アップデートを確認し、安定リリース チャネルと夜間リリース チャネルを切り替えます。
|
- **yt-dlp アップデート:** アップデートを確認し、Stable と Nightly リリースチャネルを切り替えます。
|
||||||
- **FFmpeg バージョン チェッカー:** FFmpeg バージョンを確認し、インストール ガイドを開きます
|
- **FFmpeg バージョンチェッカー:** FFmpeg のバージョンを確認し、インストールガイドを開きます。
|
||||||
- **Deno の更新:** Deno ランタイムを確認して更新します
|
- **Deno アップデート:** Deno ランタイムを確認し、アップデートします。
|
||||||
- **FFmpeg/yt-dlp/Deno 検出:** [バージョン情報] ダイアログから FFmpeg、yt-dlp、および Deno のパスとバージョンを自動的に検出します。
|
- **FFmpeg/yt-dlp/Deno 検出:** About ダイアログから FFmpeg、yt-dlp、Deno のパスとバージョンを自動的に検出します。
|
||||||
- **ダウンロード履歴:** **履歴** ボタンから過去のダウンロードをサムネイルとステータスとともに表示します。
|
- **ダウンロード履歴:** **History** ボタンから、サムネイルとステータス付きで過去のダウンロードを表示します。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 ローカリゼーション</summary>
|
<summary>🌍 ローカライズ</summary>
|
||||||
|
|
||||||
YTSage は **14 の言語**をサポートしており、世界中からアクセスできます。 **カスタム オプション → 言語** から希望の言語を選択します。
|
YTSage はグローバルに対応するため、**14 言語**をサポートしています。**Custom Options → Language** で好みの言語を選択してください。
|
||||||
|
|
||||||
### サポートされている言語
|
### サポートされている言語
|
||||||
|
|
||||||
|言語 |コード |言語 |コード |
|
| 言語 | コード | 言語 | コード |
|
||||||
|----------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 英語 | `en` | 🇪🇸 スペイン語 | `es` |
|
| 🇺🇸 英語 | `en` | 🇪🇸 スペイン語 | `es` |
|
||||||
| 🇸🇦アラビア語 | `ar` | 🇫🇷 フランス語 | `fr` |
|
| 🇸🇦 アラビア語 | `ar` | 🇫🇷 フランス語 | `fr` |
|
||||||
| 🇩🇪 ドイツ語 | `de` | 🇮🇳ヒンディー語 | `hi` |
|
| 🇩🇪 ドイツ語 | `de` | 🇮🇳 ヒンディー語 | `hi` |
|
||||||
| 🇮🇩インドネシア語 | `id` | 🇮🇹イタリア語 | `it` |
|
| 🇮🇩 インドネシア語 | `id` | 🇮🇹 イタリア語 | `it` |
|
||||||
| 🇯🇵 日本語 | `ja` | 🇵🇱ポーランド語 | `pl` |
|
| 🇯🇵 日本語 | `ja` | 🇵🇱 ポーランド語 | `pl` |
|
||||||
| 🇧🇷 ポルトガル語 | `pt` | 🇷🇺ロシア語 | `ru` |
|
| 🇧🇷 ポルトガル語 | `pt` | 🇷🇺 ロシア語 | `ru` |
|
||||||
| 🇹🇷 トルコ語 | `tr` | 🇨🇳中国語 | `zh` |
|
| 🇹🇷 トルコ語 | `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.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.id.md](README.id.md) | 🇮🇹 イタリア語 | [README.it.md](README.it.md) |
|
||||||
| 🇯🇵 日本語 | [README.ja.md](README.ja.md) | 🇵🇱ポーランド語 | [README.pl.md](README.pl.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.pt.md](README.pt.md) | 🇷🇺 ロシア語 | [README.ru.md](README.ru.md) |
|
||||||
| 🇹🇷 トルコ語 | [README.tr.md](README.tr.md) | 🇨🇳中国語 | [README.zh.md](README.zh.md) |
|
| 🇹🇷 トルコ語 | [README.tr.md](README.tr.md) | 🇨🇳 中国語 | [README.zh.md](README.zh.md) |
|
||||||
|
|
||||||
> 💡 **翻訳に貢献しませんか?** 言語を追加するには、[Contributing](#contributing) セクションをご覧ください。
|
> 💡 **翻訳を手伝いたいですか?** [貢献](#貢献) セクションを参照して、さらに多くの言語を追加するのを手伝ってください!
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="トラブルシューティング"></a>
|
||||||
## 🛠️ トラブルシューティング
|
## 🛠️ トラブルシューティング
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>クリックすると一般的な問題と解決策が表示されます</summary>
|
<summary>クリックして一般的な問題と解決策を表示</summary>
|
||||||
|
|
||||||
- **フォーマット テーブルが表示されない:** yt-dlp を最新バージョンに更新し、毎晩 yt-dlp に切り替えます。
|
- **フォーマットテーブルが表示されない:** yt-dlp を最新バージョンに更新し、yt-dlp Nightly への切り替えを試してください。
|
||||||
- **ダウンロードが失敗する:** インターネット接続をチェックし、ビデオが利用可能であることを確認してください。
|
- **ダウンロードが失敗する:** インターネット接続を確認し、ビデオが利用可能であることを確認してください。
|
||||||
- **特定のダウンロード エラー:**
|
- **特定のダウンロードエラー:**
|
||||||
- **プライベート ビデオ:** Cookie 認証を使用してプライベート コンテンツにアクセスします。
|
- **非公開ビデオ:** 非公開コンテンツにアクセスするには、クッキー認証を使用してください。
|
||||||
- **年齢制限のあるコンテンツ:** 年齢制限のある動画を閲覧するには、YouTube アカウントにログインしてください。
|
- **年齢制限のあるコンテンツ:** YouTube アカウントにログインして、年齢制限のあるビデオを表示してください。
|
||||||
- **地理的にブロックされたビデオ:** 地域制限を回避するには、VPN の使用を検討してください。
|
- **ジオブロックされたビデオ:** 地域制限を回避するために VPN の使用を検討してください。
|
||||||
- **削除/削除されたビデオ:** このビデオは YouTube で利用できなくなりました。
|
- **削除されたビデオ:** ビデオは YouTube で利用できなくなっています。
|
||||||
- **ライブ ストリーム:** ライブ ストリームはダウンロードできません。ストリームが終了するまで待ちます。
|
- **ライブストリーム:** ライブストリームは放送中にダウンロードできません。ストリームが終了するまで待ってください。
|
||||||
- **ネットワーク エラー:** インターネット接続を確認して、もう一度試してください。
|
- **ネットワークエラー:** インターネット接続を確認して再試行してください。
|
||||||
- **無効な URL:** URL が正しく、サポートされているプラットフォームからのものであることを確認してください。
|
- **無効な URL:** URL が正しく、サポートされているプラットフォームのものであることを確認してください。
|
||||||
- **プレミアム コンテンツ:** YouTube プレミアム メンバーシップが必要です。
|
- **プレミアムコンテンツ:** YouTube Premium のサブスクリプションが必要です。
|
||||||
- **著作権ブロック:** コンテンツは著作権制限によりブロックされています。
|
- **著作権ブロック:** 著作権制限のため、コンテンツがブロックされています。
|
||||||
- **ダウンロード後にビデオ ファイルとオーディオ ファイルを分離します:** これは、FFmpeg が見つからない、または検出されない場合に発生します。 YTSage では、高品質のビデオ ストリームとオーディオ ストリームをマージするために FFmpeg が必要です。
|
- **ダウンロード後にビデオとオーディオファイルが分かれている:** これは FFmpeg が不足しているか、検出されない場合に発生します。YTSage は、高品質のビデオとオーディオストリームを結合するために FFmpeg を必要とします。
|
||||||
- **解決策:** FFmpeg がシステムの PATH にインストールされ、アクセスできることを確認してください。 Windows ユーザーの場合、最も簡単なオプションは、FFmpeg にバンドルされている `YTSage-v<version>-ffmpeg.exe` ファイルをダウンロードすることです。
|
- **解決策:** FFmpeg がインストールされており、システムの PATH でアクセス可能であることを確認してください。Windows ユーザーにとって最も簡単なオプションは、FFmpeg が同梱されている `YTSage-v<version>-ffmpeg.exe` ファイルをダウンロードすることです。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 🛡️ Windows Defender / ウイルス対策の警告
|
#### 🛡️ Windows Defender / アンチウイルス警告
|
||||||
|
|
||||||
一部のウイルス対策ソフトウェアでは、`.exe` ファイルに誤検知のフラグが立てられる場合があります。これは、パッケージ化されたアプリケーションの**既知の制限**です。
|
一部のアンチウイルスソフトウェアは、`.exe` ファイルを誤検知(False Positive)としてフラグを立てる場合があります。これは、パッケージ化されたアプリケーションの**既知の制限**です。
|
||||||
|
|
||||||
**これが起こる理由:**
|
**なぜ発生するのか:**
|
||||||
- ウイルス対策ヒューリスティックにより、パックされた実行可能ファイルが疑わしいものとして誤認識される可能性がある
|
- アンチウイルスのヒューリスティック機能が、パッケージ化された実行ファイルを疑わしいものとして誤認することがあります。
|
||||||
|
|
||||||
**安全な代替品:**
|
**安全な選択肢:**
|
||||||
- ✅ **pip インストールを使用します:** `pip install ytsage` (推奨)
|
- ✅ **pip インストールを使用する:** `pip install ytsage` (推奨)
|
||||||
- ✅ **ソースからビルド**: これに従ってください [guide](../.github/CI_CD_README.md)
|
- ✅ **ソースからビルドする**: この[ガイド](.github/CI_CD_README.md)に従ってください。
|
||||||
- ✅ **ウイルス対策ソフトウェアでアプリケーションをホワイトリストに登録**
|
- ✅ **アプリケーションをホワイトリストに追加する** (アンチウイルスソフトウェアの設定)。
|
||||||
|
|
||||||
#### 🍎 macOS: 「アプリが破損しているため開けません」
|
#### 🍎 macOS: 「アプリが破損しているため開けません」
|
||||||
macOS Sonoma 以降でこのエラーが発生した場合は、隔離属性を削除する必要があります。
|
macOS Sonoma 以降でこのエラーが表示される場合は、 quarantine(隔離)属性を削除する必要があります。
|
||||||
|
|
||||||
1. **ターミナルを開きます** (Spotlight を使用して見つけることができます)。
|
1. **ターミナルを開きます** (Spotlight で検索できます)。
|
||||||
2. **次のコマンドを入力します**。**まだ Enter キーは押さないでください**。必ず末尾にスペースを含めてください。
|
2. **次のコマンドを入力します** が、まだ Enter は押さないでください。最後にスペースを含めるようにしてください:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
xattr -d com.apple.quarantine
|
||||||
```
|
```
|
||||||
3. **`YTSage.app` ファイル**を Finder ウィンドウからドラッグし、ターミナル ウィンドウに直接ドロップします。これにより、正しいファイル パスが自動的に貼り付けられます。
|
3. **Finder ウィンドウから `YTSage.app` ファイルをドラッグし**、ターミナルウィンドウに直接ドロップします。これにより、正しいファイルパスが自動的に貼り付けられます。
|
||||||
4. **Enter キーを押して**、コマンドを実行します。
|
4. **Enter を押して** コマンドを実行します。
|
||||||
5. **YTSage.app をもう一度開いてみてください。** これで正しく起動するはずです。
|
5. **YTSage.app を再度開いてみてください。** 正しく起動するはずです。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **構成の場所 (詳細)**
|
#### **設定ファイルの場所 (上級者向け)**
|
||||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<a id="スポンサー"></a>
|
||||||
## 💖 スポンサー
|
## 💖 スポンサー
|
||||||
|
|
||||||
YTSage によって時間を節約できる場合は、プロジェクトのスポンサーになることを検討してください。スポンサーシップは、開発時間、プラットフォーム全体のテスト、将来の改善をカバーするのに役立ちます。
|
YTSage があなたの時間を節約できたなら、プロジェクトのスポンサーになることを検討してください。スポンサーシップは、開発時間、全プラットフォームでのテスト、および将来の改善に役立てられます。
|
||||||
|
|
||||||
- GitHub スポンサー: https://github.com/sponsors/oop7
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- スポンサー リンクは、アプリ内の [バージョン情報] ダイアログから直接利用することもできます。
|
- スポンサーリンクは、アプリ内の About ダイアログから直接利用可能です。
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="貢献"></a>
|
||||||
## 👥 貢献しています
|
## 👥 貢献
|
||||||
|
|
||||||
寄付を歓迎します!お手伝いできる方法は次のとおりです。
|
貢献を歓迎します!以下のように手助けができます:
|
||||||
|
|
||||||
1. 🍴 リポジトリをフォークする
|
1. 🍴 リポジトリをフォークする
|
||||||
2. 🌿 機能ブランチを作成します。
|
2. 🌿 フィーチャーブランチを作成する:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/AmazingFeature
|
||||||
```
|
```
|
||||||
3. 💾 変更をコミットします。
|
3. 💾 変更をコミットする:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m 'Add some AmazingFeature'
|
||||||
```
|
```
|
||||||
4. 📤 ブランチにプッシュします。
|
4. 📤 ブランチにプッシュする:
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
git push origin feature/AmazingFeature
|
||||||
```
|
```
|
||||||
5. 🔄 プルリクエストを開く
|
5. 🔄 プルリクエストを作成する
|
||||||
|
|
||||||
### 🌍 翻訳に貢献
|
### 🌍 翻訳に貢献する
|
||||||
|
|
||||||
- 一致するローカライズされた README ファイルを更新します (例: `README.es.md`)
|
- 関連するローカライズ版 README ファイルを更新する (例: `readme-translations/README.ja.md`)
|
||||||
- `ytsage/languages/<code>.json` を編集してアプリ文字列を同期させます
|
- `ytsage/languages/<code>.json` を編集して、アプリの文字列を同期させる
|
||||||
- 言語が見つからない場合は、`README.md` から開始して `README.<code>.md` を作成します
|
- お使いの言語がない場合は、 `README.md` をベースに `README.<code>.md` を作成してください。
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 プロジェクト構造</summary>
|
<summary>📂 プロジェクト構造</summary>
|
||||||
|
|
||||||
## YTSage - プロジェクト構造
|
## YTSage - プロジェクト構造
|
||||||
|
|
||||||
このドキュメントでは、YTSage の整理されたフォルダー構造について説明します。
|
このドキュメントでは、YTSage の整理されたフォルダ構造について説明します。
|
||||||
|
|
||||||
### 📁 プロジェクトの構造
|
### 📁 プロジェクト構造
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # GitHub 設定
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # イシューテンプレート
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # バグレポートテンプレート
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # GitHub Actions ワークフロー
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Linux ビルドワークフロー
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # macOS ビルドワークフロー
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Windows ビルドワークフロー
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # マスターリリースワークフロー
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # CI/CD ドキュメント
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # ブランディングアセット (スクリーンショット, SVG)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # アプリアイコン
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # ドキュメント用スクリーンショット
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # SVG アセット
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # ライセンスファイル
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # プロジェクトメタデータと依存関係
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # プロジェクトドキュメント
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Python 依存関係 (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # ソースコードパッケージ
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # ランタイムアセット
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # アプリアイコン
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # オーディオファイル
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # ローカライズファイル
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # アラビア語翻訳
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # ドイツ語翻訳
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # 英語翻訳
|
||||||
│ └── ... # Other languages
|
│ └── ... # その他の言語
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # コアビジネスロジック
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Deno 統合
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # ダウンロード機能
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg 統合
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # ユーティリティ関数
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # yt-dlp 統合
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # ユーザーインターフェースコンポーネント
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # アプリメインウィンドウ
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # ダイアログクラス
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # ユーティリティモジュール
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # 設定管理
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # ロギングツール
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # パッケージエントリポイント
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # メイン実行スクリプト
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️スターの歴史
|
## ⭐️ スター履歴
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## スターの歴史
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -538,9 +544,9 @@ YTSage/
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## 📜ライセンス
|
## 📜 ライセンス
|
||||||
|
|
||||||
このプロジェクトは MIT ライセンスに基づいてライセンスされています。詳細については、[LICENSE](../LICENSE) ファイルを参照してください。
|
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は [LICENSE](LICENSE) ファイルを参照してください。
|
||||||
|
|
||||||
## 🙏 謝辞
|
## 🙏 謝辞
|
||||||
|
|
||||||
@@ -549,21 +555,21 @@ YTSage/
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<p>改善の提案やバグの報告のために問題を開いてこのプロジェクトに貢献してくださった皆様に心から感謝します。</p>
|
<p>改善の提案やバグの報告のためにイシューを開いてこのプロジェクトに貢献してくださったすべての方々に感謝いたします。</p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr class="section"><th colspan="2">コアコンポーネント</th></tr>
|
<tr class="section"><th colspan="2">主要コンポーネント</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||||
<td>ダウンロード エンジン</td>
|
<td>ダウンロードエンジン</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>メディア処理</td>
|
<td>メディア処理</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">デノ</a></td>
|
<td><a href="https://deno.com/">Deno</a></td>
|
||||||
<td>yt-dlp との統合用ランタイム</td>
|
<td>yt-dlp 統合用ランタイム</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">ライブラリとフレームワーク</th></tr>
|
<tr class="section"><th colspan="2">ライブラリとフレームワーク</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -571,32 +577,33 @@ YTSage/
|
|||||||
<td>GUI フレームワーク</td>
|
<td>GUI フレームワーク</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">枕</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>画像処理</td>
|
<td>画像処理</td>
|
||||||
</tr>
|
</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>
|
<td>HTTP リクエスト</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">梱包</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>バージョンとパッケージの取り扱い</td>
|
<td>バージョン管理とパッケージ化</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">値下げ</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>マークダウン レンダリング</td>
|
<td>Markdown レンダリング</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>ロギング</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">アセットと寄稿者</th></tr>
|
<tr class="section"><th colspan="2">アセットと貢献者</th></tr>
|
||||||
<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>
|
<td>通知音</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">ウイルス185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>コード寄稿者</td>
|
<td>コード貢献者</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -604,14 +611,14 @@ YTSage/
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⚠️免責事項
|
## ⚠️ 免責事項
|
||||||
|
|
||||||
このツールは個人使用のみを目的としています。 YouTube の利用規約とコンテンツ作成者の権利を尊重してください。
|
このツールは個人利用のみを目的としています。YouTube の利用規約およびコンテンツ制作者の権利を尊重してください。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
[oop7](https://github.com/oop7) によって ❤️ で作られました
|
Created with ❤️ by [oop7](https://github.com/oop7)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+259
-253
@@ -12,81 +12,82 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Nowoczesny downloader YouTube z przejrzystym interfejsem PySide6.**
|
**Nowoczesny downloader YouTube z czystym interfejsem PySide6.**
|
||||||
Pobieraj filmy w dowolnej jakości, wyodrębniaj dźwięk, pobieraj napisy i nie tylko.
|
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)
|
Angielski: [EN](../README.md)
|
||||||
| Numer telefonu: [AR](README.ar.md)
|
| Arabski: [AR](README.ar.md)
|
||||||
| Niemiecki: [DE](README.de.md)
|
| Niemiecki: [DE](README.de.md)
|
||||||
| Hiszpański: [ES](README.es.md)
|
| Hiszpański: [ES](README.es.md)
|
||||||
| Français: [FR](README.fr.md)
|
| Francuski: [FR](README.fr.md)
|
||||||
| हिन्दी: [HI](README.hi.md)
|
| Hindi: [HI](README.hi.md)
|
||||||
| Bahasa Indonezja: [ID](README.id.md)
|
| Indonezyjski: [ID](README.id.md)
|
||||||
| włoski: [IT](README.it.md)
|
| Włoski: [IT](README.it.md)
|
||||||
| 日本語: [JA](README.ja.md)
|
| Japoński: [JA](README.ja.md)
|
||||||
| Polski: [PL](README.pl.md)
|
| Polski: [PL](README.pl.md)
|
||||||
| Portugalski: [PT](README.pt.md)
|
| Portugalski: [PT](README.pt.md)
|
||||||
| Rosyjski: [RU](README.ru.md)
|
| Rosyjski: [RU](README.ru.md)
|
||||||
| Turecki: [TR](README.tr.md)
|
| Turecki: [TR](README.tr.md)
|
||||||
| Nazwa: [ZH](README.zh.md)
|
| Chiński: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Instalacja</a> •
|
<a href="#instalacja">Instalacja</a> •
|
||||||
<a href="#features">Funkcje</a> •
|
<a href="#funkcje">Funkcje</a> •
|
||||||
<a href="#usage">Użycie</a> •
|
<a href="#użycie">Użycie</a> •
|
||||||
<a href="#screenshots">Zrzuty ekranu</a> •
|
<a href="#zrzuty-ekranu">Zrzuty ekranu</a> •
|
||||||
<a href="#troubleshooting">Rozwiązywanie problemów</a> •
|
<a href="#rozwiązywanie-problemów">Rozwiązywanie problemów</a> •
|
||||||
<a href="#sponsor">Sponsor</a> •
|
<a href="#sponsor">Sponsor</a> •
|
||||||
<a href="#contributing">Wspieranie</a>
|
<a href="#współpraca">Współpraca</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="dlaczego-ytsage"></a>
|
||||||
## ❓ Dlaczego YTSage?
|
## ❓ 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
|
- Pobieranie wideo, audio i napisów jednym kliknięciem
|
||||||
- Zaawansowane funkcje, takie jak SponsorBlock, łączenie napisów i wybór listy odtwarzania
|
- Zaawansowane funkcje, takie jak SponsorBlock, scalanie napisów i wybór playlisty
|
||||||
- Opcjonalny tryb ogólny dla witryn obsługujących yt-dlp poza YouTube
|
- Opcjonalny tryb ogólny (Generic Mode) dla stron spoza YouTube obsługiwanych przez yt-dlp
|
||||||
- Obsługa wielu platform i łatwa instalacja
|
- Obsługa wielu platform i łatwa instalacja
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="funkcje"></a>
|
||||||
## ✨ Funkcje
|
## ✨ Funkcje
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Podstawowe funkcje | Zaawansowane funkcje | Dodatkowe funkcje |
|
| Funkcje podstawowe | Funkcje zaawansowane | Funkcje dodatkowe |
|
||||||
|----------------------------------|------------------------------------------------------|-----------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Formatuj tabelę | 🚫 Integracja z blokiem sponsorskim | 🎞️ Wyświetlacz FPS/HDR |
|
| 🎥 Tabela formatów | 🚫 Integracja SponsorBlock | 🎞️ Wyświetlanie FPS/HDR |
|
||||||
| 🎵 Ekstrakcja dźwięku | 📝 Wybierz i połącz wiele napisów | 🔄 Automatyczna aktualizacja yt-dlp |
|
| 🎵 Wyodrębnianie audio | 📝 Wybór i scalanie napisów | 🔄 Auto-aktualizacja yt-dlp |
|
||||||
| ✨ Prosty interfejs użytkownika | 💾 Zapisz opis i miniaturę | 🛠️ Wykrywanie FFmpeg/yt-dlp/Deno |
|
| ✨ Prosty interfejs użytkownika | 💾 Zapis opisu i miniatur | 🛠️ Wykrywanie FFmpeg/yt-dlp/Deno |
|
||||||
| 📋 Obsługa i wybór list odtwarzania | 🚀 Ogranicznik prędkości | ⚙️ Polecenia niestandardowe |
|
| 📋 Obsługa i wybór playlist | 🚀 Ogranicznik prędkości | ⚙️ Własne komendy |
|
||||||
| 📑 Umieść rozdziały | ✂️ Przytnij sekcje wideo | 🍪 Zaloguj się za pomocą plików cookie |
|
| 📑 Integracja rozdziałów | ✂️ Przycinanie sekcji wideo | 🍪 Logowanie przez ciasteczka |
|
||||||
| 📜 Pobierz historię | 🔄 Zwolnij wybór kanału | 🌐 Wsparcie proxy |
|
| 📜 Historia pobierania | 🔄 Wybór kanału wydań | 🌐 Obsługa proxy |
|
||||||
| 🎚️ Konwersja formatu audio | 🎬 Ustawienia formatu wideo | 🆙 Wbudowana zakładka Aktualizator |
|
| 🎚️ Konwersja formatów audio | 🎬 Ustawienia formatu wideo | 🆙 Zintegrowana karta aktualizacji |
|
||||||
| 🌍 Tryb ogólny | 🔊 Normalizacja dźwięku (EBU R128) | 🌍 Lokalizacja w 14 językach |
|
| 🌍 Tryb ogólny | 🔊 Normalizacja audio (EBU R128) | 🌍 Lokalizacja w 14 językach |
|
||||||
|
| 💾 Eksport playlisty | ⚙️ Domyślna jakość i napisy | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="instalacja"></a>
|
||||||
## 🚀 Instalacja
|
## 🚀 Instalacja
|
||||||
|
|
||||||
### ⚡ Szybka instalacja (zalecane)
|
### ⚡ Szybka instalacja (zalecana)
|
||||||
|
|
||||||
Zainstaluj YTSage z PyPI:
|
Zainstaluj YTSage przez PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Zaktualizuj istniejącą instalację</summary>
|
<summary>🔄 Aktualizacja istniejącej instalacji</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -100,33 +101,33 @@ Następnie uruchom aplikację:
|
|||||||
ytsage
|
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 |
|
||||||
|------------|------------|
|
|--------|-------------|
|
||||||
|  | Standardowy instalator |
|
|  | Standardowy instalator |
|
||||||
|  | Z pakietem FFmpeg |
|
|  | Z dołączonym FFmpeg |
|
||||||
|  | Wersja przenośna, nie wymaga instalacji |
|
|  | Wersja przenośna, nie wymaga instalacji |
|
||||||
|  | Przenośny z FFmpeg, spakowany |
|
|  | Przenośna z FFmpeg, skompresowana (ZIP) |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Kroki instalacji</summary>
|
<summary>🛠️ Kroki instalacji</summary>
|
||||||
|
|
||||||
1. **Instalator EXE (`.exe`)**: Kliknij dwukrotnie plik i postępuj zgodnie z instrukcjami kreatora instalacji.
|
1. **Instalator EXE (`.exe`)**: Kliknij dwukrotnie plik i postępuj zgodnie z instrukcjami kreatora.
|
||||||
2. **Wersja przenośna (`.zip`)**: Wypakuj archiwum do wybranej lokalizacji i uruchom `ytsage.exe`.
|
2. **Wersja przenośna (`.zip`)**: Rozpakuj archiwum w wybranym miejscu i uruchom `ytsage.exe`.
|
||||||
3. **FFmpeg w pakiecie**: Wybierz wersję w pakiecie FFmpeg, jeśli nie masz zainstalowanego FFmpeg w swoim systemie.
|
3. **Wbudowany FFmpeg**: Jeśli nie masz zainstalowanego FFmpeg w systemie, wybierz wersję z dołączonym FFmpeg.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Formatuj | Opis |
|
| Format | Opis |
|
||||||
|------------|------------|
|
|--------|-------------|
|
||||||
|  | Pakiet Debiana |
|
|  | Pakiet Debian |
|
||||||
|  | Obraz aplikacji, przenośny |
|
|  | AppImage, przenośny |
|
||||||
|  | Pakiet RPM |
|
|  | Pakiet RPM |
|
||||||
|  | Pakiet Flatpak |
|
|  | Pakiet Flatpak |
|
||||||
|
|
||||||
@@ -136,18 +137,18 @@ ytsage
|
|||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **Obraz aplikacji (`.AppImage`)**:
|
- **AppImage (`.AppImage`)**:
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./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
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
@@ -155,24 +156,24 @@ ytsage
|
|||||||
|
|
||||||
#### 🍎 macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
| Formatuj | Opis |
|
| Format | Opis |
|
||||||
|------------|------------|
|
|--------|-------------|
|
||||||
|  | Spakowana aplikacja dla Apple Silicon |
|
|  | Aplikacja ZIP dla Apple Silicon |
|
||||||
|  | Instalator obrazu dysku dla Apple Silicon |
|
|  | Instalator Disk Image dla Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Kroki instalacji</summary>
|
<summary>🛠️ Kroki instalacji</summary>
|
||||||
|
|
||||||
- **Instalator DMG (`.dmg`)**: Kliknij dwukrotnie, aby zamontować, a następnie przeciągnij `YTSage.app` do folderu Aplikacje.
|
- **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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻 Instalacja ręczna ze źródła</summary>
|
<summary>💻 Ręczna instalacja ze źródeł</summary>
|
||||||
|
|
||||||
### 1. Sklonuj repozytorium
|
### 1. Sklonuj repozytorium
|
||||||
|
|
||||||
@@ -183,13 +184,13 @@ cd YTSage
|
|||||||
|
|
||||||
### 2. Zainstaluj zależności
|
### 2. Zainstaluj zależności
|
||||||
|
|
||||||
#### ⚡ Z uv
|
#### ⚡ Z użyciem uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 Lub ze standardową końcówką
|
#### 📦 Lub ze standardowym pip
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
@@ -203,226 +204,230 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="zrzuty-ekranu"></a>
|
||||||
## 📸 Zrzuty ekranu
|
## 📸 Zrzuty ekranu
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Pobieranie playlisty" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Pobierz ustawienia</em></td>
|
<td align="center"><em>Ustawienia pobierania</em></td>
|
||||||
<td align="center"><em>Pobieranie listy odtwarzania</em></td>
|
<td align="center"><em>Pobieranie playlisty</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="Wybór formatu audio" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opcje niestandardowe" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Format audio</em></td>
|
<td align="center"><em>Format audio</em></td>
|
||||||
<td align="center"><em>Opcje niestandardowe</em></td>
|
<td align="center"><em>Opcje niestandardowe</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="użycie"></a>
|
||||||
## 📖 Użycie
|
## 📖 Użycie
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Podstawowe użycie</summary>
|
<summary>🎯 Podstawowe użycie</summary>
|
||||||
|
|
||||||
1. **Uruchom YTSage**
|
1. **Uruchom YTSage**
|
||||||
2. **Wklej adres URL YouTube** (lub użyj przycisku „Wklej adres URL”)
|
2. **Wklej URL z YouTube** (lub użyj przycisku "Wklej URL")
|
||||||
3. **Kliknij „Analizuj”**
|
3. **Kliknij "Analizuj"**
|
||||||
4. **Wybierz format:**
|
4. **Wybierz format:**
|
||||||
- `Video` do pobierania plików wideo
|
- `Wideo` dla pobierania wideo
|
||||||
- `Audio Only` do ekstrakcji dźwięku
|
- `Tylko audio` dla wyodrębniania dźwięku
|
||||||
5. **Wybierz opcje:**
|
5. **Wybierz opcje:**
|
||||||
- Włącz napisy i wybierz język
|
- Włącz napisy i wybierz język
|
||||||
- Włącz scalanie napisów
|
- Włącz scalanie napisów
|
||||||
- Zapisz miniaturę
|
- Zapisz miniaturę
|
||||||
- Usuń segmenty sponsorów
|
- Usuń sekcje sponsorowane
|
||||||
- Zapisz opis
|
- Zapisz opis
|
||||||
- Osadzaj rozdziały
|
- Osadź rozdziały
|
||||||
6. **Wybierz katalog wyjściowy**
|
6. **Wybierz folder wyjściowy**
|
||||||
7. **Kliknij „Pobierz”**
|
7. **Kliknij "Pobierz"**
|
||||||
|
|
||||||
> 💡 Domyślnym katalogiem pobierania jest folder „Pobrane” użytkownika.
|
> 💡 Domyślny folder pobierania to folder "Pobrane" użytkownika.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 Pobieranie listy odtwarzania</summary>
|
<summary>📋 Pobieranie playlisty</summary>
|
||||||
|
|
||||||
1. **Wklej adres URL listy odtwarzania**
|
1. **Wklej URL playlisty**
|
||||||
2. **Kliknij „Analizuj”**
|
2. **Kliknij "Analizuj"**
|
||||||
3. **Wybierz filmy z selektora playlist (opcjonalnie, domyślnie wszystkie)**
|
3. **Wybierz filmy z selektora (opcjonalnie, domyślnie wszystkie)**
|
||||||
4. **Wybierz żądany format/jakość**
|
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>
|
||||||
|
|
||||||
<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`.
|
1. Otwórz `Download Settings`.
|
||||||
2. Włącz `Generic Mode`.
|
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`.
|
4. Kliknij `Analyze`.
|
||||||
5. Wybierz format i pobierz jak zwykle.
|
5. Wybierz format i pobierz jak zwykle.
|
||||||
|
|
||||||
Uwagi:
|
Uwagi:
|
||||||
|
|
||||||
- Tryb ogólny zmienia tylko weryfikację adresu URL w YTSage. Witryna docelowa musi nadal być obsługiwana przez zainstalowaną wersję yt-dlp.
|
- 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 witryny wymagają plików cookie, sesji logowania, serwera proxy lub dodatkowych argumentów yt-dlp, w zależności od ekstraktora.
|
- Niektóre strony wymagają ciasteczek, logowania, 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.
|
- Jeśli strona nie działa, zaktualizuj yt-dlp ze zintegrowanej karty aktualizacji przed zgłoszeniem problemu.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **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
|
- **Scalanie napisów:** Scala napisy z plikiem wideo (hardcoded).
|
||||||
- **Zapisz opis:** Zapisz opis filmu jako plik tekstowy
|
- **Zapis opisu:** Zapisuje opis wideo jako plik tekstowy.
|
||||||
- **Zapisz miniaturę:** zapisz miniaturę wideo jako plik obrazu
|
- **Zapis miniatury:** Zapisuje miniaturę wideo jako plik graficzny.
|
||||||
- **Osadzanie rozdziałów:** Osadzanie znaczników rozdziałów jako metadanych dla zgodnych odtwarzaczy wideo
|
- **Osadź rozdziały:** Dołącza znaczniki rozdziałów jako metadane dla kompatybilnych odtwarzaczy.
|
||||||
- **Usuń segmenty sponsora:** Usuń segmenty sponsora z filmu za pomocą funkcji SponsorBlock
|
- **Usuń sekcje sponsorowane:** Używa SponsorBlock do usuwania segmentów sponsorowanych z filmu.
|
||||||
- **Przytnij wideo:** Pobierz tylko określone fragmenty filmu, określając zakresy czasu w formacie `HH:MM:SS`
|
- **Przycinanie wideo:** Pobieraj tylko określone części filmu, określając zakres czasu w formacie `GG:MM:SS`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **Ogranicznik prędkości:** Ogranicz prędkość pobierania, np. `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**.
|
- **Zapisz ścieżkę pobierania:** Zapisuje domyślną ścieżkę dla przyszłych pobrań. Dostępne w **Download Settings → Download Path**.
|
||||||
- **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**.
|
- **Domyślna rozdzielczość wideo:** Ustaw preferowaną rozdzielczość dla automatycznego wyboru (np. 1080p, 720p). Dostępne w **Download Settings → Default Video Resolution**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Normalizacja dźwięku:** Ujednolicenie głośności pobieranych plików zawierających wyłącznie dźwięk za pomocą EBU R128.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Dostęp i sieć</summary>
|
<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.
|
- **Logowanie przez ciasteczka:** Zaloguj się do YouTube, używając ciasteczek, aby uzyskać dostęp do prywatnych treści.
|
||||||
Jak z niego korzystać:
|
Użycie:
|
||||||
1. **Zalecane:** Skorzystaj z wbudowanej opcji `Extract cookies from browser` w aplikacji, a następnie wybierz przeglądarkę i opcjonalnie profil.
|
1. **Zalecane:** Użyj wbudowanej opcji `Eksportuj ciasteczka z przeglądarki`, a następnie wybierz przeglądarkę i opcjonalnie profil.
|
||||||
2. Alternatywnie wyodrębnij pliki cookie ręcznie:
|
2. Alternatywnie, wyeksportuj ciasteczka 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)
|
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 pliki cookie w formacie Netscape
|
b. Skopiuj ciasteczka w formacie Netscape
|
||||||
c. Utwórz plik o nazwie `cookies.txt` i wklej do niego pliki cookie
|
c. Utwórz plik o nazwie `cookies.txt` i wklej ciasteczka
|
||||||
d. Wybierz plik `cookies.txt` w aplikacji
|
d. Wybierz plik `cookies.txt` w aplikacji
|
||||||
- **Obsługa proxy:** Do pobierania używaj serwera proxy, na przykład `http://<proxy-server>:<port>`
|
- **Obsługa proxy:** Użyj serwera proxy do pobierania, np. `http://<serwer-proxy>:<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**.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Narzędzia i konserwacja</summary>
|
<summary>🛠️ Narzędzia i konserwacja</summary>
|
||||||
|
|
||||||
- **Niestandardowe polecenia:** Dostęp do zaawansowanych funkcji yt-dlp poprzez argumenty wiersza poleceń
|
- **Własne komendy:** 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:
|
- **Karta aktualizacji:** 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
|
- **Aktualizacja yt-dlp:** Sprawdzaj aktualizacje i przełączaj się między kanałami Stable i Nightly.
|
||||||
- **Kontrola wersji FFmpeg:** Sprawdź wersję FFmpeg i otwórz przewodniki instalacji
|
- **Sprawdzanie wersji FFmpeg:** Weryfikuj wersję FFmpeg i otwieraj przewodniki instalacji.
|
||||||
- **Aktualizacje Deno:** Sprawdź i zaktualizuj środowisko wykonawcze Deno
|
- **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 dialogowym Informacje.
|
- **Wykrywanie FFmpeg/yt-dlp/Deno:** Automatycznie wykrywa ścieżki i wersje FFmpeg, yt-dlp i Deno w oknie "O programie".
|
||||||
- **Historia pobierania:** Przeglądaj wcześniejsze pobrania z miniaturami i statusami za pomocą przycisku **Historia**.
|
- **Historia pobierania:** Przeglądaj poprzednie pobrania z miniaturami i statusami za pomocą przycisku **History**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Lokalizacja</summary>
|
<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
|
### Obsługiwane języki
|
||||||
|
|
||||||
| Język | Kod | Język | Kod |
|
| Język | Kod | Język | Kod |
|
||||||
|---------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 Angielski | `en` | 🇪🇸 Hiszpański | `es` |
|
| 🇺🇸 Angielski | `en` | 🇪🇸 Hiszpański | `es` |
|
||||||
| 🇸🇦 arabski | `ar` | 🇫🇷 Francuski | `fr` |
|
| 🇸🇦 Arabski | `ar` | 🇫🇷 Francuski | `fr` |
|
||||||
| 🇩🇪 niemiecki | `de` | 🇮🇳 hindi | `hi` |
|
| 🇩🇪 Niemiecki | `de` | 🇮🇳 Hindi | `hi` |
|
||||||
| 🇮🇩 Indonezyjski | `id` | 🇮🇹 włoski | `it` |
|
| 🇮🇩 Indonezyjski | `id` | 🇮🇹 Włoski | `it` |
|
||||||
| 🇯🇵 Japoński | `ja` | 🇵🇱polski | `pl` |
|
| 🇯🇵 Japoński | `ja` | 🇵🇱 Polski | `pl` |
|
||||||
| 🇧🇷 portugalski | `pt` | 🇷🇺 Rosyjski | `ru` |
|
| 🇧🇷 Portugalski | `pt` | 🇷🇺 Rosyjski | `ru` |
|
||||||
| 🇹🇷 Turecki | `tr` | 🇨🇳 chiński | `zh` |
|
| 🇹🇷 Turecki | `tr` | 🇨🇳 Chiński | `zh` |
|
||||||
|
|
||||||
### Tłumaczenia README
|
### Tłumaczenia README
|
||||||
|
|
||||||
| Język | Plik | Język | Plik |
|
| Język | Plik | Język | Plik |
|
||||||
|---------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 Angielski | [README.md](../README.md) | 🇪🇸 Hiszpański | [README.es.md](README.es.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) |
|
| 🇸🇦 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) |
|
| 🇩🇪 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) |
|
| 🇮🇩 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) |
|
| 🇯🇵 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) |
|
| 🇧🇷 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) |
|
| 🇹🇷 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>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="rozwiązywanie-problemów"></a>
|
||||||
## 🛠️ Rozwiązywanie problemów
|
## 🛠️ Rozwiązywanie problemów
|
||||||
|
|
||||||
<details>
|
<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.
|
- **Tabela formatów nie pojawia się:** Zaktualizuj yt-dlp do najnowszej wersji i spróbuj przełączyć się na kanał yt-dlp Nightly.
|
||||||
- **Pobieranie nie powiodło się:** Sprawdź swoje połączenie internetowe i upewnij się, że plik wideo jest dostępny.
|
- **Pobieranie nie powiodło się:** Sprawdź połączenie z internetem i upewnij się, że wideo jest dostępne.
|
||||||
- **Specyficzne błędy pobierania:**
|
- **Konkretne błędy pobierania:**
|
||||||
- **Prywatne filmy:** Użyj uwierzytelniania plików cookie, aby uzyskać dostęp do prywatnych treści.
|
- **Prywatne wideo:** Użyj uwierzytelniania przez ciasteczka, 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.
|
- **Treści z ograniczeniem wiekowym:** Zaloguj się na swoje konto YouTube, aby wyświetlić filmy z ograniczeniem wiekowym.
|
||||||
- **Filmy z blokadą geograficzną:** rozważ użycie VPN w celu ominięcia ograniczeń regionalnych.
|
- **Wideo z blokadą regionalną:** Rozważ użycie VPN, aby obejść ograniczenia regionalne.
|
||||||
- **Usunięte/usunięte filmy:** Film nie jest już dostępny w serwisie YouTube.
|
- **Usunięte wideo:** Film nie jest już dostępny na YouTube.
|
||||||
- **Transmisje na żywo:** Transmisji na żywo nie można pobrać; poczekaj, aż strumień się zakończy.
|
- **Transmisje na żywo:** Transmisji na żywo nie można pobierać w trakcie ich trwania; poczekaj, aż transmisja się zakończy.
|
||||||
- **Błędy sieciowe:** Sprawdź swoje połączenie internetowe i spróbuj ponownie.
|
- **Błędy sieciowe:** Sprawdź połączenie z internetem i spróbuj ponownie.
|
||||||
- **Nieprawidłowe adresy URL:** Upewnij się, że adres URL jest poprawny i pochodzi z obsługiwanej platformy.
|
- **Nieprawidłowy URL:** Upewnij się, że adres URL jest poprawny i pochodzi z obsługiwanej platformy.
|
||||||
– **Treści premium:** wymaga członkostwa YouTube Premium.
|
- **Treść Premium:** Wymaga subskrypcji YouTube Premium.
|
||||||
- **Bloki dotyczące praw autorskich:** Treść jest blokowana ze względu na ograniczenia praw autorskich.
|
- **Blokada praw autorskich:** Treść jest zablokowana z powodu ograniczeń 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.
|
- **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 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.
|
- **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:**
|
**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:**
|
**Bezpieczne alternatywy:**
|
||||||
- ✅ **Użyj instalacji pip:** `pip install ytsage` (zalecane)
|
- ✅ **Użyj instalacji przez pip:** `pip install ytsage` (zalecane)
|
||||||
- ✅ **Kompiluj ze źródła**: postępując zgodnie z tym [guide](../.github/CI_CD_README.md)
|
- ✅ **Zbuduj ze źródeł**: Postępując zgodnie z tym [przewodnikiem](.github/CI_CD_README.md)
|
||||||
- ✅ **Dodaj aplikację do białej listy** w swoim oprogramowaniu antywirusowym
|
- ✅ **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.
|
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).
|
1. **Otwórz Terminal** (możesz go znaleźć przez Spotlight).
|
||||||
2. **Wpisz następujące polecenie**, ale **nie** jeszcze naciskaj Enter. Pamiętaj o dodaniu spacji na końcu:
|
2. **Wpisz następującą komendę**, ale jeszcze **NIE** naciskaj Enter. Pamiętaj o spacjach na końcu:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
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ć polecenie.
|
4. **Naciśnij Enter**, aby uruchomić komendę.
|
||||||
5. **Spróbuj ponownie otworzyć YTSage.app.** Powinna teraz uruchomić się poprawnie.
|
5. **Spróbuj ponownie otworzyć YTSage.app.** Powinien uruchomić się poprawnie.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **Lokacje konfiguracji (zaawansowane)**
|
#### **Lokalizacja konfiguracji (zaawansowane)**
|
||||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/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>
|
<a id="sponsor"></a>
|
||||||
## 💖 Sponsor
|
## 💖 Sponsor
|
||||||
|
|
||||||
Jeśli YTSage pozwoli Ci zaoszczędzić czas, rozważ sponsorowanie projektu. Sponsoring pomaga pokryć czas opracowywania, testowania na różnych platformach i przyszłych ulepszeń.
|
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
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- Link sponsora jest również dostępny bezpośrednio w aplikacji, w oknie dialogowym Informacje.
|
- Link do wsparcia jest dostępny bezpośrednio przez okno "O programie" w aplikacji.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="współpraca"></a>
|
||||||
## 👥 Wkład
|
## 👥 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
|
1. 🍴 Skonfiguruj fork repozytorium
|
||||||
2. 🌿 Utwórz gałąź funkcji:
|
2. 🌿 Utwórz gałąź (branch) dla swojej funkcji:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/NiesamowitaFunkcja
|
||||||
```
|
```
|
||||||
3. 💾 Zatwierdź zmiany:
|
3. 💾 Zatwierdź zmiany (commit):
|
||||||
```bash
|
```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
|
```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`)
|
- Zaktualizuj odpowiedni lokalny plik README (np. `readme-translations/README.pl.md`)
|
||||||
- Synchronizuj ciągi aplikacji, edytując `ytsage/languages/<code>.json`
|
- Dbaj o synchronizację komunikatów aplikacji, edytując `ytsage/languages/<code>.json`
|
||||||
- Jeśli brakuje Twojego języka, zacznij od `README.md` i utwórz `README.<code>.md`
|
- Jeśli brakuje Twojego języka, zacznij od `README.md` i stwórz `README.<code>.md`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 Struktura projektu</summary>
|
<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
|
### 📁 Struktura projektu
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # Konfiguracja GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Szablony zgłoszeń
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Szablon zgłoszenia błędu
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # Procesy GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Proces budowania dla Linux
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # Proces budowania dla macOS
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Proces budowania dla Windows
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Proces głównego wydania
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # Dokumentacja CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Materiały graficzne (zrzuty ekranu, SVG)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Ikony aplikacji
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Zrzuty ekranu do dokumentacji
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # Zasoby SVG
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # Plik licencji
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Metadane projektu i zależności
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Dokumentacja projektu
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Zależności Python (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Pakiet kodu źródłowego
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Zasoby czasu wykonywania
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Ikony aplikacji
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Pliki dźwiękowe
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Pliki lokalizacji
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Tłumaczenie arabskie
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Tłumaczenie niemieckie
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Tłumaczenie angielskie
|
||||||
│ └── ... # Other languages
|
│ └── ... # Inne języki
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Główna logika biznesowa
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Integracja Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Funkcjonalność pobierania
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # Integracja FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Funkcje pomocnicze
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # Integrasi yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Komponenty interfejsu użytkownika
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Główne okno aplikacji
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Klasy okien dialogowych
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Moduły pomocnicze
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Zarządzanie konfiguracją
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Narzędzia logowania
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Punkt wejścia pakietu
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Główny skrypt wykonawczy
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Historia gwiazd
|
## ⭐️ Historia gwiazdek
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Historia gwiazd
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -539,9 +544,9 @@ YTSage/
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## 📜Licencja
|
## 📜 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
|
## 🙏 Podziękowania
|
||||||
|
|
||||||
@@ -550,54 +555,55 @@ Ten projekt jest objęty licencją MIT — szczegółowe informacje można znale
|
|||||||
|
|
||||||
<div align="center">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Główne komponenty</th></tr>
|
<tr class="section"><th colspan="2">Główne komponenty</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>Przetwarzanie multimediów</td>
|
<td>Przetwarzanie mediów</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Biblioteki i struktury</th></tr>
|
<tr class="section"><th colspan="2">Biblioteki i frameworki</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>Struktura GUI</td>
|
<td>Framework GUI</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">Poduszka</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>Przetwarzanie obrazu</td>
|
<td>Przetwarzanie obrazów</td>
|
||||||
</tr>
|
</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>
|
<td>Żądania HTTP</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">opakowanie</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Obsługa wersji i pakietów</td>
|
<td>Zarządzanie wersjami i pakowanie</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Renderowanie Markdown</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Logowanie</td>
|
<td>Logowanie</td>
|
||||||
</tr>
|
</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>
|
<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>
|
<td>Dźwięk powiadomienia</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>Współtwórca kodu</td>
|
<td>Współpracownik kodu</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -607,12 +613,12 @@ Ten projekt jest objęty licencją MIT — szczegółowe informacje można znale
|
|||||||
|
|
||||||
## ⚠️ Zastrzeżenie
|
## ⚠️ 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">
|
<div align="center">
|
||||||
|
|
||||||
Wykonane z ❤️ przez [oop7](https://github.com/oop7)
|
Stworzone z ❤️ przez [oop7](https://github.com/oop7)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+262
-256
@@ -12,81 +12,82 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Um downloader moderno do YouTube com uma interface PySide6 limpa.**
|
**Um downloader de YouTube moderno com uma interface PySide6 limpa.**
|
||||||
Baixe vídeos em qualquer qualidade, extraia áudio, busque legendas e muito mais.
|
Baixe vídeos em qualquer qualidade, extraia áudio, obtenha legendas e muito mais.
|
||||||
|
|
||||||
### 🌍 LEIA-ME Idiomas
|
### 🌍 Idiomas do README
|
||||||
|
|
||||||
Inglês: [EN](../README.md)
|
Inglês: [EN](../README.md)
|
||||||
| Nome: [AR](README.ar.md)
|
| Árabe: [AR](README.ar.md)
|
||||||
| Alemão: [DE](README.de.md)
|
| Alemão: [DE](README.de.md)
|
||||||
| Espanhol: [ES](README.es.md)
|
| Espanhol: [ES](README.es.md)
|
||||||
| Francês: [FR](README.fr.md)
|
| Francês: [FR](README.fr.md)
|
||||||
| Nome: [HI](README.hi.md)
|
| Hindi: [HI](README.hi.md)
|
||||||
| Bahasa Indonésia: [ID](README.id.md)
|
| Indonésio: [ID](README.id.md)
|
||||||
| Italiano: [IT](README.it.md)
|
| Italiano: [IT](README.it.md)
|
||||||
| Nome do usuário: [JA](README.ja.md)
|
| Japonês: [JA](README.ja.md)
|
||||||
| Polaco: [PL](README.pl.md)
|
| Polonês: [PL](README.pl.md)
|
||||||
| Português: [PT](README.pt.md)
|
| Português: [PT](README.pt.md)
|
||||||
| Russo: [RU](README.ru.md)
|
| Russo: [RU](README.ru.md)
|
||||||
| Turco: [TR](README.tr.md)
|
| Turco: [TR](README.tr.md)
|
||||||
| 中文: [ZH](README.zh.md)
|
| Chinês: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Instalação</a> •
|
<a href="#instalação">Instalação</a> •
|
||||||
<a href="#features">Recursos</a> •
|
<a href="#funcionalidades">Funcionalidades</a> •
|
||||||
<a href="#usage">Uso</a> •
|
<a href="#uso">Uso</a> •
|
||||||
<a href="#screenshots">Capturas de tela</a> •
|
<a href="#capturas-de-tela">Capturas de Tela</a> •
|
||||||
<a href="#troubleshooting">Solução de problemas</a> •
|
<a href="#solução-de-problemas">Solução de Problemas</a> •
|
||||||
<a href="#sponsor">Patrocinador</a> •
|
<a href="#patrocinar">Patrocinar</a> •
|
||||||
<a href="#contributing">Contribuindo</a>
|
<a href="#contribuindo">Contribuindo</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="por-que-ytsage"></a>
|
||||||
## ❓ Por que YTSage?
|
## ❓ 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
|
- Uma interface PySide6 moderna e limpa
|
||||||
- Downloads com um clique para vídeo, áudio e legendas
|
- Download de vídeo, áudio e legendas com um clique
|
||||||
- Recursos avançados como SponsorBlock, mesclagem de legendas e seleção de playlist
|
- 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
|
- Modo Genérico opcional para sites além do YouTube suportados pelo yt-dlp
|
||||||
- Suporte multiplataforma e fácil instalação
|
- Suporte multiplataforma e instalação fácil
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="funcionalidades"></a>
|
||||||
## ✨ Recursos
|
## ✨ Funcionalidades
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Recursos principais | Recursos Avançados | Recursos extras |
|
| Recursos Básicos | Recursos Avançados | Recursos Extras |
|
||||||
|-----------------------------------|---------------------------------------------------|-----------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Tabela de Formatos | 🚫 Integração SponsorBlock | 🎞️ Tela FPS/HDR |
|
| 🎥 Tabela de Formatos | 🚫 Integração SponsorBlock | 🎞️ Exibição de FPS/HDR |
|
||||||
| 🎵 Extração de Áudio | 📝 Seleção e mesclagem de múltiplas legendas | 🔄 Atualização automática do yt-dlp |
|
| 🎵 Extração de Áudio | 📝 Seleção e Mesclagem de Legendas | 🔄 Atualização Automática do yt-dlp |
|
||||||
| ✨ UI simples | 💾 Salvar descrição e miniatura | 🛠️ Detecção de FFmpeg/yt-dlp/Deno |
|
| ✨ Interface de Usuário 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 |
|
| 📋 Suporte e Seletor de Playlist | 🚀 Limitador de Velocidade | ⚙️ Comandos Personalizados |
|
||||||
| 📑 Incorporar capítulos | ✂️ Cortar seções de vídeo | 🍪 Login com Cookies |
|
| 📑 Integração de Capítulos | ✂️ Cortar Seções de Vídeo | 🍪 Login por Cookies |
|
||||||
| 📜 Histórico de downloads | 🔄 Seleção de canal de lançamento | 🌐 Suporte a proxy |
|
| 📜 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 | 🆙 Guia Atualizador integrado |
|
| 🎚️ 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 |
|
| 🌍 Modo Genérico | 🔊 Normalização de Áudio (EBU R128) | 🌍 Localização em 14 idiomas |
|
||||||
|
| 💾 Exportação de Playlist | ⚙️ Qualidade e Legendas Padrão | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="instalação"></a>
|
||||||
## 🚀 Instalação
|
## 🚀 Instalação
|
||||||
|
|
||||||
### ⚡ Instalação rápida (recomendado)
|
### ⚡ Instalação Rápida (Recomendada)
|
||||||
|
|
||||||
Instale YTSage do PyPI:
|
Instale o YTSage via PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Atualizar uma instalação existente</summary>
|
<summary>🔄 Atualizar Instalação Existente</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,49 +95,49 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Em seguida, inicie o aplicativo:
|
Em seguida, execute o aplicativo:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
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 |
|
| Formato | Descrição |
|
||||||
|--------|------------|
|
|--------|-------------|
|
||||||
|  | Instalador padrão |
|
|  | Instalador Padrão |
|
||||||
|  | Com FFmpeg incluído |
|
|  | Com FFmpeg incluído |
|
||||||
|  | Versão portátil, sem necessidade de instalação |
|
|  | Versão Portátil, sem necessidade de instalação |
|
||||||
|  | Portátil com FFmpeg, compactado |
|
|  | Portátil com FFmpeg, compactado (ZIP) |
|
||||||
|
|
||||||
<details>
|
<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.
|
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`.
|
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.
|
3. **FFmpeg Integrado**: Se você não possui o FFmpeg instalado no sistema, escolha as versões com FFmpeg integrado.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Formato | Descrição |
|
| Formato | Descrição |
|
||||||
|--------|------------|
|
|--------|-------------|
|
||||||
|  | Pacote Debian |
|
|  | Pacote Debian |
|
||||||
|  | AppImage, portátil |
|
|  | AppImage, Portátil |
|
||||||
|  | Pacote RPM |
|
|  | Pacote RPM |
|
||||||
|  | Pacote Flatpak |
|
|  | Pacote Flatpak |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Etapas de instalação</summary>
|
<summary>🛠️ Passos para Instalação</summary>
|
||||||
|
|
||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
@@ -156,34 +157,34 @@ ytsage
|
|||||||
#### 🍎 macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
| Formato | Descrição |
|
| Formato | Descrição |
|
||||||
|--------|------------|
|
|--------|-------------|
|
||||||
|  | Aplicativo compactado para Apple Silicon |
|
|  | Aplicativo ZIP para Apple Silicon |
|
||||||
|  | Instalador de imagem de disco para Apple Silicon |
|
|  | Instalador Disk Image para Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<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.
|
- **Instalador DMG (`.dmg`)**: Clique duas vezes para montar e arraste `YTSage.app` para a sua pasta Aplicativos.
|
||||||
- **Arquivo de aplicativos (`.zip`)**: Extraia o zip e mova `YTSage.app` para a 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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<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
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
cd YTSage
|
cd YTSage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Instalar dependências
|
### 2. Instalar Dependências
|
||||||
|
|
||||||
#### ⚡ Com UV
|
#### ⚡ Com uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
@@ -195,7 +196,7 @@ uv pip install .
|
|||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Execute o aplicativo
|
### 3. Executar o Aplicativo
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -203,147 +204,151 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="capturas-de-tela"></a>
|
||||||
## 📸 Capturas de tela
|
## 📸 Capturas de Tela
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Download de Playlist" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Configurações de download</em></td>
|
<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>Download de Playlist</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="Seleção de Formato de Áudio" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Opções Personalizadas" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Formato de áudio</em></td>
|
<td align="center"><em>Formato de Áudio</em></td>
|
||||||
<td align="center"><em>Opções personalizadas</em></td>
|
<td align="center"><em>Opções Personalizadas</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="uso"></a>
|
||||||
## 📖 Uso
|
## 📖 Uso
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Uso Básico</summary>
|
<summary>🎯 Uso Básico</summary>
|
||||||
|
|
||||||
1. **Inicie o YTSage**
|
1. **Inicie o YTSage**
|
||||||
2. **Colar URL do YouTube** (ou usar o botão "Colar URL")
|
2. **Cole uma URL do YouTube** (ou use o botão "Paste URL")
|
||||||
3. **Clique em "Analisar"**
|
3. **Clique em "Analyze"**
|
||||||
4. **Selecione Formato:**
|
4. **Escolha o Formato:**
|
||||||
- `Video` para downloads de vídeos
|
- `Video` para download de vídeo
|
||||||
- `Audio Only` para extração de áudio
|
- `Audio Only` para extração de áudio
|
||||||
5. **Escolha Opções:**
|
5. **Selecione Opções:**
|
||||||
- Ative legendas e selecione o idioma
|
- Habilite legendas e escolha o idioma
|
||||||
- Ativar mesclagem de legendas
|
- Habilite a mesclagem de legendas
|
||||||
- Salvar miniatura
|
- Salvar miniatura
|
||||||
- Remover segmentos de patrocinadores
|
- Remover seções de patrocinadores
|
||||||
- Salvar descrição
|
- Salvar descrição
|
||||||
- Incorporar capítulos
|
- Incorporar capítulos
|
||||||
6. **Selecione Diretório de Saída**
|
6. **Escolha o Diretório de Saída**
|
||||||
7. **Clique em "Baixar"**
|
7. **Clique em "Download"**
|
||||||
|
|
||||||
> 💡 O diretório de download padrão é a pasta "Downloads" do usuário.
|
> 💡 O diretório de download padrão é a pasta "Downloads" do usuário.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 Baixar lista de reprodução</summary>
|
<summary>📋 Download de Playlist</summary>
|
||||||
|
|
||||||
1. **Colar URL da lista de reprodução**
|
1. **Cole a URL da Playlist**
|
||||||
2. **Clique em "Analisar"**
|
2. **Clique em "Analyze"**
|
||||||
3. **Selecione vídeos no seletor de playlist (opcional, o padrão é todos)**
|
3. **Selecione vídeos do seletor (opcional, padrão todos)**
|
||||||
4. **Escolha o formato/qualidade desejado**
|
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>
|
||||||
|
|
||||||
<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:
|
Como usar:
|
||||||
|
|
||||||
1. Abra `Download Settings`.
|
1. Abra `Download Settings`.
|
||||||
2. Ative `Generic Mode`.
|
2. Habilite `Generic Mode`.
|
||||||
3. Cole um URL de vídeo ou lista de reprodução compatível que não seja do YouTube.
|
3. Cole uma URL de vídeo ou playlist suportada que não seja do YouTube.
|
||||||
4. Clique em `Analyze`.
|
4. Clique em `Analyze`.
|
||||||
5. Escolha um formato e baixe normalmente.
|
5. Escolha um formato e baixe normalmente.
|
||||||
|
|
||||||
Notas:
|
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.
|
- 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, uma sessão de login, um proxy ou argumentos yt-dlp extras, dependendo do extrator.
|
- Alguns sites exigem cookies, login, proxy ou argumentos adicionais do yt-dlp, dependendo do extrator.
|
||||||
- Se um site falhar, atualize o yt-dlp primeiro na guia do atualizador integrado antes de relatar o problema.
|
- Se um site falhar, atualize o yt-dlp na aba de atualização integrada antes de relatar o problema.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **Opções de Legendas:** Filtre idiomas e incorpore legendas no arquivo de vídeo.
|
||||||
- **Mesclagem de legendas:** Mesclar legendas no arquivo de vídeo para legendas codificadas
|
- **Mesclagem de Legendas:** Mescla legendas no arquivo de vídeo para legendas fixas (hardcoded).
|
||||||
- **Salvar descrição:** Salve a descrição do vídeo como um arquivo de texto
|
- **Salvar Descrição:** Salva a descrição do vídeo como um arquivo de texto.
|
||||||
- **Salvar miniatura:** Salve a miniatura do vídeo como um arquivo de imagem
|
- **Salvar Miniatura:** Salva 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
|
- **Incorporar Capítulos:** Inclui 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
|
- **Remover Seções de Patrocinadores:** Usa o SponsorBlock para remover segmentos patrocinados do vídeo.
|
||||||
- **Cortar vídeo:** baixe apenas partes específicas de um vídeo especificando intervalos de tempo no formato `HH:MM:SS`
|
- **Cortar Vídeo:** Baixe apenas partes específicas do vídeo, especificando o intervalo de tempo no formato `HH:MM:SS`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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
|
- **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**.
|
- **Salvar Caminho de Download:** Salva o caminho de download padrão para downloads futuros. Disponível em **Download Settings → Download Path**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **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**.
|
- **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**.
|
||||||
- **Normalização de áudio:** Padronize o volume para downloads somente de áudio usando EBU R128.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Acesso e Rede</summary>
|
<summary>🌐 Acesso e Rede</summary>
|
||||||
|
|
||||||
- **Login com Cookies:** Faça login no YouTube usando cookies para acessar conteúdo privado.
|
- **Login por Cookies:** Faça login no YouTube usando cookies para acessar conteúdo privado.
|
||||||
Como usar:
|
Uso:
|
||||||
1. **Recomendado:** Use a opção `Extract cookies from browser` integrada no aplicativo e selecione seu navegador e, opcionalmente, um perfil.
|
1. **Recomendado:** Use a opção integrada `Extract cookies from browser` no aplicativo, selecione o navegador e, opcionalmente, o perfil.
|
||||||
2. Como alternativa, extraia os cookies manualmente:
|
2. Opcionalmente, extraia 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)
|
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
|
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
|
d. Selecione o arquivo `cookies.txt` no aplicativo
|
||||||
- **Suporte a proxy:** Use um servidor proxy para downloads, por exemplo `http://<proxy-server>:<port>`
|
- **Suporte a Proxy:** Use um servidor proxy para downloads, ex: `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**.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Ferramentas e Manutenção</summary>
|
<summary>🛠️ Ferramentas e Manutenção</summary>
|
||||||
|
|
||||||
- **Comandos personalizados:** Acesse recursos avançados do yt-dlp por meio de argumentos de linha de comando
|
- **Comandos Personalizados:** Acesse recursos avançados do yt-dlp via argumentos de linha de comando.
|
||||||
- **Guia Atualizador:** Gerencie ferramentas de atualização integradas em um só lugar nas Opções Personalizadas:
|
- **Aba de Atualização:** Gerencie as 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
|
- **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 os guias de instalação
|
- **Verificador de Versão do FFmpeg:** Verifique sua versão do FFmpeg e abra guias de instalação.
|
||||||
- **Atualizações do Deno:** Verifique e atualize o tempo de execução do Deno
|
- **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 na caixa de diálogo Sobre.
|
- **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 **Histórico**.
|
- **Histórico de Downloads:** Veja downloads anteriores com miniaturas e status no botão **History**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Localização</summary>
|
<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
|
### Idiomas Suportados
|
||||||
|
|
||||||
@@ -357,11 +362,11 @@ YTSage oferece suporte a **14 idiomas** para acessibilidade mundial. Selecione s
|
|||||||
| 🇧🇷 Português | `pt` | 🇷🇺 Russo | `ru` |
|
| 🇧🇷 Português | `pt` | 🇷🇺 Russo | `ru` |
|
||||||
| 🇹🇷 Turco | `tr` | 🇨🇳 Chinês | `zh` |
|
| 🇹🇷 Turco | `tr` | 🇨🇳 Chinês | `zh` |
|
||||||
|
|
||||||
### LEIA-ME Traduções
|
### Traduções do README
|
||||||
|
|
||||||
| Idioma | Arquivo | Idioma | Arquivo |
|
| 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) |
|
| 🇸🇦 Á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) |
|
| 🇩🇪 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) |
|
| 🇮🇩 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) |
|
| 🇧🇷 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) |
|
| 🇹🇷 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>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="solução-de-problemas"></a>
|
||||||
## 🛠️ Solução de problemas
|
## 🛠️ Solução de Problemas
|
||||||
|
|
||||||
<details>
|
<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.
|
- **Tabela de formatos não aparece:** Atualize o yt-dlp para a versão mais recente e tente alternar para o yt-dlp Nightly.
|
||||||
- **Falha no download:** Verifique sua conexão com a Internet e certifique-se de que o vídeo esteja disponível.
|
- **Download falhou:** Verifique sua conexão com a internet e certifique-se de que o vídeo está disponível.
|
||||||
- **Erros específicos de download:**
|
- **Erros de Download Específicos:**
|
||||||
- **Vídeos privados:** Use autenticação de cookies para acessar conteúdo privado.
|
- **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 conta do YouTube para visualizar vídeos com restrição de idade.
|
- **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 bloqueados geograficamente:** considere usar uma VPN para contornar restrições regionais.
|
- **Vídeos com Bloqueio Geográfico:** 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.
|
- **Vídeo Removido:** 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.
|
- **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.
|
- **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.
|
- **URL Inválida:** Certifique-se de que a URL está correta e pertence a uma plataforma suportada.
|
||||||
- **Conteúdo Premium:** Requer assinatura do YouTube Premium.
|
- **Conteúdo Premium:** Requer uma assinatura do YouTube Premium.
|
||||||
- **Bloqueios de direitos autorais:** O conteúdo está bloqueado devido a restrições de direitos autorais.
|
- **Bloqueio por 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.
|
- **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 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.
|
- **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 já vem com o FFmpeg.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 🛡️ Aviso do Windows Defender / Antivírus
|
#### 🛡️ 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:**
|
**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:**
|
**Opções Seguras:**
|
||||||
- ✅ **Use instalação pip:** `pip install ytsage` (recomendado)
|
- ✅ **Use a instalação via pip:** `pip install ytsage` (recomendado)
|
||||||
- ✅ **Construir a partir da fonte**: seguindo isto [guide](../.github/CI_CD_README.md)
|
- ✅ **Compile a partir do código-fonte**: Seguindo este [guia](.github/CI_CD_README.md)
|
||||||
- ✅ **Coloque o aplicativo na lista de permissões** em seu software antivírus
|
- ✅ **Adicione o aplicativo à lista de permissões** do seu software antivírus.
|
||||||
|
|
||||||
#### 🍎 macOS: "O aplicativo está danificado e não pode ser aberto"
|
#### 🍎 macOS: "App 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.
|
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).
|
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
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
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)**
|
#### **Localização da Configuração (Avançado)**
|
||||||
- **Janelas:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<a id="patrocinar"></a>
|
||||||
## 💖 Patrocinador
|
## 💖 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
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- O link do patrocinador também está disponível diretamente no aplicativo, na caixa de diálogo Sobre.
|
- O link de patrocínio está disponível diretamente através do diálogo Sobre no aplicativo.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="contribuindo"></a>
|
||||||
## 👥 Contribuindo
|
## 👥 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
|
1. 🍴 Faça um Fork do repositório
|
||||||
2. 🌿 Crie seu branch de recursos:
|
2. 🌿 Crie sua branch de recurso:
|
||||||
```bash
|
```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
|
```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
|
```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`)
|
- Atualize o arquivo README localizado relevante (ex: `readme-translations/README.pt.md`)
|
||||||
- Mantenha as strings do aplicativo sincronizadas editando `ytsage/languages/<code>.json`
|
- Mantenha as strings do aplicativo em sincronia editando `ytsage/languages/<code>.json`
|
||||||
- Se o seu idioma estiver faltando, comece em `README.md` e crie `README.<code>.md`
|
- Se o seu idioma estiver ausente, comece pelo `README.md` e crie `README.<code>.md`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 Estrutura do Projeto</summary>
|
<summary>📂 Estrutura do Projeto</summary>
|
||||||
@@ -476,58 +481,58 @@ Este documento descreve a estrutura de pastas organizada do YTSage.
|
|||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # Configurações do GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Modelos de problemas
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Modelo de relatório de erro
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # Fluxos de trabalho do GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Fluxo de build para Linux
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # Fluxo de build para macOS
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Fluxo de build para Windows
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Fluxo de lançamento principal
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # Documentação CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Ativos de marca (capturas de tela, SVGs)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Ícones do aplicativo
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Capturas de tela para documentação
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # Ativos SVG
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # Arquivo de licença
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Metadados do projeto e dependências
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Documentação do projeto
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Dependências Python (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Pacote de código-fonte
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Ativos de tempo de execução
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Ícones do aplicativo
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Arquivos de áudio
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Arquivos de localização
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Tradução em árabe
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Tradução em alemão
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Tradução em inglês
|
||||||
│ └── ... # Other languages
|
│ └── ... # Outros idiomas
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Lógica de negócios principal
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Integração Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Funcionalidade de download
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # Integração FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Funções utilitárias
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # Integração yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Componentes de interface do usuário
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Janela principal do aplicativo
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Classes de diálogo
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Módulos utilitários
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Gerenciamento de configuração
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Ferramentas de registro
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Ponto de entrada do pacote
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Script de execução principal
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ História da estrela
|
## ⭐️ Histórico de Estrelas
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## História da estrela
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -541,63 +546,64 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Licença
|
## 📜 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
|
## 🙏 Agradecimentos
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Mostrar agradecimentos</summary>
|
<summary>Mostrar Agradecimentos</summary>
|
||||||
|
|
||||||
<div align="center">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Componentes principais</th></tr>
|
<tr class="section"><th colspan="2">Componentes Principais</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>Processamento de mídia</td>
|
<td>Processamento de Mídia</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Bibliotecas e Estruturas</th></tr>
|
<tr class="section"><th colspan="2">Bibliotecas e Frameworks</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>Estrutura GUI</td>
|
<td>Framework GUI</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">Travesseiro</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>Processamento de imagem</td>
|
<td>Processamento de Imagens</td>
|
||||||
</tr>
|
|
||||||
<tr><td><a href="https://requests.readthedocs.io/">solicitações</a></td>
|
|
||||||
<td>Solicitações HTTP</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">embalagem</a></td>
|
<td><a href="https://requests.readthedocs.io/">requests</a></td>
|
||||||
<td>Manuseio de versões e pacotes</td>
|
<td>Requisições HTTP</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">remarcação</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Renderização de redução</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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Registro</td>
|
<td>Registro de Logs</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Ativos e Contribuintes</th></tr>
|
<tr class="section"><th colspan="2">Ativos e Contribuidores</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://pixabay.com/sound-effects/new-notification-09-352705/">Nova Notificação 09 por Universfield</a></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>
|
<td>Som de Notificação</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>Colaborador de código</td>
|
<td>Contribuidor de Código</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -605,14 +611,14 @@ Este projeto está licenciado sob a licença MIT - consulte o arquivo [LICENSE](
|
|||||||
|
|
||||||
</details>
|
</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">
|
<div align="center">
|
||||||
|
|
||||||
Feito com ❤️ por [oop7](https://github.com/oop7)
|
Criado com ❤️ por [oop7](https://github.com/oop7)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+267
-272
@@ -1,7 +1,7 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
<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"/>
|
||||||
|
|
||||||
[](https://www.python.org/downloads/)
|
[](https://www.python.org/downloads/)
|
||||||
[](https://pepy.tech/project/ytsage)
|
[](https://pepy.tech/project/ytsage)
|
||||||
@@ -12,81 +12,82 @@
|
|||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Современный загрузчик YouTube с чистым интерфейсом PySide6.**
|
**Современный загрузчик с YouTube с чистым интерфейсом на PySide6.**
|
||||||
Скачивайте видео в любом качестве, извлекайте аудио, получайте субтитры и многое другое.
|
Загружайте видео в любом качестве, извлекайте аудио, получайте субтитры и многое другое.
|
||||||
|
|
||||||
### 🌍 README Языки
|
### 🌍 Языки README
|
||||||
|
|
||||||
Английский: [EN](../README.md)
|
Английский: [EN](../README.md)
|
||||||
| Сообщение: [AR](README.ar.md)
|
| Арабский: [AR](README.ar.md)
|
||||||
| Немецкий: [DE](README.de.md)
|
| Немецкий: [DE](README.de.md)
|
||||||
| Испанский: [ES](README.es.md)
|
| Испанский: [ES](README.es.md)
|
||||||
| Французский: [FR](README.fr.md)
|
| Французский: [FR](README.fr.md)
|
||||||
| Ответ: [HI](README.hi.md)
|
| Хинди: [HI](README.hi.md)
|
||||||
| Бахаса Индонезия: [ID](README.id.md)
|
| Индонезийский: [ID](README.id.md)
|
||||||
| Итальянский: [IT](README.it.md)
|
| Итальянский: [IT](README.it.md)
|
||||||
| 日本語: [JA](README.ja.md)
|
| Японский: [JA](README.ja.md)
|
||||||
| Польски: [PL](README.pl.md)
|
| Польский: [PL](README.pl.md)
|
||||||
| Португальский: [PT](README.pt.md)
|
| Португальский: [PT](README.pt.md)
|
||||||
| Русский: [RU](README.ru.md)
|
| Русский: [RU](README.ru.md)
|
||||||
| Тюркче: [TR](README.tr.md)
|
| Турецкий: [TR](README.tr.md)
|
||||||
| 中文: [ZH](README.zh.md)
|
| Китайский: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Установка</a> •
|
<a href="#установка">Установка</a> •
|
||||||
<a href="#features">Функции</a> •
|
<a href="#функции">Функции</a> •
|
||||||
<a href="#usage">Использование</a> •
|
<a href="#использование">Использование</a> •
|
||||||
<a href="#screenshots">Скриншоты</a> •
|
<a href="#скриншоты">Скриншоты</a> •
|
||||||
<a href="#troubleshooting">Устранение неполадок</a> •
|
<a href="#решение-проблем">Решение проблем</a> •
|
||||||
<a href="#sponsor">Спонсор</a> •
|
<a href="#спонсорство">Спонсорство</a> •
|
||||||
<a href="#contributing">Содействие</a>
|
<a href="#участие-в-проекте">Участие в проекте</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="почему-ytsage"></a>
|
||||||
## ❓ Почему YTSage?
|
## ❓ Почему YTSage?
|
||||||
|
|
||||||
YTSage предназначен для пользователей, которым нужен **простой, но мощный загрузчик YouTube**. В отличие от других инструментов, он предлагает:
|
YTSage создан для пользователей, которым нужен **простой, но мощный загрузчик с YouTube**. В отличие от других инструментов, он предлагает:
|
||||||
|
|
||||||
- Чистый, современный интерфейс PySide6.
|
- Современный и чистый интерфейс PySide6
|
||||||
- Загрузка видео, аудио и субтитров в один клик.
|
- Загрузку видео, аудио и субтитров одним щелчком мыши
|
||||||
- Расширенные функции, такие как SponsorBlock, объединение субтитров и выбор списка воспроизведения.
|
- Дополнительные функции, такие как SponsorBlock, объединение субтитров и выбор плейлиста
|
||||||
– Дополнительный общий режим для сайтов, поддерживаемых yt-dlp, за пределами YouTube.
|
- Опциональный "Общий режим" (Generic Mode) для сайтов помимо YouTube, поддерживаемых yt-dlp
|
||||||
- Кроссплатформенная поддержка и простота установки.
|
- Кроссплатформенную поддержку и простую установку
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="функции"></a>
|
||||||
## ✨ Особенности
|
## ✨ Функции
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Основные возможности | Расширенные возможности | Дополнительные возможности |
|
| Основные функции | Продвинутые функции | Дополнительные возможности |
|
||||||
|-----------------------------------|-----------------------------------------|------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Формат таблицы | 🚫 Интеграция SponsorBlock | 🎞️ Отображение FPS/HDR |
|
| 🎥 Таблица форматов | 🚫 Интеграция SponsorBlock | 🎞️ Отображение FPS/HDR |
|
||||||
| 🎵 Извлечение аудио | 📝 Выбор и объединение нескольких субтитров | 🔄 Автоматическое обновление yt-dlp |
|
| 🎵 Извлечение аудио | 📝 Выбор и объединение субтитров | 🔄 Автообновление yt-dlp |
|
||||||
| ✨ Простой интерфейс | 💾 Сохранить описание и миниатюру | 🛠️ Обнаружение FFmpeg/yt-dlp/Deno |
|
| ✨ Простой пользовательский интерфейс | 💾 Сохранение описания и обложки | 🛠️ Обнаружение FFmpeg/yt-dlp/Deno |
|
||||||
| 📋 Поддержка и выбор плейлистов | 🚀 Ограничитель скорости | ⚙️ Пользовательские команды |
|
| 📋 Поддержка и выбор плейлиста | 🚀 Ограничение скорости | ⚙️ Пользовательские команды |
|
||||||
| 📑 Встроить главы | ✂️ Обрезать разделы видео | 🍪 Вход с помощью файлов cookie |
|
| 📑 Интеграция разделов | ✂️ Обрезка видео | 🍪 Вход через Cookies |
|
||||||
| 📜 История загрузок | 🔄 Выбор канала выпуска | 🌐 Поддержка прокси |
|
| 📜 История загрузок | 🔄 Выбор канала выпуска | 🌐 Поддержка прокси |
|
||||||
| 🎚️ Преобразование аудиоформатов | 🎬 Настройки формата видео | 🆙 Встроенная вкладка «Обновление» |
|
| 🎚️ Конвертация аудиоформатов | 🎬 Настройки видеоформата | 🆙 Встроенная вкладка обновления |
|
||||||
| 🌍 Общий режим | 🔊 Нормализация звука (EBU R128) | 🌍 Локализация на 14 языках |
|
| 🌍 Общий режим | 🔊 Нормализация звука (EBU R128) | 🌍 Локализация на 14 языков |
|
||||||
|
| 💾 Экспорт плейлиста | ⚙️ Качество и субтитры по умолчанию | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="установка"></a>
|
||||||
## 🚀 Установка
|
## 🚀 Установка
|
||||||
|
|
||||||
### ⚡ Быстрая установка (рекомендуется)
|
### ⚡ Быстрая установка (Рекомендуется)
|
||||||
|
|
||||||
Установите YTSage из PyPI:
|
Установите YTSage через PyPI:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Обновите существующую установку</summary>
|
<summary>🔄 Обновить существующую установку</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -100,45 +101,45 @@ pip install --upgrade ytsage
|
|||||||
ytsage
|
ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 📦 Готовые исполняемые файлы
|
### 📦 Готовые исполняемые файлы (Executable)
|
||||||
|
|
||||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
> [👉 Скачать последний релиз](https://github.com/oop7/YTSage/releases/latest)
|
||||||
|
|
||||||
#### 🪟 Окна
|
#### 🪟 Windows
|
||||||
|
|
||||||
| Формат | Описание |
|
| Формат | Описание |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Стандартный установщик |
|
|  | Стандартный установщик |
|
||||||
|  | В комплекте FFmpeg |
|
|  | С включенным FFmpeg |
|
||||||
|  | Портативная версия, установка не требуется |
|
|  | Портативная версия (не требует установки) |
|
||||||
|  | Портативный с FFmpeg, в архиве |
|
|  | Портативная с FFmpeg, сжатая (ZIP) |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Этапы установки</summary>
|
<summary>🛠️ Шаги по установке</summary>
|
||||||
|
|
||||||
1. **Установщик EXE (`.exe`)**: дважды щелкните файл и следуйте указаниям мастера установки.
|
1. **EXE установщик (`.exe`)**: Дважды щелкните файл и следуйте инструкциям мастера установки.
|
||||||
2. **Портативная версия (`.zip`)**: распакуйте архив в нужное место и запустите `ytsage.exe`.
|
2. **Портативная версия (`.zip`)**: Распакуйте файл в нужное место и запустите `ytsage.exe`.
|
||||||
3. **FFmpeg Bundled**: выберите версии в комплекте FFmpeg, если в вашей системе не установлен FFmpeg.
|
3. **Встроенный FFmpeg**: Если в вашей системе не установлен FFmpeg, выбирайте версии со встроенным FFmpeg.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Линукс
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Формат | Описание |
|
| Формат | Описание |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Пакет Debian |
|
|  | Пакет Debian |
|
||||||
|  | AppImage, портативный |
|
|  | AppImage, Портативный |
|
||||||
|  | пакет RPM |
|
|  | Пакет RPM |
|
||||||
|  | Комплект Flatpak |
|
|  | Пакет Flatpak |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Этапы установки</summary>
|
<summary>🛠️ Шаги по установке</summary>
|
||||||
|
|
||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
sudo dpkg -i ytsage_*.deb
|
||||||
sudo apt-get install -f # Fix missing dependencies if any
|
sudo apt-get install -f # Если нужно исправить зависимости
|
||||||
```
|
```
|
||||||
- **Об/мин (`.rpm`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
@@ -147,7 +148,7 @@ ytsage
|
|||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **Flatpak**: следуйте инструкциям на Flathub или запустите:
|
- **Flatpak**: Следуйте инструкциям на Flathub или выполните:
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
@@ -157,16 +158,16 @@ ytsage
|
|||||||
|
|
||||||
| Формат | Описание |
|
| Формат | Описание |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Заархивированное приложение для Apple Silicon |
|
|  | Приложение ZIP для Apple Silicon |
|
||||||
|  | Установщик образа диска для Apple Silicon |
|
|  | Установщик DMG для Apple Silicon |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Этапы установки</summary>
|
<summary>🛠️ Шаги по установке</summary>
|
||||||
|
|
||||||
- **Установщик DMG (`.dmg`)**: дважды щелкните, чтобы смонтировать, затем перетащите `YTSage.app` в папку «Приложения».
|
- **DMG установщик (`.dmg`)**: Дважды щелкните, чтобы смонтировать, и перетащите `YTSage.app` в папку Applications (Программы).
|
||||||
- **Архив приложений (`.zip`)**: распакуйте zip-архив и переместите `YTSage.app` в папку «Приложения».
|
- **Приложение в архиве (`.zip`)**: Распакуйте ZIP и переместите `YTSage.app` в папку Applications.
|
||||||
|
|
||||||
*Примечание. Если вы столкнулись с ошибкой «Приложение повреждено», см. [macOS troubleshooting section](#troubleshooting) ниже.*
|
*Примечание: Если вы получили ошибку "App is damaged", см. раздел по macOS ниже.*
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -181,21 +182,21 @@ git clone https://github.com/oop7/YTSage.git
|
|||||||
cd YTSage
|
cd YTSage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Установите зависимости
|
### 2. Установить зависимости
|
||||||
|
|
||||||
#### ⚡ С уф
|
#### ⚡ С помощью uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 Или со стандартным пипом
|
#### 📦 Или через стандартный pip
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Запустите приложение
|
### 3. Запустить приложение
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -203,147 +204,151 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="скриншоты"></a>
|
||||||
## 📸 Скриншоты
|
## 📸 Скриншоты
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
<td><img src="../branding/screenshots/Download-Settings.png" alt="Настройки загрузки" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Загрузка плейлиста" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Настройки загрузки</em></td>
|
<td align="center"><em>Настройки загрузки</em></td>
|
||||||
<td align="center"><em>Скачать плейлист</em></td>
|
<td align="center"><em>Загрузка плейлиста</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="Выбор аудиоформата" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Пользовательские опции" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Аудиоформат</em></td>
|
<td align="center"><em>Аудиоформат</em></td>
|
||||||
<td align="center"><em>Пользовательские параметры</em></td>
|
<td align="center"><em>Пользовательские опции</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="использование"></a>
|
||||||
## 📖 Использование
|
## 📖 Использование
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Базовое использование</summary>
|
<summary>🎯 Базовое использование</summary>
|
||||||
|
|
||||||
1. **Запустите YTSage**
|
1. **Запустите YTSage**
|
||||||
2. **Вставьте URL-адрес YouTube** (или нажмите кнопку «Вставить URL-адрес»).
|
2. **Вставьте ссылку на YouTube** (или используйте кнопку "Paste URL")
|
||||||
3. **Нажмите «Анализ»**.
|
3. **Нажмите "Analyze"**
|
||||||
4. **Выберите формат:**
|
4. **Выберите формат:**
|
||||||
- `Video` для загрузки видео.
|
- `Video` для загрузки видео
|
||||||
- `Audio Only` для извлечения звука
|
- `Audio Only` для извлечения аудио
|
||||||
5. **Выберите параметры:**
|
5. **Выберите опции:**
|
||||||
- Включить субтитры и выбрать язык
|
- Включите субтитры и выберите язык
|
||||||
- Включить объединение субтитров
|
- Включите объединение субтитров (Merge)
|
||||||
- Сохранить миниатюру
|
- Сохранить обложку (Save Thumbnail)
|
||||||
- Удалить спонсорские сегменты
|
- Удалить спонсорские вставки (SponsorBlock)
|
||||||
- Сохранить описание
|
- Сохранить описание (Save Description)
|
||||||
- Вставлять главы
|
- Внедрить главы (Embed Chapters)
|
||||||
6. **Выберите выходной каталог**
|
6. **Выберите папку для сохранения**
|
||||||
7. **Нажмите «Загрузить»**.
|
7. **Нажмите "Download"**
|
||||||
|
|
||||||
> 💡 Каталогом загрузки по умолчанию является папка «Загрузки» пользователя.
|
> 💡 Папка загрузок по умолчанию — папка "Загрузки" текущего пользователя.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 Скачать плейлист</summary>
|
<summary>📋 Загрузка плейлиста</summary>
|
||||||
|
|
||||||
1. **Вставьте URL-адрес плейлиста**
|
1. **Вставьте ссылку на плейлист**
|
||||||
2. **Нажмите «Анализ»**.
|
2. **Нажмите "Analyze"**
|
||||||
3. **Выберите видео в селекторе плейлиста (необязательно, по умолчанию — все)**
|
3. **Выберите видео в селекторе (по умолчанию выбраны все)**
|
||||||
4. **Выберите желаемый формат/качество**
|
4. **Выберите нужный формат/качество**
|
||||||
5. **Нажмите «Загрузить»**.
|
5. **Нажмите "Download"**
|
||||||
|
|
||||||
> 💡 Приложение автоматически обрабатывает очередь загрузки
|
> 💡 Приложение автоматически управляет очередью загрузки, и вы можете экспортировать записи плейлиста в файлы `.txt`, `.csv`, `.m3u` или `.json`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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`.
|
1. Откройте `Download Settings`.
|
||||||
2. Включите `Generic Mode`.
|
2. Включите `Generic Mode`.
|
||||||
3. Вставьте поддерживаемый URL-адрес видео или списка воспроизведения, не относящегося к YouTube.
|
3. Вставьте ссылку на видео или плейлист с поддерживаемого сайта (не YouTube).
|
||||||
4. Нажмите `Analyze`.
|
4. Нажмите `Analyze`.
|
||||||
5. Выберите формат и загрузите как обычно.
|
5. Выберите формат и скачайте как обычно.
|
||||||
|
|
||||||
Примечания:
|
Примечания:
|
||||||
|
|
||||||
- Общий режим изменяет только проверку URL-адреса внутри YTSage. Целевой сайт по-прежнему должен поддерживаться установленной версией yt-dlp.
|
- Общий режим только отключает строгую проверку URL внутри YTSage. Сайт все равно должен поддерживаться установленной версией yt-dlp.
|
||||||
– Некоторым сайтам требуются файлы cookie, сеанс входа в систему, прокси-сервер или дополнительные аргументы yt-dlp в зависимости от экстрактора.
|
- Некоторым сайтам требуются cookies, вход, прокси или дополнительные аргументы yt-dlp.
|
||||||
– Если на сайте произошел сбой, сначала обновите yt-dlp на вкладке встроенного средства обновления, прежде чем сообщать о проблеме.
|
- Если сайт перестал работать, обновите yt-dlp во встроенной вкладке обновления, прежде чем сообщать о проблеме.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰 Параметры мультимедиа и загрузки</summary>
|
<summary>🧰 Опции медиа и загрузки</summary>
|
||||||
|
|
||||||
- **Параметры субтитров:** фильтруйте языки и встраивайте субтитры в видеофайл.
|
- **Опции субтитров:** Фильтруйте языки и внедряйте субтитры в видеофайл.
|
||||||
- **Объединение субтитров:** объединение субтитров в видеофайл для жестко запрограммированных субтитров.
|
- **Объединение субтитров:** "Вшивает" субтитры в видеофайл (hardcode).
|
||||||
- **Сохранить описание:** сохранить описание видео в виде текстового файла.
|
- **Сохранить описание:** Сохраняет описание видео в текстовый файл.
|
||||||
- **Сохранить миниатюру:** сохраните миниатюру видео как файл изображения.
|
- **Сохранить обложку:** Сохраняет превью видео как изображение.
|
||||||
- **Встроить главы.** Встраивайте маркеры глав в качестве метаданных для совместимых видеопроигрывателей.
|
- **Внедрить главы:** Добавляет маркеры глав в метаданные для совместимых медиаплееров.
|
||||||
- **Удалить спонсорские сегменты.** Удалите спонсорские сегменты из видео с помощью SponsorBlock.
|
- **Удалить спонсорские вставки:** Использует SponsorBlock для удаления рекламных сегментов из видео.
|
||||||
- **Обрезать видео:** загружайте только определенные части видео, указав временные диапазоны в формате `HH:MM:SS`.
|
- **Обрезать видео:** Загружайте только части видео, указав временной интервал в формате `HH:MM:SS`.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️ Настройки вывода и файла</summary>
|
<summary>⚙️ Настройки вывода и файлов</summary>
|
||||||
|
|
||||||
- **Ограничитель скорости:** Ограничьте скорость загрузки, например `500K` до 500 КБ/с.
|
- **Ограничение скорости:** Ограничьте скорость загрузки, например, `500K` для 500 КБ/с.
|
||||||
- **Сохранить путь загрузки:** сохраните путь загрузки по умолчанию для будущих загрузок. Доступно в **Настройки загрузки → Путь загрузки**.
|
- **Путь загрузки:** Сохраните путь по умолчанию для будущих загрузок. Доступно в **Download Settings → Download Path**.
|
||||||
- **Формат имени выходного файла:** Настройте формат имени выходного файла, используя такие переменные, как `%(title)s`, `%(uploader)s` и `%(resolution)s`. Доступно в **Настройки загрузки → Формат имени файла**.
|
- **Разрешение по умолчанию:** Установите предпочитаемое разрешение для автовыбора (например, 1080p, 720p). Доступно в **Download Settings → Default Video Resolution**.
|
||||||
- **Принудительный формат вывода.** Принудительно загружайте видео в определенный формат контейнера, например `mp4`, `webm` или `mkv`. Доступно в **Настройки загрузки → Настройки формата вывода**.
|
- **Языки субтитров по умолчанию:** Установите языки по умолчанию для автовыбора (через запятую, например, `ru,en`). Доступно в **Download Settings → Default Subtitle Languages**.
|
||||||
- **Преобразование аудиоформата:** конвертируйте загрузки, содержащие только аудио, в предпочтительные форматы, такие как `AAC`, `MP3`, `FLAC`, `WAV`, `Opus`, `M4A`, `Vorbis` или `Best`. Доступно в **Настройки загрузки → Настройки аудиоформата**.
|
- **Формат имени файла:** Настройте формат имени выходного файла, используя переменные типа `%(title)s`, `%(uploader)s` и др. Доступно в **Download Settings → Filename Format**.
|
||||||
- **Нормализация звука:** Стандартизируйте громкость для загрузок, содержащих только аудио, используя EBU R128.
|
- **Принудительный формат вывода:** Принудительно скачивайте видео в определенном контейнере, например `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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Доступ и сеть</summary>
|
<summary>🌐 Доступ и сеть</summary>
|
||||||
|
|
||||||
- **Войти с помощью файлов cookie:** войдите на YouTube, используя файлы cookie, чтобы получить доступ к личному контенту.
|
- **Вход через Cookies:** Войдите в YouTube через куки для доступа к приватному контенту.
|
||||||
Как его использовать:
|
Как использовать:
|
||||||
1. **Рекомендуется**. Используйте встроенную опцию `Extract cookies from browser` в приложении, затем выберите браузер и, при необходимости, профиль.
|
1. **Рекомендуется:** Используйте встроенную опцию `Extract cookies from browser`, выберите браузер и профиль.
|
||||||
2. Альтернативно извлеките файлы cookie вручную:
|
2. Или вручную:
|
||||||
а. Экспортируйте файлы cookie из вашего браузера, используя расширение, например [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file).
|
a. Экспортируйте куки через расширение [cookie-editor](https://github.com/moustachauve/cookie-editor).
|
||||||
б. Скопируйте файлы cookie в формате Netscape.
|
b. Скопируйте куки в формате Netscape.
|
||||||
в. Создайте файл с именем `cookies.txt` и вставьте в него файлы cookie.
|
c. Создайте файл `cookies.txt` и вставьте их туда.
|
||||||
д. Выберите файл `cookies.txt` в приложении.
|
d. Выберите этот файл в приложении.
|
||||||
- **Поддержка прокси:** используйте прокси-сервер для загрузки, например `http://<proxy-server>:<port>`
|
- **Поддержка прокси:** Используйте прокси-сервер для загрузок, например: `http://<proxy-server>:<port>`
|
||||||
- **Общий режим.** Разрешить YTSage анализировать и загружать контент с сайтов, не принадлежащих YouTube, и поддерживаемых yt-dlp. Включите его в разделе **Настройки загрузки → Общий режим**.
|
- **Общий режим:** Позволяет скачивать с сайтов помимо YouTube. Включите в **Download Settings → Generic Mode**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Инструменты и уход</summary>
|
<summary>🛠️ Инструменты и обслуживание</summary>
|
||||||
|
|
||||||
– **Пользовательские команды.** Доступ к расширенным функциям yt-dlp с помощью аргументов командной строки.
|
- **Пользовательские команды:** Доступ к продвинутым функциям yt-dlp через аргументы командной строки.
|
||||||
- **Вкладка «Обновление».** Управляйте встроенными инструментами обновления из одного места в пользовательских настройках:
|
- **Вкладка обновления:** Управляйте инструментами в одном месте (Custom Options):
|
||||||
- **Обновления yt-dlp:** проверяйте наличие обновлений и переключайтесь между стабильными и ночными выпусками.
|
- **Обновление yt-dlp:** Проверка обновлений, переключение между Stable и Nightly ветками.
|
||||||
- **Проверка версии FFmpeg:** проверьте версию FFmpeg и откройте руководства по установке.
|
- **Версия FFmpeg:** Проверка версии и инструкции по установке.
|
||||||
- **Обновления Deno:** проверьте и обновите среду выполнения Deno.
|
- **Обновление Deno:** Проверка и обновление Deno.
|
||||||
- **Обнаружение FFmpeg/yt-dlp/Deno:** автоматическое определение путей и версий FFmpeg, yt-dlp и Deno в диалоговом окне «О программе».
|
- **Обнаружение FFmpeg/yt-dlp/Deno:** Автоматически находит пути и версии в окне "About".
|
||||||
- **История загрузок.** Просматривайте прошлые загрузки с помощью миниатюр и статусов с помощью кнопки **История**.
|
- **История загрузок:** Просматривайте историю с обложками и статусом через кнопку **History**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Локализация</summary>
|
<summary>🌍 Локализация</summary>
|
||||||
|
|
||||||
YTSage поддерживает **14 языков**, что обеспечивает доступность по всему миру. Выберите предпочитаемый язык в меню **Пользовательские параметры → Язык**.
|
YTSage поддерживает **14 языков**. Выберите нужный в **Custom Options → Language**.
|
||||||
|
|
||||||
### Поддерживаемые языки
|
### Поддерживаемые языки
|
||||||
|
|
||||||
@@ -351,183 +356,174 @@ YTSage поддерживает **14 языков**, что обеспечива
|
|||||||
|----------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 Английский | `en` | 🇪🇸 Испанский | `es` |
|
| 🇺🇸 Английский | `en` | 🇪🇸 Испанский | `es` |
|
||||||
| 🇸🇦 Арабский | `ar` | 🇫🇷 Французский | `fr` |
|
| 🇸🇦 Арабский | `ar` | 🇫🇷 Французский | `fr` |
|
||||||
| 🇩🇪 немецкий | `de` | 🇮🇳 Хинди | `hi` |
|
| 🇩🇪 Немецкий | `de` | 🇮🇳 Хинди | `hi` |
|
||||||
| 🇮🇩 Индонезийский | `id` | 🇮🇹 Итальянский | `it` |
|
| 🇮🇩 Индонезийский | `id` | 🇮🇹 Итальянский | `it` |
|
||||||
| 🇯🇵 Японский | `ja` | 🇵🇱 Польский | `pl` |
|
| 🇯🇵 Японский | `ja` | 🇵🇱 Польский | `pl` |
|
||||||
| 🇧🇷 Португальский | `pt` | 🇷🇺 Русский | `ru` |
|
| 🇧🇷 Португальский | `pt` | 🇷🇺 Русский | `ru` |
|
||||||
| 🇹🇷 Турецкий | `tr` | 🇨🇳 Китайский | `zh` |
|
| 🇹🇷 Турецкий | `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.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.id.md](README.id.md) | 🇮🇹 Итальянский | [README.it.md](README.it.md) |
|
||||||
| 🇯🇵 Японский | [README.ja.md](README.ja.md) | 🇵🇱 Польский | [README.pl.md](README.pl.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.pt.md](README.pt.md) | 🇷🇺 Русский | [README.ru.md](README.ru.md) |
|
||||||
| 🇹🇷 Турецкий | [README.tr.md](README.tr.md) | 🇨🇳 Китайский | [README.zh.md](README.zh.md) |
|
| 🇹🇷 Турецкий | [README.tr.md](README.tr.md) | 🇨🇳 Китайский | [README.zh.md](README.zh.md) |
|
||||||
|
|
||||||
> 💡 **Хотите сделать перевод?** Посетите раздел [Contributing](#contributing), чтобы мы могли добавить больше языков!
|
> 💡 **Хотите помочь с переводом?** Ознакомьтесь с разделом [Участие в проекте](#участие-в-проекте), чтобы помочь нам добавить новые языки!
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="решение-проблем"></a>
|
||||||
## 🛠️ Устранение неполадок
|
## 🛠️ Решение проблем
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Нажмите, чтобы просмотреть распространенные проблемы и решения</summary>
|
<summary>Нажмите, чтобы увидеть частые вопросы</summary>
|
||||||
|
|
||||||
– **Таблица формата не отображается.** Обновите yt-dlp до последней версии и переключайтесь на yt-dlp каждую ночь.
|
- **Не появляется таблица форматов:** Обновите yt-dlp до последней версии и попробуйте переключиться на канал Nightly.
|
||||||
- **Не удалось загрузить.** Проверьте подключение к Интернету и убедитесь, что видео доступно.
|
- **Загрузка не удалась:** Проверьте интернет-соединение и доступность видео.
|
||||||
- **Конкретные ошибки загрузки:**
|
- **Специфические ошибки:**
|
||||||
- **Частные видео.** Используйте аутентификацию с помощью файлов cookie для доступа к частному контенту.
|
- **Приватные видео:** Используйте вход через Cookies.
|
||||||
- **Контент с возрастными ограничениями.** Войдите в аккаунт YouTube, чтобы просмотреть видео с возрастными ограничениями.
|
- **Ограничение по возрасту:** Войдите в аккаунт YouTube.
|
||||||
– **Видео с геоблокировкой.** Рассмотрите возможность использования VPN, чтобы обойти региональные ограничения.
|
- **Геоблокировка:** Используйте VPN.
|
||||||
– **Удалены видео:** Видео больше не доступно на YouTube.
|
- **Видео удалено:** Видео больше недоступно на YouTube.
|
||||||
- **Прямые трансляции:** Прямые трансляции невозможно загрузить; дождитесь окончания потока.
|
- **Прямые трансляции:** Стримы нельзя скачать, пока они идут; дождитесь завершения.
|
||||||
- **Ошибки сети.** Проверьте подключение к Интернету и повторите попытку.
|
- **Сетевые ошибки:** Проверьте подключение к интернету и повторите попытку.
|
||||||
- **Недопустимые URL-адреса.** Убедитесь, что URL-адрес правильный и принадлежит поддерживаемой платформе.
|
- **Неверный URL:** Убедитесь, что URL указан правильно и принадлежит поддерживаемой платформе.
|
||||||
- **Премиум-контент:** требуется подписка YouTube Premium.
|
- **Премиум-контент:** Требуется подписка YouTube Premium.
|
||||||
- **Блокировка авторских прав.** Контент блокируется из-за ограничений авторских прав.
|
- **Блокировка авторских прав:** Контент заблокирован из-за ограничений авторского права.
|
||||||
- **Разделение видео и аудиофайлов после загрузки.** Это происходит, когда FFmpeg отсутствует или не обнаружен. YTSage требует FFmpeg для объединения высококачественных видео и аудио потоков.
|
- **Видео и аудио разделены после загрузки:** Это происходит, если FFmpeg отсутствует или не обнаружен. YTSage нужен FFmpeg для объединения потоков.
|
||||||
- **Решение:** Убедитесь, что FFmpeg установлен и доступен в PATH вашей системы. Для пользователей Windows самый простой вариант — загрузить файл `YTSage-v<version>-ffmpeg.exe`, который поставляется в комплекте с FFmpeg.
|
- **Решение:** Убедитесь, что FFmpeg установлен и добавлен в PATH. Пользователям Windows проще всего скачать версию с `-ffmpeg.exe`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 🛡️ Предупреждение Защитника Windows/антивируса
|
#### 🛡️ Предупреждение Windows Defender / Антивируса
|
||||||
|
|
||||||
Некоторые антивирусные программы могут помечать файлы `.exe` как ложные срабатывания. Это **известное ограничение** пакетных приложений.
|
Некоторые антивирусы могут помечать `.exe` файлы как ложные срабатывания. Это **известная особенность** упакованных приложений.
|
||||||
|
|
||||||
**Почему это происходит:**
|
**Причины:**
|
||||||
- Антивирусная эвристика может ошибочно идентифицировать упакованные исполняемые файлы как подозрительные.
|
- Эвристические алгоритмы антивирусов могут ошибочно идентифицировать упакованные исполняемые файлы как подозрительные.
|
||||||
|
|
||||||
**Безопасные альтернативы:**
|
**Безопасные варианты:**
|
||||||
- ✅ **Используйте установку pip:** `pip install ytsage` (рекомендуется)
|
- ✅ **Установка через pip:** `pip install ytsage` (рекомендуется)
|
||||||
- ✅ **Сборка из исходного кода**: следуя этому [guide](../.github/CI_CD_README.md)
|
- ✅ **Сборка из исходников**: Инструкция [здесь](.github/CI_CD_README.md)
|
||||||
- ✅ **Внесите приложение в белый список** в антивирусном программном обеспечении.
|
- ✅ **Добавить в исключения** антивируса.
|
||||||
|
|
||||||
#### 🍎 macOS: «Приложение повреждено и его невозможно открыть»
|
#### 🍎 macOS: "App is damaged and cannot be opened"
|
||||||
Если вы видите эту ошибку в macOS Sonoma или более поздней версии, вам необходимо удалить атрибут карантина.
|
Если вы видите эту ошибку на macOS Sonoma или новее:
|
||||||
|
|
||||||
1. **Откройте терминал** (его можно найти с помощью Spotlight).
|
1. **Откройте Терминал**.
|
||||||
2. **Введите следующую команду**, но **не** пока нажимайте Enter. Обязательно добавьте пробел в конце:
|
2. **Введите команду** (с пробелом в конце):
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
xattr -d com.apple.quarantine
|
||||||
```
|
```
|
||||||
3. **Перетащите файл `YTSage.app`** из окна Finder и поместите его прямо в окно терминала. Это автоматически вставит правильный путь к файлу.
|
3. **Перетащите `YTSage.app`** из Finder в окно Терминала.
|
||||||
4. **Нажмите Enter**, чтобы запустить команду.
|
4. **Нажмите Enter**.
|
||||||
5. **Попробуйте снова открыть YTSage.app.** Теперь оно должно запуститься правильно.
|
5. Попробуйте открыть программу снова.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **Места конфигурации (дополнительно)**
|
#### **Пути конфигурации (Продвинутым)**
|
||||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<a id="спонсорство"></a>
|
||||||
## 💖 Спонсор
|
## 💖 Спонсорство
|
||||||
|
|
||||||
Если YTSage сэкономит вам время, рассмотрите возможность спонсирования проекта. Спонсорство помогает покрыть время разработки, тестирования на разных платформах и будущих улучшений.
|
Если YTSage экономит ваше время, поддержите разработку проекта. Спонсорство помогает поддерживать тестирование на всех платформах и внедрять новые функции.
|
||||||
|
|
||||||
- Спонсоры GitHub: https://github.com/sponsors/oop7
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- Спонсорская ссылка также доступна непосредственно внутри приложения из диалогового окна «О программе».
|
- Ссылка на спонсорство также есть в окне "About" в приложении.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="участие-в-проекте"></a>
|
||||||
## 👥 Вклад
|
## 👥 Участие в проекте
|
||||||
|
|
||||||
Мы приветствуем вклады! Вот как вы можете помочь:
|
Мы рады любой помощи!
|
||||||
|
|
||||||
1. 🍴 Форкните репозиторий
|
1. 🍴 Сделайте Fork репозитория
|
||||||
2. 🌿 Создайте свою ветку функций:
|
2. 🌿 Создайте ветку: `git checkout -b feature/NewFeature`
|
||||||
```bash
|
3. 💾 Сделайте коммит: `git commit -m 'Add NewFeature'`
|
||||||
git checkout -b feature/AmazingFeature
|
4. 📤 Отправите изменения: `git push origin feature/NewFeature`
|
||||||
```
|
5. 🔄 Создайте Pull Request
|
||||||
3. 💾 Зафиксируйте изменения:
|
|
||||||
```bash
|
|
||||||
git commit -m 'Add some AmazingFeature'
|
|
||||||
```
|
|
||||||
4. 📤 Нажмите на ветку:
|
|
||||||
```bash
|
|
||||||
git push origin feature/AmazingFeature
|
|
||||||
```
|
|
||||||
5. 🔄 Откройте запрос на включение
|
|
||||||
|
|
||||||
### 🌍 Участие в переводах
|
### 🌍 Помощь с переводами
|
||||||
|
|
||||||
- Обновите соответствующий локализованный файл README (например, `README.es.md`).
|
- Обновите файл README (например, `readme-translations/README.ru.md`)
|
||||||
- Синхронизируйте строки приложения, отредактировав `ytsage/languages/<code>.json`.
|
- Обновите строки интерфейса в `ytsage/languages/<code>.json`
|
||||||
- Если ваш язык отсутствует, начните с `README.md` и создайте `README.<code>.md`.
|
- Если ваш язык отсутствует, начните с `README.md` и создайте `README.<code>.md`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 Структура проекта</summary>
|
<summary>📂 Структура проекта</summary>
|
||||||
|
|
||||||
## YTSage — Структура проекта
|
## YTSage - Структура проекта
|
||||||
|
|
||||||
В этом документе описывается организованная структура папок YTSage.
|
Этот документ описывает организованную структуру папок YTSage.
|
||||||
|
|
||||||
### 📁 Структура проекта
|
### 📁 Схема проекта
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # Настройки GitHub
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Шаблоны проблем
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Шаблон отчета об ошибке
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # Рабочие процессы GitHub Actions
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Сборка для Linux
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # Сборка для macOS
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Сборка для Windows
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Основной процесс выпуска
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # Документация CI/CD
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Брендинг (скриншоты, SVG)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Иконки приложения
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Скриншоты для документации
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # SVG ассеты
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # Файл лицензии
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Метаданные проекта и зависимости
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Документация проекта
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Зависимости Python (разработка)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Исходный код
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Ресурсы времени выполнения
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Иконки приложения
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Звуковые файлы
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Файлы локализации
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Перевод на арабский
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Перевод на немецкий
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # Перевод на английский
|
||||||
│ └── ... # Other languages
|
│ └── ... # Другие языки
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Основная бизнес-логика
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Интеграция Deno
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # Функционал загрузки
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # Интеграция FFmpeg
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Вспомогательные функции
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # Интеграция yt-dlp
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Компоненты интерфейса
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Главное окно приложения
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Классы диалогов
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Утилиты
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Управление конфигурацией
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Логирование
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Точка входа в пакет
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Основной скрипт запуска
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Звездная история
|
## ⭐️ История звезд
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Звездная история
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -541,7 +537,7 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Лицензия
|
## 📜 Лицензия
|
||||||
|
|
||||||
Этот проект лицензируется по лицензии MIT — подробности см. в файле [LICENSE](../LICENSE).
|
Проект распространяется под лицензией MIT — подробности в файле [LICENSE](LICENSE).
|
||||||
|
|
||||||
## 🙏 Благодарности
|
## 🙏 Благодарности
|
||||||
|
|
||||||
@@ -550,54 +546,55 @@ YTSage/
|
|||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<p>Сердечное спасибо всем, кто внес свой вклад в этот проект, открыв проблему, чтобы предложить улучшения или сообщить об ошибке.</p>
|
<p>Большое спасибо всем, кто внес свой вклад в этот проект, открывая проблемы с предложениями по улучшению или отчетами об ошибках.</p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Основные компоненты</th></tr>
|
<tr class="section"><th colspan="2">Основные компоненты</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||||
<td>Загрузить двигатель</td>
|
<td>Движок загрузки</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>Обработка мультимедиа</td>
|
<td>Обработка медиа</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<td><a href="https://deno.com/">Deno</a></td>
|
||||||
<td>Среда выполнения для интеграции с yt-dlp</td>
|
<td>Среда для интеграции yt-dlp</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Библиотеки и платформы</th></tr>
|
<tr class="section"><th colspan="2">Библиотеки и фреймворки</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>GUI Framework</td>
|
<td>GUI фреймворк</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">Подушка</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>Обработка изображений</td>
|
<td>Обработка изображений</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><a href="https://requests.readthedocs.io/">запросы</a></td>
|
<tr>
|
||||||
<td>HTTP-запросы</td>
|
<td><a href="https://requests.readthedocs.io/">requests</a></td>
|
||||||
|
<td>HTTP запросы</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">упаковка</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Обработка версий и пакетов</td>
|
<td>Управление версиями</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">уценка</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>Рендеринг уценки</td>
|
<td>Рендеринг Markdown</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>Ведение журнала</td>
|
<td>Логирование</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">Активы и участники</th></tr>
|
<tr class="section"><th colspan="2">Контент и участники</th></tr>
|
||||||
<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>
|
<td>Звук уведомления</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>Соавтор кода</td>
|
<td>Участник разработки</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -607,12 +604,10 @@ YTSage/
|
|||||||
|
|
||||||
## ⚠️ Отказ от ответственности
|
## ⚠️ Отказ от ответственности
|
||||||
|
|
||||||
Этот инструмент предназначен только для личного использования. Пожалуйста, соблюдайте условия обслуживания YouTube и права создателей контента.
|
Этот инструмент предназначен только для личного использования. Пожалуйста, соблюдайте Условия использования YouTube и права создателей контента.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
Сделано с ❤️ от [oop7](https://github.com/oop7)
|
||||||
Сделано с ❤️ автором [oop7](https://github.com/oop7)
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+255
-248
@@ -1,7 +1,7 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
<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ü"/>
|
||||||
|
|
||||||
[](https://www.python.org/downloads/)
|
[](https://www.python.org/downloads/)
|
||||||
[](https://pepy.tech/project/ytsage)
|
[](https://pepy.tech/project/ytsage)
|
||||||
@@ -13,80 +13,81 @@
|
|||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**Temiz bir PySide6 arayüzüne sahip modern bir YouTube indiricisi.**
|
**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)
|
İngilizce: [EN](../README.md)
|
||||||
| Cevap: [AR](README.ar.md)
|
| Arapça: [AR](README.ar.md)
|
||||||
| Almanca: [DE](README.de.md)
|
| Almanca: [DE](README.de.md)
|
||||||
| İspanyolca: [ES](README.es.md)
|
| İspanyolca: [ES](README.es.md)
|
||||||
| Fransızca: [FR](README.fr.md)
|
| Fransızca: [FR](README.fr.md)
|
||||||
| Adres: [HI](README.hi.md)
|
| Hintçe: [HI](README.hi.md)
|
||||||
| Bahasa Endonezya: [ID](README.id.md)
|
| Endonezce: [ID](README.id.md)
|
||||||
| İtalyanca: [IT](README.it.md)
|
| İtalyanca: [IT](README.it.md)
|
||||||
| Şarkı sözü: [JA](README.ja.md)
|
| Japonca: [JA](README.ja.md)
|
||||||
| Polski: [PL](README.pl.md)
|
| Lehçe: [PL](README.pl.md)
|
||||||
| Portekizce: [PT](README.pt.md)
|
| Portekizce: [PT](README.pt.md)
|
||||||
| Rusça: [RU](README.ru.md)
|
| Rusça: [RU](README.ru.md)
|
||||||
| Türkçe: [TR](README.tr.md)
|
| Türkçe: [TR](README.tr.md)
|
||||||
| Adres: [ZH](README.zh.md)
|
| Çince: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">Kurulum</a> •
|
<a href="#kurulum">Kurulum</a> •
|
||||||
<a href="#features">Özellikler</a> •
|
<a href="#özellikler">Özellikler</a> •
|
||||||
<a href="#usage">Kullanım</a> •
|
<a href="#kullanım">Kullanım</a> •
|
||||||
<a href="#screenshots">Ekran görüntüleri</a> •
|
<a href="#ekran-görüntüleri">Ekran Görüntüleri</a> •
|
||||||
<a href="#troubleshooting">Sorun giderme</a> •
|
<a href="#sorun-giderme">Sorun Giderme</a> •
|
||||||
<a href="#sponsor">Sponsor</a> •
|
<a href="#sponsor-olun">Sponsor Olun</a> •
|
||||||
<a href="#contributing">Katkıda Bulunuyorum</a>
|
<a href="#katkıda-bulunma">Katkıda Bulunma</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="neden-ytsage"></a>
|
||||||
## ❓ Neden YTSage?
|
## ❓ 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:
|
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ü
|
- Modern ve temiz bir PySide6 arayüzü
|
||||||
- Video, ses ve altyazılar için tek tıklamayla indirmeler
|
- Tek tıkla video, ses ve altyazı indirme
|
||||||
- SponsorBlock, altyazı birleştirme ve oynatma listesi seçimi gibi gelişmiş özellikler
|
- 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
|
- yt-dlp tarafından desteklenen YouTube dışındaki siteler için isteğe bağlı "Genel Mod"
|
||||||
- Platformlar arası destek ve kolay kurulum
|
- Çoklu platform desteği ve kolay kurulum
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="özellikler"></a>
|
||||||
## ✨ Özellikler
|
## ✨ Özellikler
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
| Temel Özellikler | Gelişmiş Özellikler | Ekstra Özellikler |
|
| Temel Özellikler | Gelişmiş Özellikler | Ekstra Özellikler |
|
||||||
|-------------------------------------|--------------------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 Format Tablosu | 🚫 SponsorBlock Entegrasyonu | 🎞️ FPS/HDR Ekran |
|
| 🎥 Format Tablosu | 🚫 SponsorBlock Entegrasyonu | 🎞️ FPS/HDR Gösterimi |
|
||||||
| 🎵 Ses Çıkarma | 📝 Çoklu Altyazı Seç ve Birleştir | 🔄 yt-dlp'yi Otomatik Güncelle |
|
| 🎵 Ses Çıkarma | 📝 Altyazı Seçimi ve Birleştirme | 🔄 Otomatik yt-dlp Güncellemesi |
|
||||||
| ✨ Basit kullanıcı arayüzü | 💾 Açıklamayı ve Küçük Resmi Kaydet | 🛠️ FFmpeg/yt-dlp/Deno Algılama |
|
| ✨ Basit Kullanıcı Arayüzü | 💾 Açıklama ve Küçük Resim Kaydetme | 🛠️ FFmpeg/yt-dlp/Deno Algılama |
|
||||||
| 📋 Çalma Listesi Desteği ve Seçici | 🚀 Hız Sınırlayıcı | ⚙️ Özel Komutlar |
|
| 📋 Oynatma Listesi Desteği | 🚀 Hız Sınırlayıcı | ⚙️ Özel Komutlar |
|
||||||
| 📑 Bölümleri Yerleştir | ✂️ Video Bölümlerini Kırp | 🍪 Çerezlerle Giriş Yapın |
|
| 📑 Bölüm Entegrasyonu | ✂️ Video Kırpma | 🍪 Çerez ile Giriş |
|
||||||
| 📜 Geçmişi İndir | 🔄 Kanal Seçimini Serbest Bırak | 🌐 Proxy Desteği |
|
| 📜 İndirme Geçmişi | 🔄 Yayın Kanalı Seçimi | 🌐 Proxy Desteği |
|
||||||
| 🎚️ Ses Formatı Dönüştürme | 🎬 Video Formatı Ayarları | 🆙 Yerleşik Güncelleyici Sekmesi |
|
| 🎚️ Ses Formatı Dönüştürme | 🎬 Video Format Ayarları | 🆙 Entegre Güncelleme Sekmesi |
|
||||||
| 🌍 Genel Mod | 🔊 Ses Normalizasyonu (EBU R128) | 🌍 14 Dilde Yerelleştirme |
|
| 🌍 Genel Mod | 🔊 Ses Normalizasyonu (EBU R128) | 🌍 14 Dilde Yerelleştirme |
|
||||||
|
| 💾 Oynatma Listesi Dışa Aktarma | ⚙️ Varsayılan Kalite ve Altyazı | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="kurulum"></a>
|
||||||
## 🚀 Kurulum
|
## 🚀 Kurulum
|
||||||
|
|
||||||
### ⚡ Hızlı Kurulum (Önerilir)
|
### ⚡ Hızlı Kurulum (Önerilen)
|
||||||
|
|
||||||
YTSage'i PyPI'den yükleyin:
|
YTSage'i PyPI üzerinden yükleyin:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🔄 Mevcut bir kurulumu güncelleyin</summary>
|
<summary>🔄 Mevcut Kurulumu Güncelle</summary>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade ytsage
|
pip install --upgrade ytsage
|
||||||
@@ -94,41 +95,41 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Ardından uygulamayı başlatın:
|
Ardından uygulamayı çalıştırın:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
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
|
#### 🪟 Windows
|
||||||
|
|
||||||
| Biçim | Açıklama |
|
| Format | Açıklama |
|
||||||
|----------|----------------|
|
|--------|-------------|
|
||||||
|  | Standart yükleyici |
|
|  | Standart Kurulum Dosyası |
|
||||||
|  | FFmpeg paketiyle birlikte |
|
|  | FFmpeg Dahil |
|
||||||
|  | Taşınabilir versiyon, kurulum gerektirmez |
|
|  | Taşınabilir Sürüm, kuruluma gerek yok |
|
||||||
|  | FFmpeg ile taşınabilir, sıkıştırılmış |
|
|  | FFmpeg Dahil Taşınabilir, sıkıştırılmış (ZIP) |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Kurulum Adımları</summary>
|
<summary>🛠️ Kurulum Adımları</summary>
|
||||||
|
|
||||||
1. **EXE Yükleyici (`.exe`)**: Dosyaya çift tıklayın ve kurulum sihirbazını izleyin.
|
1. **EXE Yükleyici (`.exe`)**: Dosyaya çift tıklayın ve kurulum sihirbazını takip edin.
|
||||||
2. **Taşınabilir Sürüm (`.zip`)**: Arşivi istediğiniz konuma çıkarın ve `ytsage.exe`'i çalıştırın.
|
2. **Taşınabilir Sürüm (`.zip`)**: Dosyayı istediğiniz yere çıkarın ve `ytsage.exe` dosyasını çalıştırın.
|
||||||
3. **FFmpeg Paketli**: Sisteminizde FFmpeg yüklü değilse FFmpeg paketli versiyonlarını seçin.
|
3. **Dahili FFmpeg**: Sisteminizde FFmpeg kurulu değilse, FFmpeg dahil olan sürümleri seçin.
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
| Biçim | Açıklama |
|
| Format | Açıklama |
|
||||||
|----------|----------------|
|
|--------|-------------|
|
||||||
|  | Debian paketi |
|
|  | Debian Paketi |
|
||||||
|  | AppImage, taşınabilir |
|
|  | AppImage, Taşınabilir |
|
||||||
|  | RPM paketi |
|
|  | RPM Paketi |
|
||||||
|  | Düz Paket Paketi |
|
|  | Flatpak Paketi |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Kurulum Adımları</summary>
|
<summary>🛠️ Kurulum Adımları</summary>
|
||||||
@@ -136,7 +137,7 @@ ytsage
|
|||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
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`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
@@ -147,32 +148,32 @@ ytsage
|
|||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./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
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🍎macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
| Biçim | Açıklama |
|
| Format | Açıklama |
|
||||||
|----------|----------------|
|
|--------|-------------|
|
||||||
|  | Apple Silicon için sıkıştırılmış uygulama |
|
|  | Apple Silicon için ZIP Uygulaması |
|
||||||
|  | Apple Silicon için disk görüntüsü yükleyici |
|
|  | Apple Silicon için Disk Image Kurulum Dosyası |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Kurulum Adımları</summary>
|
<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.
|
- **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ı çıkartın ve `YTSage.app`'i Uygulamalar klasörünüze taşıyın.
|
- **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>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻 Kaynaktan Manuel Kurulum</summary>
|
<summary>💻 Kaynak Kodundan Manuel Kurulum</summary>
|
||||||
|
|
||||||
### 1. Depoyu Klonlayın
|
### 1. Depoyu Klonlayın
|
||||||
|
|
||||||
@@ -181,9 +182,9 @@ git clone https://github.com/oop7/YTSage.git
|
|||||||
cd YTSage
|
cd YTSage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Bağımlılıkları Kurun
|
### 2. Bağımlılıkları Yükleyin
|
||||||
|
|
||||||
#### ⚡UV ile
|
#### ⚡ uv ile
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
@@ -195,7 +196,7 @@ uv pip install .
|
|||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Uygulamayı çalıştırın
|
### 3. Uygulamayı Çalıştırın
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -203,146 +204,151 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="ekran-görüntüleri"></a>
|
||||||
## 📸 Ekran görüntüleri
|
## 📸 Ekran Görüntüleri
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" 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="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="Oynatma Listesi İndirme" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>İndirme Ayarları</em></td>
|
<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>
|
||||||
<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/audio_format.png" alt="Ses Formatı Seçimi" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="Özel Seçenekler" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>Ses Formatı</em></td>
|
<td align="center"><em>Ses Formatı</em></td>
|
||||||
<td align="center"><em>Özel Seçenekler</em></td>
|
<td align="center"><em>Özel Seçenekler</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
|
<a id="kullanım"></a>
|
||||||
## 📖 Kullanım
|
## 📖 Kullanım
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯 Temel Kullanım</summary>
|
<summary>🎯 Temel Kullanım</summary>
|
||||||
|
|
||||||
1. **YTSage'i başlatın**
|
1. **YTSage'i başlatın**
|
||||||
2. **YouTube URL'sini yapıştırın** (veya "URL'yi yapıştır" düğmesini kullanın)
|
2. **Bir YouTube URL'si yapıştırın** (veya "Paste URL" düğmesini kullanın)
|
||||||
3. **"Analiz Et"i tıklayın**
|
3. **"Analyze" düğmesine tıklayın**
|
||||||
4. **Biçim Seçin:**
|
4. **Formatı Seçin:**
|
||||||
- `Video` video indirmeleri için
|
- Video indirmek için `Video`
|
||||||
- `Audio Only` ses çıkarma için
|
- Sadece ses çıkarmak için `Audio Only`
|
||||||
5. **Seçenekleri seçin:**
|
5. **Seçenekleri Belirleyin:**
|
||||||
- Altyazıları etkinleştirin ve dili seçin
|
- Altyazıları etkinleştirin ve dili seçin
|
||||||
- Altyazı birleştirmeyi etkinleştir
|
- Altyazı birleştirmeyi (Merge subs) etkinleştirin
|
||||||
- Küçük resmi kaydet
|
- Küçük resmi kaydet (Save thumbnail)
|
||||||
- Sponsor segmentlerini kaldırın
|
- Sponsor bölümlerini kaldır (SponsorBlock)
|
||||||
- Açıklamayı kaydet
|
- Açıklamayı kaydet (Save description)
|
||||||
- Bölümleri yerleştir
|
- Bölümleri göm (Embed chapters)
|
||||||
6. **Çıktı Dizinini Seçin**
|
6. **Çıkış Dizinini Seçin**
|
||||||
7. **"İndir"e tıklayın**
|
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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋 Çalma Listesi İndir</summary>
|
<summary>📋 Oynatma Listesi İndirme</summary>
|
||||||
|
|
||||||
1. **Oynatma Listesi URL'sini yapıştırın**
|
1. **Oynatma Listesi URL'sini yapıştırın**
|
||||||
2. **"Analiz Et"i tıklayın**
|
2. **"Analyze" düğmesine tıklayın**
|
||||||
3. **Oynatma seçiciden videoları seçin (isteğe bağlı, varsayılan olarak tümü)**
|
3. **Seçiciden videoları seçin (varsayılan olarak tümü seçilidir)**
|
||||||
4. **İstediğiniz formatı/kaliteyi seçin**
|
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>
|
||||||
|
|
||||||
<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:
|
Nasıl kullanılır:
|
||||||
|
|
||||||
1. `Download Settings`'i açın.
|
1. `Download Settings` bölümünü açın.
|
||||||
2. `Generic Mode`'ı etkinleştirin.
|
2. `Generic Mode` seçeneğini etkinleştirin.
|
||||||
3. Desteklenen YouTube dışı bir video veya oynatma listesi URL'sini yapıştırın.
|
3. YouTube dışındaki desteklenen bir video veya oynatma listesi URL'sini yapıştırın.
|
||||||
4. `Analyze`'a tıklayın.
|
4. `Analyze` düğmesine tıklayın.
|
||||||
5. Bir format seçin ve her zamanki gibi indirin.
|
5. Bir format seçin ve normal şekilde indirin.
|
||||||
|
|
||||||
Notlar:
|
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.
|
- 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 çerezlere, oturum açma oturumuna, proxy'ye veya ekstra yt-dlp argümanlarına ihtiyaç duyar.
|
- Bazı siteler, çıkarıcıya bağlı olarak çerezler, giriş, proxy veya ek yt-dlp argümanları gerektirebilir.
|
||||||
- Bir site başarısız olursa, sorunu bildirmeden önce yerleşik güncelleyici sekmesinden yt-dlp'yi güncelleyin.
|
- Bir site hata verirse, sorun bildirmeden önce entegre güncelleme sekmesinden yt-dlp'yi güncelleyin.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰 Medya ve İndirme Seçenekleri</summary>
|
<summary>🧰 Medya ve İndirme Seçenekleri</summary>
|
||||||
|
|
||||||
- **Altyazı Seçenekleri:** Dilleri filtreleyin ve altyazıları video dosyasına ekleyin
|
- **Altyazı Seçenekleri:** Dilleri filtreleyin ve altyazıları video dosyasına gömün.
|
||||||
- **Altyazı Birleştirme:** Sabit kodlanmış altyazılar için altyazıları video dosyasıyla birleştirin
|
- **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 kaydedin
|
- **Açıklamayı Kaydet:** Video açıklamasını bir metin dosyası olarak kaydeder.
|
||||||
- **Küçük Resmi Kaydet:** Video küçük resmini bir resim dosyası olarak kaydedin
|
- **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 bölüm işaretlerini meta veri olarak gömün
|
- **Bölümleri Göm:** Uyumlu video oynatıcılar için meta veri olarak bölüm işaretlerini ekler.
|
||||||
- **Sponsor Segmentlerini Kaldır:** SponsorBlock'u kullanarak sponsor segmentlerini videodan kaldırın
|
- **Sponsor Bölümlerini Kaldır:** Videodaki sponsorlu bölümleri kaldırmak için SponsorBlock kullanır.
|
||||||
- **Videoyu Kırp:** `HH:MM:SS` biçiminde zaman aralıklarını belirterek videonun yalnızca belirli bölümlerini indirin
|
- **Videoyu Kırp:** Zaman aralığını `SA:DA:SA` formatında belirterek videonun sadece belirli bölümlerini indirin.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<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`
|
- **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 kaydedin. **İndirme Ayarları → İndirme Yolu**'nda mevcuttur.
|
- **İndirme Yolunu Kaydet:** Gelecekteki indirmeler için varsayılan indirme yolunu kaydeder. **Download Settings → Download Path** bölümünde 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.
|
- **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.
|
||||||
- **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.
|
- **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.
|
||||||
- **Ses Normalizasyonu:** EBU R128 kullanarak yalnızca ses indirmeleri için ses düzeyini standartlaştırın.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐 Erişim ve Ağ</summary>
|
<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.
|
- **Çerez ile Giriş:** Özel içeriğe erişmek için çerezleri kullanarak YouTube'da oturum açın.
|
||||||
Nasıl kullanılır:
|
Kullanım:
|
||||||
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.
|
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. Alternatif olarak çerezleri manuel olarak çıkarın:
|
2. İsteğe bağlı 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
|
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
|
b. Çerezleri Netscape formatında kopyalayın.
|
||||||
c. `cookies.txt` adında bir dosya oluşturun ve çerezleri bu dosyaya yapıştırın
|
c. `cookies.txt` adlı bir dosya oluşturun ve çerezleri yapıştırın.
|
||||||
D. Uygulamada `cookies.txt` dosyasını seçin
|
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>`
|
- **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ışı sitelerden analiz yapmasına ve indirme yapmasına izin verin. **İndirme Ayarları → Genel Mod**'dan etkinleştirin.
|
- **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>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️ Araçlar ve Bakım</summary>
|
<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
|
- **Özel Komutlar:** Komut satırı argümanları 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:
|
- **Güncelleme Sekmesi:** Entegre güncelleme araçlarını Özel Seçenekler altındaki tek bir 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
|
- **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 Denetleyicisi:** FFmpeg sürümünüzü kontrol edin ve kurulum kılavuzlarını açın
|
- **FFmpeg Sürüm Kontrolü:** 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
|
- **Deno Güncelleme:** 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.
|
- **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:** **Geçmiş** düğmesinden geçmiş indirmeleri küçük resimler ve durumlarla birlikte görüntüleyin.
|
- **İndirme Geçmişi:** **History** düğmesi aracılığıyla küçük resimler ve durumlarla birlikte geçmiş indirmeleri görün.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍 Yerelleştirme</summary>
|
<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
|
### Desteklenen Diller
|
||||||
|
|
||||||
@@ -360,7 +366,7 @@ YTSage, dünya çapında erişilebilirlik için **14 dili** destekler. **Özel S
|
|||||||
|
|
||||||
| Dil | Dosya | Dil | Dosya |
|
| 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) |
|
| 🇸🇦 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) |
|
| 🇩🇪 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) |
|
| 🇮🇩 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) |
|
| 🇧🇷 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) |
|
| 🇹🇷 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>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="sorun-giderme"></a>
|
||||||
## 🛠️ Sorun giderme
|
## 🛠️ Sorun Giderme
|
||||||
|
|
||||||
<details>
|
<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.
|
- **Format tablosu görünmüyor:** yt-dlp'yi en son sürüme güncelleyin ve yt-dlp Nightly kanalına geçmeyi deneyin.
|
||||||
- **İndirme başarısız oluyor:** İnternet bağlantınızı kontrol edin ve videonun mevcut olduğundan emin olun.
|
- **İndirme başarısız oldu:** İnternet bağlantınızı kontrol edin ve videonun erişilebilir olduğundan emin olun.
|
||||||
- **Belirli indirme hataları:**
|
- **Belirli İndirme Hataları:**
|
||||||
- **Özel videolar:** Özel içeriğe erişmek için çerez kimlik doğrulamasını kullanın.
|
- **Ö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.
|
- **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 olarak engellenen videolar:** Bölgesel kısıtlamaları aşmak için bir VPN kullanmayı düşünün.
|
- **Coğrafi Engelli 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.
|
- **Video Kaldırıldı:** Video artık YouTube'da mevcut değildir.
|
||||||
- **Canlı yayınlar:** Canlı yayınlar indirilemez; akışın bitmesini bekleyin.
|
- **Canlı Yayınlar:** Canlı yayınlar yayınlanırken indirilemez; yayın bitene kadar bekleyin.
|
||||||
- **Ağ hataları:** İnternet bağlantınızı kontrol edip tekrar deneyin.
|
- **Ağ Hataları:** İnternet bağlantınızı kontrol edin ve tekrar deneyin.
|
||||||
- **Geçersiz URL'ler:** URL'nin doğru olduğundan ve desteklenen bir platforma ait olduğundan emin olun.
|
- **Geçersiz URL:** URL'nin doğru olduğundan ve desteklenen bir platforma ait olduğundan emin olun.
|
||||||
- **Premium içerik:** YouTube Premium üyeliği gerektirir.
|
- **Premium İçerik:** YouTube Premium aboneliği gerektirir.
|
||||||
- **Telif hakkı engellemeleri:** İçerik, telif hakkı kısıtlamaları nedeniyle engellenmiştir.
|
- **Telif Hakkı Engeli:** İç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.
|
- **İ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 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.
|
- **Çö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ı
|
#### 🛡️ 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:**
|
**Neden olur:**
|
||||||
- Antivirüs buluşsal yöntemleri, paketlenmiş yürütülebilir dosyaları şüpheli olarak yanlış tanımlayabilir
|
- Antivirüs sezgiselleri paketlenmiş yürütülebilir dosyaları hatalı bir şekilde şüpheli olarak tanımlayabilir.
|
||||||
|
|
||||||
**Güvenli alternatifler:**
|
**Güvenli Seçenekler:**
|
||||||
- ✅ **Pip kurulumunu kullanın:** `pip install ytsage` (önerilir)
|
- ✅ **pip kurulumunu kullanın:** `pip install ytsage` (önerilir)
|
||||||
- ✅ **Kaynaktan oluşturun**: bunu takip ederek [guide](../.github/CI_CD_README.md)
|
- ✅ **Kaynaktan derleyin**: Bu [kılavuzu](.github/CI_CD_README.md) takip ederek
|
||||||
- ✅ **Uygulamayı antivirüs yazılımınızda beyaz listeye alın**
|
- ✅ **Uygulamayı antivirüs yazılımınızın beyaz listesine ekleyin**.
|
||||||
|
|
||||||
#### 🍎 macOS: "Uygulama hasarlı ve açılamıyor"
|
#### 🍎 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).
|
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:
|
2. **Aşağıdaki komutu yazın**, ancak henüz Enter tuşuna **BASMAYIN**. Sonundaki boşluğu eklediğinizden emin olun:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
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.
|
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.
|
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.
|
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`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<a id="sponsor-olun"></a>
|
||||||
## 💖 Sponsor
|
## 💖 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
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- Sponsor bağlantısına doğrudan uygulamanın içindeki Hakkında iletişim kutusundan da ulaşılabilir.
|
- Sponsorluk bağlantısı uygulamadaki Hakkında diyaloğu üzerinden doğrudan mevcuttur.
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="katkıda-bulunma"></a>
|
||||||
## 👥 Katkıda Bulunmak
|
## 👥 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:
|
2. 🌿 Özellik dalınızı oluşturun:
|
||||||
```bash
|
```bash
|
||||||
git checkout -b feature/AmazingFeature
|
git checkout -b feature/AmazingFeature
|
||||||
```
|
```
|
||||||
3. 💾 Değişikliklerinizi gerçekleştirin:
|
3. 💾 Değişikliklerinizi commit'leyin:
|
||||||
```bash
|
```bash
|
||||||
git commit -m 'Add some AmazingFeature'
|
git commit -m ' AmazingFeature Ekle'
|
||||||
```
|
```
|
||||||
4. 📤 Şubeye itin:
|
4. 📤 Dalı push'layın:
|
||||||
```bash
|
```bash
|
||||||
git push origin feature/AmazingFeature
|
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`)
|
- İlgili yerelleştirilmiş README dosyasını güncelleyin (örn: `readme-translations/README.tr.md`)
|
||||||
- `ytsage/languages/<code>.json` düzenleyerek uygulama dizelerini senkronize tutun
|
- Uygulama dizelerini `ytsage/languages/<code>.json` dosyasını düzenleyerek senkronize tutun
|
||||||
- Diliniz eksikse `README.md`'den başlayın ve `README.<code>.md`'i oluşturun
|
- Diliniz eksikse, `README.md` dosyasından başlayın ve `README.<code>.md` dosyasını oluşturun
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂 Proje Yapısı</summary>
|
<summary>📂 Proje Yapısı</summary>
|
||||||
|
|
||||||
## YTSage - Proje Yapısı
|
## 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/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # GitHub konfigürasyonları
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # Sorun şablonları
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ │ └── 🐛-bug-report.md # Hata raporu şablonu
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
│ ├─── 📁 workflows/ # GitHub Actions iş akışları
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ │ ├── build-linux.yml # Linux derleme akışı
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ │ ├── build-macos.yml # macOS derleme akışı
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ │ │── build-windows.yml # Windows derleme akışı
|
||||||
| | └── release-all.yml # Master release workflow
|
| | └── release-all.yml # Ana yayın akışı
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
│ └── 📄 CI_CD_README.md # CI/CD dökümantasyonu
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📁 branding/ # Marka varlıkları (ekran görüntüleri, SVG'ler)
|
||||||
│ ├── 📁 icons/ # Application icons
|
│ ├── 📁 icons/ # Uygulama ikonları
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
│ ├── 📁 screenshots/ # Dökümantasyon için ekran görüntüleri
|
||||||
│ └── 📁 svg/ # SVG assets
|
│ └── 📁 svg/ # SVG varlıkları
|
||||||
├── 📄 LICENSE # License file
|
├── 📄 LICENSE # Lisans dosyası
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📄 pyproject.toml # Proje metadatası ve bağımlılıklar
|
||||||
├── 📄 README.md # Project documentation
|
├── 📄 README.md # Proje dökümantasyonu
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📄 requirements.txt # Python bağımlılıkları (dev)
|
||||||
└── 📁 ytsage/ # Source package
|
└── 📁 ytsage/ # Kaynak kod paketi
|
||||||
├── 📁 assets/ # Runtime assets
|
├── 📁 assets/ # Çalışma zamanı varlıkları
|
||||||
│ ├── 📁 Icon/ # Application icons
|
│ ├── 📁 Icon/ # Uygulama ikonları
|
||||||
│ └── 📁 sound/ # Audio files
|
│ └── 📁 sound/ # Ses dosyaları
|
||||||
├── 📁 languages/ # Localization files
|
├── 📁 languages/ # Yerelleştirme dosyaları
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
│ ├── 📄 ar.json # Arapça çeviri
|
||||||
│ ├── 📄 de.json # German translation
|
│ ├── 📄 de.json # Almanca çeviri
|
||||||
│ ├── 📄 en.json # English translation
|
│ ├── 📄 en.json # İngilizce çeviri
|
||||||
│ └── ... # Other languages
|
│ └── ... # Diğer diller
|
||||||
├── 📁 core/ # Core business logic
|
├── 📁 core/ # Temel iş mantığı
|
||||||
│ ├── 📄 __init__.py # Core package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
│ ├── 📄 ytsage_deno.py # Deno entegrasyonu
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
│ ├── 📄 ytsage_downloader.py # İndirme işlevselliği
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg entegrasyonu
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
│ ├── 📄 ytsage_utils.py # Yardımcı fonksiyonlar
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
│ └── 📄 ytsage_yt_dlp.py # yt-dlp entegrasyonu
|
||||||
├── 📁 gui/ # User interface components
|
├── 📁 gui/ # Kullanıcı arayüzü bileşenleri
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
│ ├── 📄 ytsage_gui_main.py # Ana uygulama penceresi
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
│ └── 📁 ytsage_gui_dialogs/ # Diyalog sınıfları
|
||||||
├── 📁 utils/ # Utility modules
|
├── 📁 utils/ # Yardımcı modüller
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
│ ├── 📄 __init__.py
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
│ ├── 📄 ytsage_config_manager.py # Yapılandırma yönetimi
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
│ └── 📄 ytsage_logger.py # Günlük tutma araçları
|
||||||
├── 📄 __init__.py # Package entry point
|
├── 📄 __init__.py # Paket giriş noktası
|
||||||
└── 📄 main.py # Main execution script
|
└── 📄 main.py # Ana yürütme scripti
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ Yıldız Tarihi
|
## ⭐️ Yıldız Geçmişi
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## Yıldız Geçmişi
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -540,7 +546,7 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 Lisans
|
## 📜 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
|
## 🙏 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">
|
<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>
|
<table>
|
||||||
<tr class="section"><th colspan="2">Temel Bileşenler</th></tr>
|
<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>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">Deno</a></td>
|
<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>
|
||||||
<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>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>GUI Çerçevesi</td>
|
<td>GUI Framework</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">Yastık</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>Görüntü İşleme</td>
|
<td>Resim İşleme</td>
|
||||||
</tr>
|
</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>
|
<td>HTTP İstekleri</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">paketleme</a></td>
|
<td><a href="https://packaging.python.org/">packaging</a></td>
|
||||||
<td>Versiyon ve Paket İşleme</td>
|
<td>Sürüm ve Paket Yönetimi</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
<td><a href="https://python-markdown.github.io/">markdown</a></td>
|
||||||
<td>Markdown Oluşturma</td>
|
<td>Markdown İşleme</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<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>
|
||||||
<tr class="section"><th colspan="2">Varlıklar ve Katkıda Bulunanlar</th></tr>
|
<tr class="section"><th colspan="2">Varlıklar ve Katkıda Bulunanlar</th></tr>
|
||||||
<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>
|
<td>Bildirim Sesi</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>Kod Katılımcısı</td>
|
<td>Kod Katkıda Bulunan</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -604,14 +611,14 @@ Bu proje MIT Lisansı kapsamında lisanslıdır; ayrıntılar için [LICENSE](..
|
|||||||
|
|
||||||
</details>
|
</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">
|
<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>
|
</div>
|
||||||
|
|||||||
+275
-316
@@ -1,85 +1,86 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src="../branding/svg/ytsage-wordmark.svg" width="400" alt="ytsage-wordmark">
|
<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 界面"/>
|
||||||
|
|
||||||
[](https://www.python.org/downloads/)
|
[](https://www.python.org/downloads/)
|
||||||
[](https://pepy.tech/project/ytsage)
|
[](https://pepy.tech/project/ytsage)
|
||||||
[](https://github.com/oop7/YTSage/releases)
|
[](https://github.com/oop7/YTSage/releases)
|
||||||
[](https://opensource.org/licenses/MIT)
|
[](https://opensource.org/licenses/MIT)
|
||||||
[](https://github.com/oop7/YTSage/releases)
|
[](https://github.com/oop7/YTSage/releases)
|
||||||
[](https://github.com/oop7/YTSage/stargazers)
|
[](https://github.com/oop7/YTSage/stargazers)
|
||||||
[](https://pypi.org/project/ytsage/)
|
[](https://pypi.org/project/ytsage/)
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
**具有干净 PySide6 界面的现代 YouTube 下载器。**
|
**一款现代、整洁、基于 PySide6 的 YouTube 下载器。**
|
||||||
下载任何质量的视频、提取音频、获取字幕等等。
|
支持下载任意质量的视频、提取音频、获取字幕等更多功能。
|
||||||
|
|
||||||
### 🌍 自述文件语言
|
### 🌍 README 语言
|
||||||
|
|
||||||
英文:[EN](../README.md)
|
英语: [EN](../README.md)
|
||||||
|巴黎: [AR](README.ar.md)
|
| 阿拉伯语: [AR](README.ar.md)
|
||||||
|德语:[DE](README.de.md)
|
| 德语: [DE](README.de.md)
|
||||||
|西班牙语:[ES](README.es.md)
|
| 西班牙语: [ES](README.es.md)
|
||||||
|法语:[FR](README.fr.md)
|
| 法语: [FR](README.fr.md)
|
||||||
|编号:[HI](README.hi.md)
|
| 印地语: [HI](README.hi.md)
|
||||||
|印度尼西亚语:[ID](README.id.md)
|
| 印尼语: [ID](README.id.md)
|
||||||
|意大利语:[IT](README.it.md)
|
| 意大利语: [IT](README.it.md)
|
||||||
| 日本语:[JA](README.ja.md)
|
| 日语: [JA](README.ja.md)
|
||||||
|波兰斯基:[PL](README.pl.md)
|
| 波兰语: [PL](README.pl.md)
|
||||||
|葡萄牙语:[PT](README.pt.md)
|
| 葡萄牙语: [PT](README.pt.md)
|
||||||
| Русский: [RU](README.ru.md)
|
| 俄语: [RU](README.ru.md)
|
||||||
|土耳其:[TR](README.tr.md)
|
| 土耳其语: [TR](README.tr.md)
|
||||||
| 中文: [ZH](README.zh.md)
|
| 中文: [ZH](README.zh.md)
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="#installation">安装</a> •
|
<a href="#安装">安装</a> •
|
||||||
<a href="#features">特点</a> •
|
<a href="#功能">功能</a> •
|
||||||
<a href="#usage">使用</a> •
|
<a href="#使用说明">使用说明</a> •
|
||||||
<a href="#screenshots">屏幕截图</a> •
|
<a href="#屏幕截图">屏幕截图</a> •
|
||||||
<a href="#troubleshooting">故障排除</a> •
|
<a href="#故障排除">故障排除</a> •
|
||||||
<a href="#sponsor">赞助商</a> •
|
<a href="#赞助支持">赞助支持</a> •
|
||||||
<a href="#contributing">贡献</a>
|
<a href="#贡献">贡献</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a id="why-ytsage"></a>
|
<a id="为什么选择-ytsage"></a>
|
||||||
## ❓ 为什么选择 YTSage?
|
## ❓ 为什么选择 YTSage?
|
||||||
|
|
||||||
YTSage 专为想要**简单但功能强大的 YouTube 下载器**的用户而设计。与其他工具不同,它提供:
|
YTSage 专为寻找 **简单但强大** 的 YouTube 下载器的用户而设计。与其他工具不同,它提供:
|
||||||
|
|
||||||
- 干净、现代的 PySide6 界面
|
- 现代、整洁的 PySide6 用户界面
|
||||||
- 视频、音频和字幕一键下载
|
- 一键下载视频、音频和字幕
|
||||||
- SponsorBlock、字幕合并和播放列表选择等高级功能
|
- 支持 SponsorBlock、字幕合并和播放列表选择等高级功能
|
||||||
- 适用于 YouTube 以外支持 yt-dlp 的网站的可选通用模式
|
- 可选的“通用模式”,支持 yt-dlp 兼容的其他非 YouTube 网站
|
||||||
- 跨平台支持且易于安装
|
- 跨平台支持,安装简单
|
||||||
|
|
||||||
<a id="features"></a>
|
<a id="功能"></a>
|
||||||
## ✨ 特点
|
## ✨ 功能
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
|核心特点|高级功能 |额外功能 |
|
| 核心功能 | 高级功能 | 更多功能 |
|
||||||
|------------------------------------------------|--------------------------------------------------------|------------------------------------|
|
|-----------------------------------|-----------------------------------------|------------------------------------|
|
||||||
| 🎥 格式化表格 | 🚫 SponsorBlock 集成 | 🎞️ FPS/HDR 显示 |
|
| 🎥 格式选择列表 | 🚫 集成 SponsorBlock | 🎞️ FPS / HDR 显示 |
|
||||||
| 🎵 音频提取 | 📝 多字幕选择和合并 | 🔄 自动更新 yt-dlp |
|
| 🎵 音频提取 | 📝 字幕选择与合并 | 🔄 yt-dlp 自动更新 |
|
||||||
| ✨ 简单的用户界面 | 💾 保存描述和缩略图 | 🛠️ FFmpeg/yt-dlp/Deno 检测 |
|
| ✨ 现代 UI 体验 | 💾 保存描述与缩略图 | 🛠️ FFmpeg/yt-dlp/Deno 检测 |
|
||||||
| 📋 播放列表支持和选择器 | 🚀 限速器 | ⚙️ 自定义命令 |
|
| 📋 播放列表支持与选择 | 🚀 下载限速 | ⚙️ 自定义参数支持 |
|
||||||
| 📑 嵌入章节 | ✂️ 修剪视频部分 | 🍪 使用 Cookie 登录 |
|
| 📑 视频列表集成 | ✂️ 视频剪辑 | 🍪 Cookie 登录集成 |
|
||||||
| 📜 下载历史记录 | 🔄 发布渠道选择 | 🌐 代理支持 |
|
| 📜 下载历史记录 | 🔄 更新版本分支选择 | 🌐 代理支持 |
|
||||||
| 🎚️ 音频格式转换 | 🎬 视频格式设置 | 🆙 内置更新程序选项卡 |
|
| 🎚️ 音频格式转换 | 🎬 视频格式设置 | 🆙 内置更新页签 |
|
||||||
| 🌍 通用模式 | 🔊 音频标准化 (EBU R128) | 🌍 14 种语言本地化 |
|
| 🌍 通用模式 | 🔊 音频归一化 (EBU R128) | 🌍 支持 14 种语言 |
|
||||||
|
| 💾 播放列表导出 | ⚙️ 默认质量与字幕设置 | |
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a id="installation"></a>
|
<a id="安装"></a>
|
||||||
## 🚀 安装
|
## 🚀 安装
|
||||||
|
|
||||||
### ⚡ 快速安装(推荐)
|
### ⚡ 快速安装 (推荐)
|
||||||
|
|
||||||
从 PyPI 安装 YTSage:
|
通过 PyPI 安装 YTSage:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install ytsage
|
pip install ytsage
|
||||||
@@ -94,60 +95,60 @@ pip install --upgrade ytsage
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
然后启动应用程序:
|
然后通过以下命令运行:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ytsage
|
ytsage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 📦 预构建的可执行文件
|
### 📦 独立可执行文件
|
||||||
|
|
||||||
> [👉 Download Latest Release](https://github.com/oop7/YTSage/releases/latest)
|
> [👉 下载最新版本](https://github.com/oop7/YTSage/releases/latest)
|
||||||
|
|
||||||
#### 🪟 Windows
|
#### 🪟 Windows
|
||||||
|
|
||||||
|格式|描述 |
|
| 格式 | 说明 |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  |标准安装程序 |
|
|  | 标准安装程序 |
|
||||||
|  |与 FFmpeg 捆绑 |
|
|  | 包含 FFmpeg 的安装程序 |
|
||||||
|  |便携版,无需安装|
|
|  | 便携版 (无需安装) |
|
||||||
|  |带有 FFmpeg 的便携式,压缩 |
|
|  | 包含 FFmpeg 的便携版 (ZIP) |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️安装步骤</summary>
|
<summary>🛠️ 安装步骤</summary>
|
||||||
|
|
||||||
1. **EXE 安装程序 (`.exe`)**:双击该文件并按照安装向导进行操作。
|
1. **EXE 安装程序 (`.exe`)**: 双击并按照安装向导进行操作。
|
||||||
2. **便携式版本(`.zip`)**:将存档解压到您所需的位置并运行`ytsage.exe`。
|
2. **便携版 (`.zip`)**: 解压到所需位置并运行 `ytsage.exe`。
|
||||||
3. **FFmpeg Bundled**:如果您的系统上没有安装 FFmpeg,请选择 FFmpeg 捆绑版本。
|
3. **内置 FFmpeg**: 如果系统没有安装 FFmpeg,请选择带 `-ffmpeg` 的版本。
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
#### 🐧 Linux
|
#### 🐧 Linux
|
||||||
|
|
||||||
|格式|描述 |
|
| 格式 | 说明 |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Debian 软件包 |
|
|  | Debian 软件包 |
|
||||||
|  | AppImage,便携式|
|
|  | 便携 AppImage |
|
||||||
|  |转包 |
|
|  | RPM 软件包 |
|
||||||
|  | Flatpak 捆绑包 |
|
|  | Flatpak 软件包 |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️安装步骤</summary>
|
<summary>🛠️ 安装步骤</summary>
|
||||||
|
|
||||||
- **DEB (`.deb`)**:
|
- **DEB (`.deb`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo dpkg -i ytsage_*.deb
|
sudo dpkg -i ytsage_*.deb
|
||||||
sudo apt-get install -f # Fix missing dependencies if any
|
sudo apt-get install -f # 如有依赖问题请运行
|
||||||
```
|
```
|
||||||
- **转速(`.rpm`)**:
|
- **RPM (`.rpm`)**:
|
||||||
```bash
|
```bash
|
||||||
sudo rpm -i ytsage-*.rpm
|
sudo rpm -i ytsage-*.rpm
|
||||||
```
|
```
|
||||||
- **应用程序图像(`.AppImage`)**:
|
- **AppImage (`.AppImage`)**:
|
||||||
```bash
|
```bash
|
||||||
chmod +x YTSage-*.AppImage
|
chmod +x YTSage-*.AppImage
|
||||||
./YTSage-*.AppImage
|
./YTSage-*.AppImage
|
||||||
```
|
```
|
||||||
- **Flatpak**:按照 Flathub 上的说明进行操作或运行:
|
- **Flatpak**: 按照 Flathub 的说明或运行:
|
||||||
```bash
|
```bash
|
||||||
flatpak install flathub io.github.oop7.ytsage
|
flatpak install flathub io.github.oop7.ytsage
|
||||||
```
|
```
|
||||||
@@ -155,47 +156,47 @@ ytsage
|
|||||||
|
|
||||||
#### 🍎 macOS
|
#### 🍎 macOS
|
||||||
|
|
||||||
|格式|描述 |
|
| 格式 | 说明 |
|
||||||
|--------|-------------|
|
|--------|-------------|
|
||||||
|  | Apple Silicon 的压缩应用程序 |
|
|  | Apple Silicon 专用 ZIP 压缩包 |
|
||||||
|  | Apple Silicon 的磁盘映像安装程序 |
|
|  | Apple Silicon 专用 DMG 安装程序 |
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️安装步骤</summary>
|
<summary>🛠️ 安装步骤</summary>
|
||||||
|
|
||||||
- **DMG 安装程序 (`.dmg`)**:双击安装,然后将 `YTSage.app` 拖到您的应用程序文件夹中。
|
- **DMG 安装程序 (`.dmg`)**: 双击挂载,然后将 `YTSage.app` 拖入 Applications 文件夹。
|
||||||
- **应用程序存档 (`.zip`)**:解压 zip 并将 `YTSage.app` 移动到您的应用程序文件夹。
|
- **ZIP 应用包 (`.zip`)**: 解压并移动 `YTSage.app` 到 Applications 文件夹。
|
||||||
|
|
||||||
*注意:如果您遇到“应用程序已损坏”错误,请参阅下面的[macOS troubleshooting section](#troubleshooting)。*
|
*注意:如果遇到“应用已损坏”的提示,请参阅下方的 macOS 解决办法。*
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>💻从源手动安装</summary>
|
<summary>💻 从源码手动安装</summary>
|
||||||
|
|
||||||
### 1.克隆存储库
|
### 1. 克隆仓库
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/oop7/YTSage.git
|
git clone https://github.com/oop7/YTSage.git
|
||||||
cd YTSage
|
cd YTSage
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2.安装依赖项
|
### 2. 安装依赖
|
||||||
|
|
||||||
#### ⚡ 有紫外线
|
#### ⚡ 使用 uv
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
uv pip install .
|
uv pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 📦 或使用标准点
|
#### 📦 或使用标准 pip
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. 运行应用程序
|
### 3. 运行程序
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python -m ytsage.main
|
python -m ytsage.main
|
||||||
@@ -203,330 +204,289 @@ python -m ytsage.main
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="screenshots"></a>
|
<a id="屏幕截图"></a>
|
||||||
## 📸 截图
|
## 📸 屏幕截图
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><img src="../branding/screenshots/Download-Settings.png" alt="Download Settings" width="400"/></td>
|
<td><img src="../branding/screenshots/Download-Settings.png" alt="下载设置" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/playlist.png" alt="Playlist Download" width="400"/></td>
|
<td><img src="../branding/screenshots/playlist.png" alt="播放列表下载" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>下载设置</em></td>
|
<td align="center"><em>下载设置</em></td>
|
||||||
<td align="center"><em>播放列表下载</em></td>
|
<td align="center"><em>播放列表列表</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<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/audio_format.png" alt="音频格式选择" width="400"/></td>
|
||||||
<td><img src="../branding/screenshots/Custom-Option.png" alt="Custom Options" width="400"/></td>
|
<td><img src="../branding/screenshots/Custom-Option.png" alt="自定义选项" width="400"/></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center"><em>音频格式</em></td>
|
<td align="center"><em>音频格式设置</em></td>
|
||||||
<td align="center"><em>自定义选项</em></td>
|
<td align="center"><em>自定义选项</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div><a id="usage"></a>
|
</div>
|
||||||
|
|
||||||
## 📖 用法
|
<a id="使用说明"></a>
|
||||||
|
## 📖 使用说明
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🎯基本用法</summary>
|
<summary>🎯 基本使用方法</summary>
|
||||||
|
|
||||||
1. **启动 YTSage**
|
1. **运行 YTSage**
|
||||||
2. **粘贴 YouTube URL**(或使用“粘贴 URL”按钮)
|
2. **粘贴 YouTube 地址** (或点击 "Paste URL")
|
||||||
3. **点击“分析”**
|
3. **点击 "Analyze" (分析)**
|
||||||
4. **选择格式:**
|
4. **选择下载模式:**
|
||||||
- `Video` 用于视频下载
|
- `Video` 下载视频
|
||||||
- `Audio Only` 用于音频提取
|
- `Audio Only` 仅提取音频
|
||||||
5. **选择选项:**
|
5. **配置下载项:**
|
||||||
- 启用字幕并选择语言
|
- 启用字幕并选择语言
|
||||||
- 启用字幕合并
|
- 启用字幕合并 (Merge)
|
||||||
- 保存缩略图
|
- 保存缩略图 (Save Thumbnail)
|
||||||
- 删除赞助商部分
|
- 启用赞助内容跳过 (SponsorBlock)
|
||||||
- 保存描述
|
- 下载描述文本 (Save Description)
|
||||||
- 嵌入章节
|
- 嵌入视频章节 (Embed Chapters)
|
||||||
6. **选择输出目录**
|
6. **选择路径**
|
||||||
7. **点击“下载”**
|
7. **点击 "Download" (下载)**
|
||||||
|
|
||||||
> 💡 默认下载目录是用户的“Downloads”文件夹。
|
> 💡 默认下载到系统的“下载”文件夹。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📋播放列表下载</summary>
|
<summary>📋 下载播放列表</summary>
|
||||||
|
|
||||||
1. **粘贴播放列表 URL**
|
1. **粘贴播放列表地址**
|
||||||
2. **点击“分析”**
|
2. **添加并分析**
|
||||||
3. **从播放列表选择器中选择视频(可选,默认为全部)**
|
3. **在弹出窗口中选择视频 (默认全选)**
|
||||||
4. **选择所需的格式/质量**
|
4. **设置质量方案**
|
||||||
5. **点击“下载”**
|
5. **开始下载**
|
||||||
|
|
||||||
> 💡 应用程序自动处理下载队列
|
> 💡 程序会自动管理下载队列。您可以将列表导出为 `.txt`, `.csv`, `.m3u` 或 `.json` 格式。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍非 YouTube 网站的通用模式</summary>
|
<summary>🌍 非 YouTube 网站 (通用模式)</summary>
|
||||||
|
|
||||||
当您希望 YTSage 接受来自 yt-dlp 支持的网站(例如 Dailymotion、CBC Gem、TikTok 等)的 URL 时,请使用通用模式。
|
当您想从被 yt-dlp 支持的其他网站(如 TikTok、Dailymotion 等)下载时,请开启通用模式。
|
||||||
|
|
||||||
使用方法:
|
如何使用:
|
||||||
|
|
||||||
1. 打开`Download Settings`。
|
1. 打开 `Download Settings` (下载设置)。
|
||||||
2. 启用`Generic Mode`。
|
2. 启用 `Generic Mode` (通用模式)。
|
||||||
3. 粘贴受支持的非 YouTube 视频或播放列表 URL。
|
3. 输入非 YouTube 的支持网站链接。
|
||||||
4. 单击`Analyze`。
|
4. 点击 `Analyze` (分析)。
|
||||||
5. 选择格式并照常下载。
|
5. 正常下载。
|
||||||
|
|
||||||
注意事项:
|
说明:
|
||||||
|
|
||||||
- 通用模式仅更改 YTSage 内的 URL 验证。您安装的 yt-dlp 版本仍必须支持目标站点。
|
- 通用模式仅关闭了 YTSage 内部的 URL 类型检查。网站支持程度仍取决于您安装的 yt-dlp。
|
||||||
- 某些站点需要 cookie、登录会话、代理或额外的 yt-dlp 参数,具体取决于提取器。
|
- 有些站点可能需要特定的 Cookie 或代理配置。
|
||||||
- 如果站点出现故障,请先从内置更新程序选项卡更新 yt-dlp,然后再报告问题。
|
- 如果某个网站无法分析,请先在内置更新程序中更新 yt-dlp。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🧰媒体和下载选项</summary>
|
<summary>🧰 媒体与下载选项</summary>
|
||||||
|
|
||||||
- **字幕选项:** 过滤语言并将字幕嵌入到视频文件中
|
- **字幕选项:** 过滤特定语言并支持嵌入到视频中。
|
||||||
- **字幕合并:** 将字幕合并到视频文件中以获取硬编码字幕
|
- **字幕合并:** 将字幕“烧录”到视频中(硬字幕)。
|
||||||
- **保存描述:** 将视频描述保存为文本文件
|
- **保存描述:** 将视频描述保存为独立的文本文档。
|
||||||
- **保存缩略图:** 将视频缩略图保存为图像文件
|
- **保存缩略图:** 下载视频的高清封面。
|
||||||
- **嵌入章节:** 将章节标记嵌入为兼容视频播放器的元数据
|
- **嵌入章节:** 允许将视频章节标记写入媒体元数据。
|
||||||
- **删除赞助商片段:** 使用 SponsorBlock 从视频中删除赞助商片段
|
- **赞助商跳过:** 配合 SponsorBlock 自动跳过或剪辑掉广告段落。
|
||||||
- **修剪视频:** 通过以 `HH:MM:SS` 格式指定时间范围,仅下载视频的特定部分
|
- **视频剪裁:** 输入 `HH:MM:SS` 时间点来实现部分下载。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>⚙️输出和文件设置</summary>
|
<summary>⚙️ 文件与输出设置</summary>
|
||||||
|
|
||||||
- **限速器:**限制下载速度,例如`500K`为500 KB/s
|
- **下载限速:** 输入如 `500K` 表示限制为 500 KB/s。
|
||||||
- **保存下载路径:** 保存默认下载路径以供将来下载。在**下载设置→下载路径**中可用。
|
- **保存路径:** 在 **Download Settings → Download Path** 中保存您的默认位置。
|
||||||
- **输出文件名格式:** 使用`%(title)s`、`%(uploader)s`和`%(resolution)s`等变量自定义输出文件名格式。在**下载设置 → 文件名格式**中可用。- **强制输出格式:** 强制视频下载为特定容器格式,例如`mp4`、`webm`或`mkv`。在**下载设置 → 输出格式设置**中可用。
|
- **默认分辨率:** 设置您首选的清晰度(如 1080p, 720p)。
|
||||||
- **音频格式转换:** 将纯音频下载转换为首选格式,例如 `AAC`、`MP3`、`FLAC`、`WAV`、`Opus`、`M4A`、 `Vorbis`,或`Best`。在**下载设置 → 音频格式设置**中可用。
|
- **默认字幕语言:** 输入语言代码(如 `zh,en`)来自动选择默认字幕。
|
||||||
- **音频归一化:** 使用 EBU R128 标准化纯音频下载的音量。
|
- **文件命名模板:** 通过 `%(title)s` 等变量自定义文件名格式。
|
||||||
|
- **强制输出格式:** 强制转换输出容器,如 `mp4`, `webm` 或 `mkv`。
|
||||||
|
- **音频转换:** 将音频转换为 `AAC`, `MP3`, `FLAC` 等格式。
|
||||||
|
- **音量归一化:** 使用 EBU R128 标准使下载的音量均衡。
|
||||||
|
- **多线程连接:** 设置 **Concurrent Connections** 为 8-10 以最大化下载速度。
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌐接入和网络</summary>
|
<summary>🌐 进阶访问与网络</summary>
|
||||||
|
|
||||||
- **使用 Cookie 登录:** 使用 Cookie 登录 YouTube 以访问私人内容。
|
- **Cookie 登录:** 允许通过 Cookie 下载私人内容或绕过限制。
|
||||||
使用方法:
|
推荐方法:
|
||||||
1. **推荐:** 使用应用程序中的内置`Extract cookies from browser`选项,然后选择您的浏览器和可选的配置文件。
|
1. 在设置中点击 `Extract cookies from browser`,选择您的浏览器。
|
||||||
2. 或者,手动提取 cookie:
|
2. 或:导出 Netscape 格式的 `cookies.txt` 文件并手动载入。
|
||||||
a.使用类似 [cookie-editor](https://github.com/moustachauve/cookie-editor?tab=readme-ov-file) 的扩展程序从浏览器导出 cookie
|
- **代理支持:** 支持设置 HTTP 代理,例如 `http://127.0.0.1:8080`。
|
||||||
b.以 Netscape 格式复制 cookie
|
|
||||||
c.创建一个名为 `cookies.txt` 的文件并将 cookie 粘贴到其中
|
|
||||||
d.在应用程序中选择`cookies.txt`文件
|
|
||||||
- **代理支持:** 使用代理服务器进行下载,例如`http://<proxy-server>:<port>`
|
|
||||||
- **通用模式:** 允许 YTSage 从 yt-dlp 支持的非 YouTube 网站分析和下载。从**下载设置 → 通用模式**启用它。
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🛠️工具与维护</summary>
|
<summary>🛠️ 系统工具与维护</summary>
|
||||||
|
|
||||||
- **自定义命令:** 通过命令行参数访问高级 yt-dlp 功能
|
- **自定义参数:** 为 yt-dlp 传递特定的命令行参数。
|
||||||
- **更新程序选项卡:** 从自定义选项中的一处管理内置更新工具:
|
- **内置更新器:** (在 Custom Options 中)
|
||||||
- **yt-dlp 更新:** 检查更新并在稳定版和夜间发布频道之间切换
|
- **yt-dlp 更新:** 在稳定版和测试版之间切换。
|
||||||
- **FFmpeg 版本检查器:** 检查您的 FFmpeg 版本并打开安装指南
|
- **FFmpeg 检测:** 验证安装路劲。
|
||||||
- **Deno 更新:** 检查并更新 Deno 运行时
|
- **Deno 更新:** 维护相关的集成环境。
|
||||||
- **FFmpeg/yt-dlp/Deno 检测:** 从“关于”对话框中自动检测 FFmpeg、yt-dlp 和 Deno 路径和版本。
|
- **下载历史:** 管理您的所有下载历史记录,包含缩略图和状态。
|
||||||
- **下载历史记录:** 通过“**历史记录**”按钮查看过去的下载,其中包含缩略图和状态。
|
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>🌍本地化</summary>
|
<summary>🌍 语言支持</summary>
|
||||||
|
|
||||||
YTSage 支持**14 种语言**,可在全球范围内访问。从**自定义选项 → 语言**中选择您的首选语言。
|
YTSage 支持 **14 种语言**。您可以在 **Custom Options → Language** 中更改。
|
||||||
|
|
||||||
### 支持的语言
|
### 支持的界面语言
|
||||||
|
|
||||||
|语言 |代码|语言 |代码|
|
| 语言 | 代码 | 语言 | 代码 |
|
||||||
|----------|------|----------|------|
|
|----------|------|----------|------|
|
||||||
| 🇺🇸 英语 | `en` | 🇪🇸 西班牙语 | `es` |
|
| 🇺🇸 英语 | `en` | 🇪🇸 西班牙语 | `es` |
|
||||||
| 🇸🇦 阿拉伯语 | `ar` | 🇫🇷 法语 | `fr` |
|
| 🇸🇦 阿拉伯语 | `ar` | 🇫🇷 法语 | `fr` |
|
||||||
| 🇩🇪 德语 | `de` | 🇮🇳 印地语 | `hi` |
|
| 🇩🇪 德语 | `de` | 🇮🇳 印地语 | `hi` |
|
||||||
| 🇮🇩 印度尼西亚语 | `id` | 🇮🇹 意大利语 | `it` |
|
| 🇮🇩 印尼语 | `id` | 🇮🇹 意大利语 | `it` |
|
||||||
| 🇯🇵 日语 | `ja` | 🇵🇱 波兰语 | `pl` |
|
| 🇯🇵 日语 | `ja` | 🇵🇱 波兰语 | `pl` |
|
||||||
| 🇧🇷 葡萄牙语 | `pt` | 🇷🇺 俄语 | `ru` |
|
| 🇧🇷 葡萄牙语 | `pt` | 🇷🇺 俄语 | `ru` |
|
||||||
| 🇹🇷 土耳其语 | `tr` | 🇨🇳 中文 | `zh` |
|
| 🇹🇷 土耳其语 | `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.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.id.md](README.id.md) | 🇮🇹 意大利语 | [README.it.md](README.it.md) |
|
||||||
| 🇯🇵 日语 | [README.ja.md](README.ja.md) | 🇵🇱 波兰语 | [README.pl.md](README.pl.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.pt.md](README.pt.md) | 🇷🇺 俄语 | [README.ru.md](README.ru.md) |
|
||||||
| 🇹🇷 土耳其语 | [README.tr.md](README.tr.md) | 🇨🇳 中文 | [README.zh.md](README.zh.md) |
|
| 🇹🇷 土耳其语 | [README.tr.md](README.tr.md) | 🇨🇳 中文 | [README.zh.md](README.zh.md) |
|
||||||
|
|
||||||
> 💡 **想要贡献翻译吗?** 查看 [Contributing](#contributing) 部分以帮助我们添加更多语言!
|
> 💡 **想要贡献翻译?** 欢迎查看 [贡献指南](#贡献) 部分!
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="troubleshooting"></a>
|
<a id="故障排除"></a>
|
||||||
## 🛠️ 故障排除
|
## 🛠️ 故障排除
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>点击查看常见问题及解决方案</summary>
|
<summary>常见问题解答</summary>
|
||||||
|
|
||||||
- **格式表不显示:** 将 yt-dlp 更新到最新版本,并切换到 yt-dlp nightly。
|
- **没有显示格式表格:** 请更新 yt-dlp。如果仍无效,请尝试切换到测试版 (Nightly) 分支。
|
||||||
- **下载失败:** 检查您的互联网连接并确保视频可用。
|
- **下载失败:** 请检查网络连接或该地区视频是否可用。
|
||||||
- **具体下载错误:**
|
- **常见特定的错误提示:**
|
||||||
- **私人视频:** 使用cookie身份验证访问私人内容。
|
- **私有视频:** 需提供 Cookie 登录。
|
||||||
- **有年龄限制的内容:** 登录 YouTube 帐户即可观看有年龄限制的视频。
|
- **内容受限:** 部分视频需登录账号。
|
||||||
- **地理封锁的视频:** 考虑使用 VPN 来绕过区域限制。
|
- **地理锁定:** 需使用代理或 VPN。
|
||||||
- **删除/删除的视频:** YouTube 上不再提供视频。
|
- **视频已删除:** 视频已不存在。
|
||||||
- **直播:** 直播无法下载;等待流结束。
|
- **直播内容:** YTSage 目前不支持实时直播下载,请等直播结束后再试。
|
||||||
- **网络错误:** 检查您的互联网连接并重试。
|
- **下载后画面和声音分离:** 意味着系统中未安装或未检测到 FFmpeg。
|
||||||
- **无效 URL:** 确保 URL 正确且来自受支持的平台。
|
- **解决方法:** 确保 FFmpeg 已安装并加入 PATH,或下载带 `-ffmpeg` 版本的 Windows 程序。
|
||||||
- **高级内容:** 需要 YouTube Premium 会员资格。
|
|
||||||
- **版权封锁:** 由于版权限制,内容被封锁。
|
|
||||||
- **下载后分离视频和音频文件:** 当 FFmpeg 丢失或未检测到时会发生这种情况。 YTSage 需要 FFmpeg 来合并高质量的视频和音频流。
|
|
||||||
- **解决方案:** 确保 FFmpeg 已安装并可在系统路径中访问。对于 Windows 用户,最简单的选择是下载与 FFmpeg 捆绑在一起的 `YTSage-v<version>-ffmpeg.exe` 文件。
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### 🛡️ Windows Defender / 防病毒警告
|
#### 🛡️ Windows Defender / 杀毒软件警告
|
||||||
|
|
||||||
某些防病毒软件可能会将“.exe”文件标记为误报。这是打包应用程序的**已知限制**。
|
某些杀毒软件可能会误报。这是打包程序的常见现象。
|
||||||
|
|
||||||
**为什么会发生这种情况:**
|
**原因:**
|
||||||
- 防病毒启发式可能会将打包的可执行文件误认为可疑
|
- 启发式查杀可能会误认为打包的可执行文件是恶意软件。
|
||||||
|
|
||||||
**安全替代品:**
|
**安全建议:**
|
||||||
- ✅ **使用pip安装:** `pip install ytsage`(推荐)
|
- ✅ **通过 pip 安装:** `pip install ytsage`(推荐)
|
||||||
- ✅ **从源代码构建**:按照此[guide](../.github/CI_CD_README.md)
|
- ✅ **自行构建**: 参照 [CI_CD 指南](.github/CI_CD_README.md)
|
||||||
- ✅ **在防病毒软件中将应用程序列入白名单**
|
- ✅ **添加排除项**。
|
||||||
|
|
||||||
#### 🍎 macOS:“应用程序已损坏且无法打开”
|
#### 🍎 macOS: "应用已损坏,无法打开"
|
||||||
如果您在 macOS Sonoma 或更高版本上看到此错误,则需要删除隔离属性。
|
在 macOS Sonoma 及以后版本:
|
||||||
|
|
||||||
1. **打开终端**(您可以使用 Spotlight 找到它)。
|
1. 打开 **终端 (Terminal)**。
|
||||||
2. **键入以下命令**,但**不要**按 Enter 键。确保末尾包含空格:
|
2. 输入命令 (结尾有一个空格):
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine
|
xattr -d com.apple.quarantine
|
||||||
```
|
```
|
||||||
3. **将 `YTSage.app` 文件**从 Finder 窗口拖放到终端窗口中。这将自动粘贴正确的文件路径。
|
3. 从 Finder 中将 **YTSage.app** 拖入终端窗口。
|
||||||
4. **按 Enter** 运行命令。
|
4. 按回车。
|
||||||
5. **再次尝试打开 YTSage.app。** 现在它应该可以正确启动。
|
5. 再次打开应用。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### **配置位置(高级)**
|
#### **配置存放路径**
|
||||||
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
- **Windows:** `%LOCALAPPDATA%\YTSage`
|
||||||
- **macOS:** `~/Library/Application Support/YTSage`
|
- **macOS:** `~/Library/Application Support/YTSage`
|
||||||
- **Linux:** `~/.local/share/YTSage`
|
- **Linux:** `~/.local/share/YTSage`
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<a id="sponsor"></a>
|
<a id="赞助支持"></a>
|
||||||
## 💖 赞助商
|
## 💖 赞助支持
|
||||||
|
|
||||||
如果 YTSage 可以节省您的时间,请考虑赞助该项目。赞助有助于涵盖开发时间、跨平台测试以及未来的改进。
|
如果 YTSage 节省了您的时间,请考虑资助本项目。赞助收入将用于多平台测试环境的维护和新功能开发。
|
||||||
|
|
||||||
- GitHub 赞助商:https://github.com/sponsors/oop7
|
- GitHub Sponsors: https://github.com/sponsors/oop7
|
||||||
- 赞助商链接也可以直接在应用程序内的“关于”对话框中找到。
|
- 您也可以通过应用内的“About (关于)”窗口找到捐赠链接。
|
||||||
|
|
||||||
[](https://github.com/sponsors/oop7)
|
[](https://github.com/sponsors/oop7)
|
||||||
|
|
||||||
<a id="contributing"></a>
|
<a id="贡献"></a>
|
||||||
## 👥 贡献
|
## 👥 贡献
|
||||||
|
|
||||||
我们欢迎贡献!以下是您可以提供帮助的方法:
|
感谢所有帮助!
|
||||||
|
|
||||||
1. 🍴 分叉存储库
|
1. 🍴 Fork 仓库
|
||||||
2. 🌿 创建您的功能分支:
|
2. 🌿 创建特性分支: `git checkout -b feature/NewFeature`
|
||||||
```bash
|
3. 💾 提交更改: `git commit -m 'Add NewFeature'`
|
||||||
git checkout -b feature/AmazingFeature
|
4. 📤 推送分支: `git push origin feature/NewFeature`
|
||||||
```
|
5. 🔄 开启 Pull Request
|
||||||
3. 💾 提交您的更改:
|
|
||||||
```bash
|
|
||||||
git commit -m 'Add some AmazingFeature'
|
|
||||||
```
|
|
||||||
4. 📤推送到分支:
|
|
||||||
```bash
|
|
||||||
git push origin feature/AmazingFeature
|
|
||||||
```
|
|
||||||
5. 🔄 打开拉取请求
|
|
||||||
|
|
||||||
### 🌍 贡献翻译
|
### 🌍 翻译贡献
|
||||||
|
|
||||||
- 更新匹配的本地化自述文件(例如`README.es.md`)
|
- 您可以更新各语种 README (例如 `readme-translations/README.zh.md`)。
|
||||||
- 通过编辑`ytsage/languages/<code>.json`保持应用程序字符串同步
|
- 也可以翻译界面词条:`ytsage/languages/<语言代码>.json`。
|
||||||
- 如果您的语言缺失,请从`README.md`开始并创建`README.<code>.md`
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>📂项目结构</summary>
|
<summary>📂 项目结构</summary>
|
||||||
|
|
||||||
## YTSage - 项目结构
|
## YTSage - 项目结构
|
||||||
|
|
||||||
本文档描述了 YTSage 的组织文件夹结构。
|
### 📁 目录概览
|
||||||
|
|
||||||
### 📁 项目结构
|
|
||||||
|
|
||||||
```
|
```
|
||||||
YTSage/
|
YTSage/
|
||||||
├── 📁 .github/ # GitHub configuration
|
├── 📁 .github/ # GitHub 设置
|
||||||
│ ├── 📁 ISSUE_TEMPLATE/ # Issue templates
|
│ ├── 📁 ISSUE_TEMPLATE/ # 问题模板
|
||||||
│ │ └── 🐛-bug-report.md # Bug report template
|
│ ├─── 📁 workflows/ # GitHub Actions 流程
|
||||||
│ ├─── 📁 workflows/ # GitHub Actions workflows
|
├── 📁 branding/ # 品牌资源 (截图, SVG)
|
||||||
│ │ ├── build-linux.yml # Linux build workflow
|
│ ├── 📁 icons/ # 图标
|
||||||
│ │ ├── build-macos.yml # macOS build workflow
|
│ ├── 📁 screenshots/ # 截图说明
|
||||||
│ │ │── build-windows.yml # Windows build workflow
|
│ └── 📁 svg/ # SVG 素材
|
||||||
| | └── release-all.yml # Master release workflow
|
├── 📄 LICENSE # 许可证
|
||||||
│ └── 📄 CI_CD_README.md # CI/CD documentation
|
├── 📄 pyproject.toml # 项目元数据与依赖
|
||||||
├── 📁 branding/ # Branding assets (Screenshots, SVGs)
|
├── 📄 README.md # 英语 README
|
||||||
│ ├── 📁 icons/ # Application icons
|
├── 📄 requirements.txt # 开发依赖
|
||||||
│ ├── 📁 screenshots/ # Screenshots for documentation
|
└── 📁 ytsage/ # 源代码
|
||||||
│ └── 📁 svg/ # SVG assets
|
├── 📁 assets/ # 运行时资源 (音频, 图标)
|
||||||
├── 📄 LICENSE # License file
|
├── 📁 languages/ # 多语言 JSON 文件
|
||||||
├── 📄 pyproject.toml # Project metadata and dependencies
|
├── 📁 core/ # 下载与集成核心逻辑
|
||||||
├── 📄 README.md # Project documentation
|
├── 📁 gui/ # UI 组件
|
||||||
├── 📄 requirements.txt # Python dependencies (dev)
|
├── 📁 utils/ # 工具类
|
||||||
└── 📁 ytsage/ # Source package
|
├── 📄 __init__.py
|
||||||
├── 📁 assets/ # Runtime assets
|
└── 📄 main.py # 程序入口
|
||||||
│ ├── 📁 Icon/ # Application icons
|
|
||||||
│ └── 📁 sound/ # Audio files
|
|
||||||
├── 📁 languages/ # Localization files
|
|
||||||
│ ├── 📄 ar.json # Arabic translation
|
|
||||||
│ ├── 📄 de.json # German translation
|
|
||||||
│ ├── 📄 en.json # English translation
|
|
||||||
│ └── ... # Other languages
|
|
||||||
├── 📁 core/ # Core business logic
|
|
||||||
│ ├── 📄 __init__.py # Core package init
|
|
||||||
│ ├── 📄 ytsage_deno.py # Deno integration
|
|
||||||
│ ├── 📄 ytsage_downloader.py # Download functionality
|
|
||||||
│ ├── 📄 ytsage_ffmpeg.py # FFmpeg integration
|
|
||||||
│ ├── 📄 ytsage_utils.py # Utility functions
|
|
||||||
│ └── 📄 ytsage_yt_dlp.py # yt-dlp integration
|
|
||||||
├── 📁 gui/ # User interface components
|
|
||||||
│ ├── 📄 __init__.py # GUI package init
|
|
||||||
│ ├── 📄 ytsage_gui_main.py # Main application window
|
|
||||||
│ └── 📁 ytsage_gui_dialogs/ # Dialog classes
|
|
||||||
├── 📁 utils/ # Utility modules
|
|
||||||
│ ├── 📄 __init__.py # Utils package init
|
|
||||||
│ ├── 📄 ytsage_config_manager.py # Configuration management
|
|
||||||
│ └── 📄 ytsage_logger.py # Logging utilities
|
|
||||||
├── 📄 __init__.py # Package entry point
|
|
||||||
└── 📄 main.py # Main execution script
|
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## ⭐️ 明星历史
|
## ⭐️ 关注趋势
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 明星历史
|
## Star History
|
||||||
|
|
||||||
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
<a href="https://www.star-history.com/#oop7/YTSage&Date">
|
||||||
<picture>
|
<picture>
|
||||||
@@ -540,63 +500,64 @@ YTSage/
|
|||||||
|
|
||||||
## 📜 许可证
|
## 📜 许可证
|
||||||
|
|
||||||
该项目已获得 MIT 许可证 - 有关详细信息,请参阅[LICENSE](../LICENSE) 文件。
|
本项目基于 MIT 许可证分发 - 详情请参阅 [LICENSE](LICENSE) 文件。
|
||||||
|
|
||||||
## 🙏致谢
|
## 🙏 鸣谢
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>显示致谢</summary>
|
<summary>查看致谢名单</summary>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<p>衷心感谢所有通过提出改进建议或报告错误为该项目做出贡献的人。</p>
|
<p>特别鸣谢所有通过反馈、建议或代码合并来完善此工具的贡献者。</p>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr class="section"><th colspan="2">核心组件</th></tr>
|
<tr class="section"><th colspan="2">核心组件</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
<td width="35%"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a></td>
|
||||||
<td>下载引擎</td>
|
<td>核心下载引擎</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
<td><a href="https://ffmpeg.org/">FFmpeg</a></td>
|
||||||
<td>媒体处理</td>
|
<td>媒体流处理</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://deno.com/">德诺</a></td>
|
<td><a href="https://deno.com/">Deno</a></td>
|
||||||
<td>与 yt-dlp 集成的运行时</td>
|
<td>集成运行环境</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">库和框架</th></tr>
|
<tr class="section"><th colspan="2">库与框架</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
<td><a href="https://wiki.qt.io/Qt_for_Python">PySide6</a></td>
|
||||||
<td>GUI框架</td>
|
<td>GUI 框架</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://python-pillow.org/">枕头</a></td>
|
<td><a href="https://python-pillow.org/">Pillow</a></td>
|
||||||
<td>图像处理</td>
|
<td>图片处理</td>
|
||||||
</tr>
|
|
||||||
<tr><td><a href="https://requests.readthedocs.io/">请求</a></td>
|
|
||||||
<td>HTTP 请求</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://packaging.python.org/">包装</a></td>
|
<td><a href="https://requests.readthedocs.io/">requests</a></td>
|
||||||
<td>版本和包处理</td>
|
<td>网络请求</td>
|
||||||
</tr>
|
</tr>
|
||||||
<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>
|
<td>Markdown 渲染</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
<td><a href="https://github.com/Delgan/loguru">loguru</a></td>
|
||||||
<td>记录</td>
|
<td>日志记录</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="section"><th colspan="2">资产和贡献者</th></tr>
|
<tr class="section"><th colspan="2">内容与贡献</th></tr>
|
||||||
<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>
|
<td>通知声音</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="https://github.com/viru185">viru185</a></td>
|
<td><a href="https://github.com/viru185">viru185</a></td>
|
||||||
<td>代码贡献者</td>
|
<td>代码贡献</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@@ -606,12 +567,10 @@ YTSage/
|
|||||||
|
|
||||||
## ⚠️ 免责声明
|
## ⚠️ 免责声明
|
||||||
|
|
||||||
该工具仅供个人使用。请尊重 YouTube 的服务条款和内容创作者的权利。
|
本工具仅供个人学习与研究使用。请尊重 YouTube 服务条款及创作者版权。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
由 [oop7](https://github.com/oop7) 倾力协作 ❤️
|
||||||
由[oop7](https://github.com/oop7)用❤️制作
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+1
-1
@@ -4,5 +4,5 @@ YTSage - YouTube Video Downloader
|
|||||||
A modern, user-friendly YouTube video downloader built with PySide6.
|
A modern, user-friendly YouTube video downloader built with PySide6.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "5.0.3"
|
__version__ = "5.0.10b"
|
||||||
__author__ = "oop7"
|
__author__ = "oop7"
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ class DownloadThread(QThread):
|
|||||||
preferred_audio_format="best",
|
preferred_audio_format="best",
|
||||||
audio_normalization=False,
|
audio_normalization=False,
|
||||||
filename_format=None,
|
filename_format=None,
|
||||||
|
concurrent_fragments=1,
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.url = url
|
self.url = url
|
||||||
@@ -103,6 +104,7 @@ class DownloadThread(QThread):
|
|||||||
self.preferred_audio_format = preferred_audio_format
|
self.preferred_audio_format = preferred_audio_format
|
||||||
self.audio_normalization = audio_normalization
|
self.audio_normalization = audio_normalization
|
||||||
self.filename_format = filename_format
|
self.filename_format = filename_format
|
||||||
|
self.concurrent_fragments = concurrent_fragments
|
||||||
self.paused: bool = False
|
self.paused: bool = False
|
||||||
self.cancelled: bool = False
|
self.cancelled: bool = False
|
||||||
self.process: Optional[subprocess.Popen] = None
|
self.process: Optional[subprocess.Popen] = None
|
||||||
@@ -229,13 +231,40 @@ class DownloadThread(QThread):
|
|||||||
|
|
||||||
def _build_yt_dlp_command(self) -> List[str]:
|
def _build_yt_dlp_command(self) -> List[str]:
|
||||||
"""Build the yt-dlp command line with all options for direct execution."""
|
"""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()
|
yt_dlp_path: str = get_yt_dlp_path()
|
||||||
|
# Build the command line array
|
||||||
cmd: List[str] = [yt_dlp_path]
|
cmd: List[str] = [yt_dlp_path]
|
||||||
logger.debug(f"Using yt-dlp from: {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
|
# 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
|
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.
|
# If the selected format is audio-only, pass it directly.
|
||||||
@@ -295,12 +324,15 @@ class DownloadThread(QThread):
|
|||||||
base_path: str = self.path.as_posix()
|
base_path: str = self.path.as_posix()
|
||||||
|
|
||||||
# Determine the filename part of the template
|
# 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:
|
if self.is_playlist:
|
||||||
# Create output template with playlist subfolder
|
# Create output template with playlist subfolder
|
||||||
output_template: str = f"{base_path}/%(playlist_title)s/{filename_part}"
|
output_template: str = f"{base_path}/%(playlist_title)s/{filename_part}"
|
||||||
else:
|
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}"
|
output_template: str = f"{base_path}/{filename_part}"
|
||||||
|
|
||||||
cmd.extend(["-o", str(output_template)])
|
cmd.extend(["-o", str(output_template)])
|
||||||
@@ -320,17 +352,21 @@ class DownloadThread(QThread):
|
|||||||
|
|
||||||
# Get language codes from subtitle selections
|
# Get language codes from subtitle selections
|
||||||
lang_codes: List[str] = []
|
lang_codes: List[str] = []
|
||||||
|
has_auto_generated = False
|
||||||
for sub_selection in self.subtitle_langs:
|
for sub_selection in self.subtitle_langs:
|
||||||
try:
|
try:
|
||||||
# Extract just the language code (e.g., 'en' from 'en - Manual')
|
# Extract just the language code (e.g., 'en' from 'en - Manual')
|
||||||
lang_code = sub_selection.split(" - ")[0]
|
lang_code = sub_selection.split(" - ")[0]
|
||||||
lang_codes.append(lang_code)
|
lang_codes.append(lang_code)
|
||||||
|
if "Auto-generated" in sub_selection:
|
||||||
|
has_auto_generated = True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"Could not parse subtitle selection '{sub_selection}': {e}")
|
logger.exception(f"Could not parse subtitle selection '{sub_selection}': {e}")
|
||||||
|
|
||||||
if lang_codes:
|
if lang_codes:
|
||||||
cmd.extend(["--sub-langs", ",".join(lang_codes)])
|
cmd.extend(["--sub-langs", ",".join(lang_codes)])
|
||||||
cmd.append("--write-auto-subs") # Include auto-generated subtitles
|
if has_auto_generated:
|
||||||
|
cmd.append("--write-auto-subs") # Include auto-generated subtitles
|
||||||
|
|
||||||
# Only embed subtitles if merge is enabled
|
# Only embed subtitles if merge is enabled
|
||||||
if self.merge_subs:
|
if self.merge_subs:
|
||||||
@@ -377,6 +413,9 @@ class DownloadThread(QThread):
|
|||||||
logger.debug(f"Added download section: {self.download_section}, Force keyframes: {self.force_keyframes}")
|
logger.debug(f"Added download section: {self.download_section}, Force keyframes: {self.force_keyframes}")
|
||||||
|
|
||||||
# Add the URL as the final argument
|
# 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)
|
cmd.append(self.url)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
@@ -447,6 +486,7 @@ class DownloadThread(QThread):
|
|||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
self.cleanup_partial_files()
|
self.cleanup_partial_files()
|
||||||
self.status_signal.emit(_("download.cancelled"))
|
self.status_signal.emit(_("download.cancelled"))
|
||||||
|
self.finished_signal.emit()
|
||||||
return
|
return
|
||||||
|
|
||||||
# Wait if paused
|
# Wait if paused
|
||||||
@@ -467,7 +507,7 @@ class DownloadThread(QThread):
|
|||||||
)
|
)
|
||||||
return
|
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)
|
self.progress_signal.emit(100)
|
||||||
|
|
||||||
# Robust file finding: Always search for the most recent file
|
# Robust file finding: Always search for the most recent file
|
||||||
@@ -516,7 +556,10 @@ class DownloadThread(QThread):
|
|||||||
logger.error(f"Error finding final file: {e}", exc_info=True)
|
logger.error(f"Error finding final file: {e}", exc_info=True)
|
||||||
|
|
||||||
# Set completion status
|
# Set completion status
|
||||||
self.status_signal.emit(_("download.completed"))
|
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
|
# Clean up subtitle files if they were merged, with a small delay
|
||||||
# to ensure the embedding process has completed
|
# to ensure the embedding process has completed
|
||||||
@@ -532,6 +575,7 @@ class DownloadThread(QThread):
|
|||||||
# Check if it was cancelled
|
# Check if it was cancelled
|
||||||
if self.cancelled:
|
if self.cancelled:
|
||||||
self.status_signal.emit(_("download.cancelled"))
|
self.status_signal.emit(_("download.cancelled"))
|
||||||
|
self.finished_signal.emit()
|
||||||
else:
|
else:
|
||||||
# Provide informative error message based on captured output
|
# Provide informative error message based on captured output
|
||||||
if self.error_lines:
|
if self.error_lines:
|
||||||
|
|||||||
@@ -94,8 +94,8 @@ def update_version_cache(tool_name: str, version_info: str, path: Optional[str],
|
|||||||
current_mtime: float = get_file_mtime(path)
|
current_mtime: float = get_file_mtime(path)
|
||||||
|
|
||||||
_version_cache[tool_name] = {
|
_version_cache[tool_name] = {
|
||||||
"version": version_info,
|
"version": str(version_info) if version_info else "",
|
||||||
"path": path,
|
"path": str(path) if path else None,
|
||||||
"last_check": current_time,
|
"last_check": current_time,
|
||||||
"path_mtime": current_mtime,
|
"path_mtime": current_mtime,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,8 +131,13 @@ class AnalysisThread(QThread):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if result.returncode != 0:
|
if result.returncode != 0:
|
||||||
logger.error(f"yt-dlp failed: {result.stderr}")
|
if "Private video" in result.stderr or "Sign in" in result.stderr:
|
||||||
self.analysis_error.emit(_("errors.ytdlp_failed", error=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_info_visible.emit(False)
|
||||||
self.playlist_select_btn_visible.emit(False)
|
self.playlist_select_btn_visible.emit(False)
|
||||||
return
|
return
|
||||||
@@ -394,6 +399,29 @@ class AnalysisMixin:
|
|||||||
self.selected_playlist_items = None
|
self.selected_playlist_items = None
|
||||||
self.selected_subtitles = []
|
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)
|
# Update UI components (safe - we're in main thread)
|
||||||
self.update_video_info(self.video_info)
|
self.update_video_info(self.video_info)
|
||||||
|
|
||||||
@@ -407,7 +435,11 @@ class AnalysisMixin:
|
|||||||
self.download_thumbnail_file(self.video_url, self.last_path)
|
self.download_thumbnail_file(self.video_url, self.last_path)
|
||||||
|
|
||||||
# Update subtitle UI
|
# Update subtitle UI
|
||||||
self.signals.selected_subs_label_text.emit(_("main_ui.zero_selected"))
|
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
|
# Update format table
|
||||||
self.video_button.setChecked(True)
|
self.video_button.setChecked(True)
|
||||||
|
|||||||
@@ -198,6 +198,37 @@ class CustomOptionsDialog(QDialog):
|
|||||||
|
|
||||||
# Initially show browser group (recommended default) and hide file group
|
# Initially show browser group (recommended default) and hide file group
|
||||||
self.cookie_file_group.setVisible(False)
|
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)
|
self.cookie_browser_group.setVisible(True)
|
||||||
|
|
||||||
# Apply button and status indicator
|
# Apply button and status indicator
|
||||||
@@ -725,6 +756,7 @@ class CustomOptionsDialog(QDialog):
|
|||||||
self._parent.browser_cookies_option = None
|
self._parent.browser_cookies_option = None
|
||||||
|
|
||||||
# Save settings to ConfigManager for persistence
|
# Save settings to ConfigManager for persistence
|
||||||
|
ConfigManager.set("cookie_remember", self.remember_cb.isChecked())
|
||||||
if self.cookie_file_radio.isChecked():
|
if self.cookie_file_radio.isChecked():
|
||||||
ConfigManager.set("cookie_source", "file")
|
ConfigManager.set("cookie_source", "file")
|
||||||
ConfigManager.set("cookie_file_path", str(cookie_path) if cookie_path else None)
|
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)
|
painter.drawText(badge_rect, Qt.AlignmentFlag.AlignCenter, badge_text)
|
||||||
|
|
||||||
# File Size
|
# File Size
|
||||||
file_size = entry.get("file_size", 0)
|
file_size = entry.get("file_size") or 0
|
||||||
if file_size > 0:
|
if file_size > 0:
|
||||||
size_str = self.format_file_size(file_size)
|
size_str = self.format_file_size(file_size)
|
||||||
painter.setPen(QColor("#aaaaaa"))
|
painter.setPen(QColor("#aaaaaa"))
|
||||||
|
|||||||
@@ -229,6 +229,28 @@ class DownloadSettingsDialog(QDialog):
|
|||||||
speed_group_box.setLayout(speed_layout)
|
speed_group_box.setLayout(speed_layout)
|
||||||
general_layout.addWidget(speed_group_box)
|
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 Section ---
|
||||||
generic_mode_group_box = QGroupBox(_("settings.generic_mode"))
|
generic_mode_group_box = QGroupBox(_("settings.generic_mode"))
|
||||||
generic_mode_layout = QVBoxLayout()
|
generic_mode_layout = QVBoxLayout()
|
||||||
@@ -354,6 +376,39 @@ class DownloadSettingsDialog(QDialog):
|
|||||||
|
|
||||||
audio_format_group_box.setLayout(audio_format_layout)
|
audio_format_group_box.setLayout(audio_format_layout)
|
||||||
format_layout.addWidget(audio_format_group_box)
|
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()
|
format_layout.addStretch()
|
||||||
|
|
||||||
# === File Tab ===
|
# === File Tab ===
|
||||||
@@ -365,18 +420,18 @@ class DownloadSettingsDialog(QDialog):
|
|||||||
filename_layout = QVBoxLayout()
|
filename_layout = QVBoxLayout()
|
||||||
|
|
||||||
# Load current filename format from ConfigManager
|
# 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
|
# Input and Reset Button Layout
|
||||||
filename_input_layout = QHBoxLayout()
|
filename_input_layout = QHBoxLayout()
|
||||||
|
|
||||||
self.filename_format_input = QLineEdit(self.filename_format_value)
|
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)
|
filename_input_layout.addWidget(self.filename_format_input)
|
||||||
|
|
||||||
self.reset_format_button = QPushButton(_("buttons.reset"))
|
self.reset_format_button = QPushButton(_("buttons.reset"))
|
||||||
self.reset_format_button.setFixedWidth(70)
|
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_input_layout.addWidget(self.reset_format_button)
|
||||||
|
|
||||||
filename_layout.addLayout(filename_input_layout)
|
filename_layout.addLayout(filename_input_layout)
|
||||||
@@ -474,6 +529,13 @@ class DownloadSettingsDialog(QDialog):
|
|||||||
"""Returns whether generic mode is enabled."""
|
"""Returns whether generic mode is enabled."""
|
||||||
return self.generic_mode_checkbox.isChecked()
|
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:
|
def get_preferred_format(self) -> str:
|
||||||
"""Returns the selected preferred format (lowercase)."""
|
"""Returns the selected preferred format (lowercase)."""
|
||||||
format_map = {0: "mp4", 1: "webm", 2: "mkv"}
|
format_map = {0: "mp4", 1: "webm", 2: "mkv"}
|
||||||
@@ -535,6 +597,7 @@ class DownloadSettingsDialog(QDialog):
|
|||||||
"""Override accept to save format settings."""
|
"""Override accept to save format settings."""
|
||||||
try:
|
try:
|
||||||
ConfigManager.set("generic_mode", self.get_generic_mode_enabled())
|
ConfigManager.set("generic_mode", self.get_generic_mode_enabled())
|
||||||
|
ConfigManager.set("concurrent_fragments", self.get_concurrent_fragments())
|
||||||
|
|
||||||
# Save output format settings
|
# Save output format settings
|
||||||
force_format = self.get_force_format_enabled()
|
force_format = self.get_force_format_enabled()
|
||||||
@@ -550,6 +613,12 @@ class DownloadSettingsDialog(QDialog):
|
|||||||
ConfigManager.set("preferred_audio_format", preferred_audio_format)
|
ConfigManager.set("preferred_audio_format", preferred_audio_format)
|
||||||
ConfigManager.set("audio_normalization", audio_normalization)
|
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
|
# Save filename format
|
||||||
filename_format = self.get_filename_format()
|
filename_format = self.get_filename_format()
|
||||||
if filename_format:
|
if filename_format:
|
||||||
|
|||||||
@@ -238,6 +238,30 @@ class FormatTableMixin:
|
|||||||
self._populate_format_table(all_filtered)
|
self._populate_format_table(all_filtered)
|
||||||
self._table_built = True
|
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
|
# Apply initial visibility based on current button states
|
||||||
self.filter_formats()
|
self.filter_formats()
|
||||||
|
|
||||||
@@ -307,6 +331,9 @@ class FormatTableMixin:
|
|||||||
|
|
||||||
# Quality label with color coding
|
# Quality label with color coding
|
||||||
quality_label = self.get_quality_label(f)
|
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)
|
quality_item = QTableWidgetItem(quality_label)
|
||||||
# Set color based on quality (check multiple language terms)
|
# Set color based on quality (check multiple language terms)
|
||||||
quality_lower = quality_label.lower()
|
quality_lower = quality_label.lower()
|
||||||
@@ -325,6 +352,9 @@ class FormatTableMixin:
|
|||||||
if not isinstance(resolution, str):
|
if not isinstance(resolution, str):
|
||||||
resolution = str(resolution)
|
resolution = str(resolution)
|
||||||
|
|
||||||
|
if is_playlist_mode and f.get("vcodec") != "none" and resolution != "N/A":
|
||||||
|
resolution = f"≤ {resolution}"
|
||||||
|
|
||||||
if is_playlist_mode:
|
if is_playlist_mode:
|
||||||
# Column 2 for playlist mode: Resolution
|
# Column 2 for playlist mode: Resolution
|
||||||
self.format_table.setItem(row, 2, QTableWidgetItem(resolution))
|
self.format_table.setItem(row, 2, QTableWidgetItem(resolution))
|
||||||
@@ -490,7 +520,10 @@ class FormatTableMixin:
|
|||||||
resolution = format_info.get("resolution", "")
|
resolution = format_info.get("resolution", "")
|
||||||
if resolution:
|
if resolution:
|
||||||
try:
|
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:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
+126
-12
@@ -15,6 +15,7 @@ from PySide6.QtWidgets import (
|
|||||||
QButtonGroup,
|
QButtonGroup,
|
||||||
QCheckBox,
|
QCheckBox,
|
||||||
QDialog,
|
QDialog,
|
||||||
|
QFileDialog,
|
||||||
QHBoxLayout,
|
QHBoxLayout,
|
||||||
QLabel,
|
QLabel,
|
||||||
QLineEdit,
|
QLineEdit,
|
||||||
@@ -329,13 +330,31 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
|||||||
logger.exception(f"Error playing notification sound: {e}")
|
logger.exception(f"Error playing notification sound: {e}")
|
||||||
|
|
||||||
def _initialize_cookie_settings_from_config(self) -> None:
|
def _initialize_cookie_settings_from_config(self) -> None:
|
||||||
"""Initialize cookie settings - cookies are NOT auto-activated on startup.
|
"""Initialize cookie settings and restore from last session if active."""
|
||||||
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
|
|
||||||
self.cookie_file_path = None
|
self.cookie_file_path = None
|
||||||
self.browser_cookies_option = 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:
|
def init_ui(self) -> None:
|
||||||
self.setWindowTitle(f"{_('app.title')} {_('app.version', version=self.version)}")
|
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()
|
self.playlist_info_label = self.setup_playlist_info_section()
|
||||||
layout.addWidget(self.playlist_info_label)
|
layout.addWidget(self.playlist_info_label)
|
||||||
|
|
||||||
|
# Playlist buttons layout
|
||||||
|
playlist_btns_layout = QHBoxLayout()
|
||||||
|
|
||||||
# Add playlist selection BUTTON (initially hidden) - REPLACED QLineEdit
|
# Add playlist selection BUTTON (initially hidden) - REPLACED QLineEdit
|
||||||
self.playlist_select_btn = QPushButton(_("buttons.select_videos"))
|
self.playlist_select_btn = QPushButton(_("buttons.select_videos"))
|
||||||
self.playlist_select_btn.clicked.connect(self.open_playlist_selection_dialog)
|
self.playlist_select_btn.clicked.connect(self.open_playlist_selection_dialog)
|
||||||
self.playlist_select_btn.setVisible(False)
|
self.playlist_select_btn.setVisible(False)
|
||||||
self.playlist_select_btn.setStyleSheet(StyleSheet.PLAYLIST_BUTTON)
|
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 ---
|
# --- End Playlist Info Section ---
|
||||||
|
|
||||||
# Format controls section with minimal spacing
|
# 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.playlist_info_label_text.connect(self.playlist_info_label.setText)
|
||||||
self.signals.selected_subs_label_text.connect(self.selected_subs_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.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)
|
self.signals.playlist_select_btn_text.connect(self.playlist_select_btn.setText)
|
||||||
|
|
||||||
# Disable analysis-dependent controls until video is analyzed
|
# Disable analysis-dependent controls until video is analyzed
|
||||||
@@ -713,12 +745,19 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
|||||||
|
|
||||||
# Get resolution for filename
|
# Get resolution for filename
|
||||||
resolution = "default"
|
resolution = "default"
|
||||||
for checkbox in self.format_checkboxes:
|
for row in range(self.format_table.rowCount()):
|
||||||
if checkbox.isChecked():
|
cell_widget = self.format_table.cellWidget(row, 0)
|
||||||
parts = checkbox.text().split("•")
|
if cell_widget:
|
||||||
if len(parts) >= 1:
|
cb = cell_widget.layout().itemAt(0).widget()
|
||||||
resolution = parts[0].strip().lower()
|
if isinstance(cb, QCheckBox) and cb.isChecked():
|
||||||
break
|
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
|
# Get subtitle selection if available - Now get the list
|
||||||
selected_subs = self.selected_subtitles if hasattr(self, "selected_subtitles") else []
|
selected_subs = self.selected_subtitles if hasattr(self, "selected_subtitles") else []
|
||||||
@@ -755,6 +794,7 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
|||||||
|
|
||||||
# Get filename format from config
|
# Get filename format from config
|
||||||
filename_format = ConfigManager.get("filename_format")
|
filename_format = ConfigManager.get("filename_format")
|
||||||
|
concurrent_fragments = ConfigManager.get("concurrent_fragments") or 1
|
||||||
|
|
||||||
# Create download thread with resolution in output template
|
# Create download thread with resolution in output template
|
||||||
self.download_thread = DownloadThread(
|
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
|
preferred_audio_format=self.preferred_audio_format, # Pass preferred audio format
|
||||||
audio_normalization=self.audio_normalization, # Pass audio normalization setting
|
audio_normalization=self.audio_normalization, # Pass audio normalization setting
|
||||||
filename_format=filename_format, # Pass the filename format
|
filename_format=filename_format, # Pass the filename format
|
||||||
|
concurrent_fragments=concurrent_fragments, # Pass the concurrent fragments
|
||||||
)
|
)
|
||||||
|
|
||||||
# Connect signals
|
# Connect signals
|
||||||
@@ -1312,6 +1353,79 @@ class YTSageApp(QMainWindow, FormatTableMixin, VideoInfoMixin, AnalysisMixin):
|
|||||||
button_text = f"Select Videos... ({display_text})"
|
button_text = f"Select Videos... ({display_text})"
|
||||||
self.playlist_select_btn.setText(button_text) # Direct call is fine here
|
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 ---
|
# --- New Slot for Updating Playlist Button Text ---
|
||||||
# moved to SignalManager as Signal and added to init_ui() method.
|
# moved to SignalManager as Signal and added to init_ui() method.
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "تحديد الكل",
|
"select_all": "تحديد الكل",
|
||||||
"deselect_all": "إلغاء تحديد الكل",
|
"deselect_all": "إلغاء تحديد الكل",
|
||||||
"open_folder": "فتح موقع المجلد",
|
"open_folder": "فتح موقع المجلد",
|
||||||
"history": "السجل"
|
"history": "السجل",
|
||||||
|
"save_playlist": "حفظ قائمة التشغيل باسم"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "خيارات مخصصة",
|
"custom_options": "خيارات مخصصة",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "تصفية اللغات (مثال: ar، en)...",
|
"filter_languages_placeholder": "تصفية اللغات (مثال: ar، en)...",
|
||||||
"no_subtitles_available": "لا توجد ترجمات متاحة",
|
"no_subtitles_available": "لا توجد ترجمات متاحة",
|
||||||
"matching": "مطابقة",
|
"matching": "مطابقة",
|
||||||
"ytdlp_log_title": "سجل yt-dlp"
|
"ytdlp_log_title": "سجل yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "تصفية الفيديوهات..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "تسجيل الدخول بالكوكيز",
|
"cookies": "تسجيل الدخول بالكوكيز",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "تم مسح إعدادات الكوكيز",
|
"cleared_message": "تم مسح إعدادات الكوكيز",
|
||||||
"active_browser": "✓ نشط: كوكيز المتصفح ({browser})",
|
"active_browser": "✓ نشط: كوكيز المتصفح ({browser})",
|
||||||
"active_file": "✓ نشط: ملف كوكيز ({file})",
|
"active_file": "✓ نشط: ملف كوكيز ({file})",
|
||||||
"none_active": "○ لا توجد كوكيز نشطة"
|
"none_active": "○ لا توجد كوكيز نشطة",
|
||||||
|
"remember_settings": "تذكر إعدادات ملفات تعريف الارتباط عند بدء التشغيل التالي"
|
||||||
},
|
},
|
||||||
"custom_command": {
|
"custom_command": {
|
||||||
"help_text": "أدخل أمر yt-dlp مخصص أدناه. سيتم إضافة الرابط الحالي تلقائياً.<br><br>للحصول على قائمة كاملة بالخيارات وأمثلة الاستخدام <a href=\"{docs_url}\">انقر هنا لمشاهدة الوثائق الرسمية لـ yt-dlp</a>.<br><br>ملاحظة: يتم التعامل مع مسار التنزيل ونموذج اسم الملف تلقائياً.",
|
"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 القياسية.",
|
"filename_format_help": "المتغيرات المتاحة: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. يتم دعم صيغة قالب إخراج yt-dlp القياسية.",
|
||||||
"tab_general": "عام",
|
"tab_general": "عام",
|
||||||
"tab_format": "تنسيق",
|
"tab_format": "تنسيق",
|
||||||
"tab_file": "ملف"
|
"tab_file": "ملف",
|
||||||
|
"concurrent_fragments": "اتصالات متزامنة",
|
||||||
|
"concurrent_fragments_help": "عدد الاتصالات لكل عملية تحميل. القيم الأعلى تتجاوز الاختناق ولكنها قد تسبب حظراً مؤقتاً إذا كانت عالية جداً. الافتراضي: 1.",
|
||||||
|
"defaults_settings": "إعدادات الاختيار الافتراضية",
|
||||||
|
"default_video_quality": "دقة الفيديو الافتراضية (الطول):",
|
||||||
|
"default_subtitle_language": "لغات الترجمة الافتراضية:",
|
||||||
|
"defaults_help": "اضبط ارتفاع الفيديو المفضل ولغات الترجمة (مفصولة بفاصلة). سيتم اختيارها تلقائيًا إذا كانت متوفرة."
|
||||||
},
|
},
|
||||||
"main_ui": {
|
"main_ui": {
|
||||||
"url_placeholder": "أدخل رابط فيديو يوتيوب أو قائمة تشغيل",
|
"url_placeholder": "أدخل رابط فيديو يوتيوب أو قائمة تشغيل",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "خطأ: {error}",
|
"generic_error": "خطأ: {error}",
|
||||||
"download_failed_return_code_conflict": "فشل التنزيل برمز الإرجاع {return_code}. قد يكون ذلك بسبب تعارض بين عدة عمليات تثبيت لـ yt-dlp. جرّب إزالة أي تثبيت لنظام التشغيل (مثل snap أو apt) ثم أعد تشغيل التطبيق.",
|
"download_failed_return_code_conflict": "فشل التنزيل برمز الإرجاع {return_code}. قد يكون ذلك بسبب تعارض بين عدة عمليات تثبيت لـ yt-dlp. جرّب إزالة أي تثبيت لنظام التشغيل (مثل snap أو apt) ثم أعد تشغيل التطبيق.",
|
||||||
"download_failed_return_code": "فشل التنزيل برمز الإرجاع {return_code}",
|
"download_failed_return_code": "فشل التنزيل برمز الإرجاع {return_code}",
|
||||||
"direct_command_error": "خطأ في الأمر المباشر: {error}"
|
"direct_command_error": "خطأ في الأمر المباشر: {error}",
|
||||||
|
"private_video": "قد يكون هذا الفيديو خاصًا. يرجى استخدام ملفات تعريف الارتباط من الخيارات المخصصة."
|
||||||
},
|
},
|
||||||
"update_dialog": {
|
"update_dialog": {
|
||||||
"title": "تحديث متاح",
|
"title": "تحديث متاح",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "قائمة تشغيل غير معروفة",
|
"unknown": "قائمة تشغيل غير معروفة",
|
||||||
"total_videos": "إجمالي الفيديوهات: {count}",
|
"total_videos": "إجمالي الفيديوهات: {count}",
|
||||||
"display_format": "قائمة التشغيل: {title} | {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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} محدد"
|
"count_selected": "{count} محدد"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Alle auswählen",
|
"select_all": "Alle auswählen",
|
||||||
"deselect_all": "Alle abwählen",
|
"deselect_all": "Alle abwählen",
|
||||||
"open_folder": "Ordnerspeicherort öffnen",
|
"open_folder": "Ordnerspeicherort öffnen",
|
||||||
"history": "Verlauf"
|
"history": "Verlauf",
|
||||||
|
"save_playlist": "Playlist speichern unter"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Benutzerdefinierte Optionen",
|
"custom_options": "Benutzerdefinierte Optionen",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Sprachen filtern (z.B. en, de)...",
|
"filter_languages_placeholder": "Sprachen filtern (z.B. en, de)...",
|
||||||
"no_subtitles_available": "Keine Untertitel verfügbar",
|
"no_subtitles_available": "Keine Untertitel verfügbar",
|
||||||
"matching": "passend",
|
"matching": "passend",
|
||||||
"ytdlp_log_title": "yt-dlp-Protokoll"
|
"ytdlp_log_title": "yt-dlp-Protokoll",
|
||||||
|
"filter_playlist_placeholder": "Videos filtern..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Mit Cookies anmelden",
|
"cookies": "Mit Cookies anmelden",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Cookie-Einstellungen wurden gelöscht",
|
"cleared_message": "Cookie-Einstellungen wurden gelöscht",
|
||||||
"active_browser": "✓ Aktiv: Browser-Cookies ({browser})",
|
"active_browser": "✓ Aktiv: Browser-Cookies ({browser})",
|
||||||
"active_file": "✓ Aktiv: Cookie-Datei ({file})",
|
"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": {
|
"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.",
|
"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.",
|
"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_general": "Allgemein",
|
||||||
"tab_format": "Format",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "YouTube-Video- oder Playlist-URL eingeben",
|
"url_placeholder": "YouTube-Video- oder Playlist-URL eingeben",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "Fehler: {error}",
|
"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_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}",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Update verfügbar",
|
"title": "Update verfügbar",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "Unbekannte Playlist",
|
"unknown": "Unbekannte Playlist",
|
||||||
"total_videos": "Gesamtanzahl Videos: {count}",
|
"total_videos": "Gesamtanzahl Videos: {count}",
|
||||||
"display_format": "Playlist: {title} | {count} Videos",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} ausgewählt"
|
"count_selected": "{count} ausgewählt"
|
||||||
|
|||||||
@@ -83,6 +83,7 @@
|
|||||||
"select_all": "Select All",
|
"select_all": "Select All",
|
||||||
"deselect_all": "Deselect All",
|
"deselect_all": "Deselect All",
|
||||||
"open_folder": "Open folder location",
|
"open_folder": "Open folder location",
|
||||||
|
"save_playlist": "Save Playlist As",
|
||||||
"reset": "Reset"
|
"reset": "Reset"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
@@ -130,7 +131,8 @@
|
|||||||
"cleared_message": "Cookie settings have been cleared",
|
"cleared_message": "Cookie settings have been cleared",
|
||||||
"active_browser": "✓ Active: Browser cookies ({browser})",
|
"active_browser": "✓ Active: Browser cookies ({browser})",
|
||||||
"active_file": "✓ Active: Cookie file ({file})",
|
"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": {
|
"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.",
|
"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": "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.",
|
"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": "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:",
|
"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.",
|
"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)",
|
"audio_format_best": "Best (No conversion)",
|
||||||
@@ -448,6 +456,7 @@
|
|||||||
"analysis_timeout": "Error: Analysis timed out. Please try again.",
|
"analysis_timeout": "Error: Analysis timed out. Please try again.",
|
||||||
"invalid_speed_limit": "❌ Error: Invalid speed limit value set in settings.",
|
"invalid_speed_limit": "❌ Error: Invalid speed limit value set in settings.",
|
||||||
"ytdlp_failed": "Error: yt-dlp failed: {error}",
|
"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}",
|
"parse_failed": "Error: Failed to parse yt-dlp output: {error}",
|
||||||
"analysis_failed": "Error: Analysis failed: {error}",
|
"analysis_failed": "Error: Analysis failed: {error}",
|
||||||
"generic_error": "Error: {error}",
|
"generic_error": "Error: {error}",
|
||||||
@@ -468,7 +477,13 @@
|
|||||||
"unknown": "Unknown Playlist",
|
"unknown": "Unknown Playlist",
|
||||||
"total_videos": "Total Videos: {count}",
|
"total_videos": "Total Videos: {count}",
|
||||||
"display_format": "Playlist: {title} | {count} videos",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} selected"
|
"count_selected": "{count} selected"
|
||||||
|
|||||||
+44
-11
@@ -17,7 +17,9 @@
|
|||||||
"polish": "Polaco",
|
"polish": "Polaco",
|
||||||
"italian": "Italiano",
|
"italian": "Italiano",
|
||||||
"arabic": "Árabe",
|
"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": {
|
"app": {
|
||||||
"title": "YTSage",
|
"title": "YTSage",
|
||||||
@@ -50,7 +52,9 @@
|
|||||||
"select_all": "Seleccionar Todos",
|
"select_all": "Seleccionar Todos",
|
||||||
"deselect_all": "Deseleccionar Todos",
|
"deselect_all": "Deseleccionar Todos",
|
||||||
"open_folder": "Abrir ubicación de carpeta",
|
"open_folder": "Abrir ubicación de carpeta",
|
||||||
"history": "Historial"
|
"history": "Historial",
|
||||||
|
"save_playlist": "Guardar playlist como",
|
||||||
|
"custom_command_help": "Ayuda"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Opciones Personalizadas",
|
"custom_options": "Opciones Personalizadas",
|
||||||
@@ -62,7 +66,8 @@
|
|||||||
"filter_languages_placeholder": "Filtrar idiomas (ej., en, es)...",
|
"filter_languages_placeholder": "Filtrar idiomas (ej., en, es)...",
|
||||||
"no_subtitles_available": "No hay subtítulos disponibles",
|
"no_subtitles_available": "No hay subtítulos disponibles",
|
||||||
"matching": "que coincidan con",
|
"matching": "que coincidan con",
|
||||||
"ytdlp_log_title": "Registro de yt-dlp"
|
"ytdlp_log_title": "Registro de yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "Filtrar videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Iniciar sesión con Cookies",
|
"cookies": "Iniciar sesión con Cookies",
|
||||||
@@ -96,7 +101,8 @@
|
|||||||
"cleared_message": "La configuración de cookies se ha borrado",
|
"cleared_message": "La configuración de cookies se ha borrado",
|
||||||
"active_browser": "✓ Activas: cookies del navegador ({browser})",
|
"active_browser": "✓ Activas: cookies del navegador ({browser})",
|
||||||
"active_file": "✓ Activo: archivo de cookies ({file})",
|
"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": {
|
"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.",
|
"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}",
|
"url_label": "📍 URL: {url}",
|
||||||
"args_label": "⚙️ Argumentos: {command}",
|
"args_label": "⚙️ Argumentos: {command}",
|
||||||
"download_path_label": "📁 Ruta de descarga: {path}",
|
"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": {
|
"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.",
|
"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_title": "Configuración de proxy borrada",
|
||||||
"cleared_message": "Se borró y guardó toda la configuración de proxy.",
|
"cleared_message": "Se borró y guardó toda la configuración de proxy.",
|
||||||
"saved_main": "Proxy principal guardado: {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": {
|
"download": {
|
||||||
"preparing": "Preparando descarga...",
|
"preparing": "Preparando descarga...",
|
||||||
@@ -194,7 +206,11 @@
|
|||||||
"high_audio": "Audio Alto",
|
"high_audio": "Audio Alto",
|
||||||
"medium_audio": "Audio Medio",
|
"medium_audio": "Audio Medio",
|
||||||
"low_audio": "Audio Bajo",
|
"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": {
|
"about": {
|
||||||
"title": "Acerca de YTSage",
|
"title": "Acerca de YTSage",
|
||||||
@@ -222,7 +238,11 @@
|
|||||||
"end_time": "Tiempo de Fin:",
|
"end_time": "Tiempo de Fin:",
|
||||||
"start_time_placeholder": "00:00:00 (o dejar vacío para inicio)",
|
"start_time_placeholder": "00:00:00 (o dejar vacío para inicio)",
|
||||||
"end_time_placeholder": "00:10:00 (o dejar vacío para fin)",
|
"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": {
|
"update": {
|
||||||
"title": "Actualizar yt-dlp",
|
"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.",
|
"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_general": "General",
|
||||||
"tab_format": "Formato",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "Ingresa URL de video o lista de YouTube",
|
"url_placeholder": "Ingresa URL de video o lista de YouTube",
|
||||||
@@ -435,7 +461,8 @@
|
|||||||
"generic_error": "Error: {error}",
|
"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_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}",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Actualización disponible",
|
"title": "Actualización disponible",
|
||||||
@@ -450,7 +477,13 @@
|
|||||||
"unknown": "Lista de reproducción desconocida",
|
"unknown": "Lista de reproducción desconocida",
|
||||||
"total_videos": "Total de Videos: {count}",
|
"total_videos": "Total de Videos: {count}",
|
||||||
"display_format": "Lista de reproducción: {title} | {count} videos",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} seleccionados"
|
"count_selected": "{count} seleccionados"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Tout sélectionner",
|
"select_all": "Tout sélectionner",
|
||||||
"deselect_all": "Tout désélectionner",
|
"deselect_all": "Tout désélectionner",
|
||||||
"open_folder": "Ouvrir l'emplacement du dossier",
|
"open_folder": "Ouvrir l'emplacement du dossier",
|
||||||
"history": "Historique"
|
"history": "Historique",
|
||||||
|
"save_playlist": "Enregistrer la playlist sous"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Options personnalisées",
|
"custom_options": "Options personnalisées",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Filtrer les langues (ex: en, fr)...",
|
"filter_languages_placeholder": "Filtrer les langues (ex: en, fr)...",
|
||||||
"no_subtitles_available": "Aucun sous-titre disponible",
|
"no_subtitles_available": "Aucun sous-titre disponible",
|
||||||
"matching": "correspondant",
|
"matching": "correspondant",
|
||||||
"ytdlp_log_title": "Journal yt-dlp"
|
"ytdlp_log_title": "Journal yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "Filtrer les vidéos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Se connecter avec des cookies",
|
"cookies": "Se connecter avec des cookies",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Les paramètres des cookies ont été effacés",
|
"cleared_message": "Les paramètres des cookies ont été effacés",
|
||||||
"active_browser": "✓ Actifs : cookies du navigateur ({browser})",
|
"active_browser": "✓ Actifs : cookies du navigateur ({browser})",
|
||||||
"active_file": "✓ Actif : fichier cookies ({file})",
|
"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": {
|
"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.",
|
"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.",
|
"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_general": "Général",
|
||||||
"tab_format": "Format",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "Entrer l'URL de la vidéo ou de la playlist YouTube",
|
"url_placeholder": "Entrer l'URL de la vidéo ou de la playlist YouTube",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "Erreur : {error}",
|
"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 l’application.",
|
"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 l’application.",
|
||||||
"download_failed_return_code": "Téléchargement échoué avec le code de retour {return_code}",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Mise à jour disponible",
|
"title": "Mise à jour disponible",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "Playlist inconnue",
|
"unknown": "Playlist inconnue",
|
||||||
"total_videos": "Total des vidéos : {count}",
|
"total_videos": "Total des vidéos : {count}",
|
||||||
"display_format": "Playlist : {title} | {count} vidéos",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} sélectionné(s)"
|
"count_selected": "{count} sélectionné(s)"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "सभी चुनें",
|
"select_all": "सभी चुनें",
|
||||||
"deselect_all": "सभी को अचयनित करें",
|
"deselect_all": "सभी को अचयनित करें",
|
||||||
"open_folder": "फ़ोल्डर स्थान खोलें",
|
"open_folder": "फ़ोल्डर स्थान खोलें",
|
||||||
"history": "इतिहास"
|
"history": "इतिहास",
|
||||||
|
"save_playlist": "प्लेलिस्ट को इस रूप में सहेजें"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "कस्टम विकल्प",
|
"custom_options": "कस्टम विकल्प",
|
||||||
@@ -91,11 +92,12 @@
|
|||||||
"select_folder": "डाउनलोड फ़ोल्डर चुनें",
|
"select_folder": "डाउनलोड फ़ोल्डर चुनें",
|
||||||
"sponsorblock_categories": "SponsorBlock श्रेणियां",
|
"sponsorblock_categories": "SponsorBlock श्रेणियां",
|
||||||
"sponsorblock_description": "डाउनलोड के दौरान अपने आप हटाए जाने वाले वीडियो सेगमेंट के प्रकार चुनें।\nSponsorBlock इन सेगमेंट की पहचान के लिए समुदाय द्वारा प्रस्तुत डेटा का उपयोग करता है।",
|
"sponsorblock_description": "डाउनलोड के दौरान अपने आप हटाए जाने वाले वीडियो सेगमेंट के प्रकार चुनें।\nSponsorBlock इन सेगमेंट की पहचान के लिए समुदाय द्वारा प्रस्तुत डेटा का उपयोग करता है।",
|
||||||
"select_subtitles": "उपशीर्षक चुनें",
|
"select_subtitles": "उपशीर्षک चुनें",
|
||||||
"filter_languages_placeholder": "भाषाएं फ़िल्टर करें (जैसे: hi, en)...",
|
"filter_languages_placeholder": "भाषाएं फ़िल्टर करें (जैसे: hi, en)...",
|
||||||
"no_subtitles_available": "कोई उपशीर्षक उपलब्ध नहीं",
|
"no_subtitles_available": "कोई उपशीर्षक उपलब्ध नहीं",
|
||||||
"matching": "मेल खाता",
|
"matching": "मेल खाता",
|
||||||
"ytdlp_log_title": "yt-dlp लॉग"
|
"ytdlp_log_title": "yt-dlp लॉग",
|
||||||
|
"filter_playlist_placeholder": "वीडियो फ़िल्टर करें..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "कुकीज़ के साथ लॉगिन",
|
"cookies": "कुकीज़ के साथ लॉगिन",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "कुकी सेटिंग्स साफ़ कर दी गई हैं",
|
"cleared_message": "कुकी सेटिंग्स साफ़ कर दी गई हैं",
|
||||||
"active_browser": "✓ सक्रिय: ब्राउज़र कुकीज़ ({browser})",
|
"active_browser": "✓ सक्रिय: ब्राउज़र कुकीज़ ({browser})",
|
||||||
"active_file": "✓ सक्रिय: कुकी फ़ाइल ({file})",
|
"active_file": "✓ सक्रिय: कुकी फ़ाइल ({file})",
|
||||||
"none_active": "○ कोई कुकी सक्रिय नहीं"
|
"none_active": "○ कोई कुकी सक्रिय नहीं",
|
||||||
|
"remember_settings": "अगले स्टार्टअप पर कुकी सेटिंग्स याद रखें"
|
||||||
},
|
},
|
||||||
"custom_command": {
|
"custom_command": {
|
||||||
"help_text": "नीचे अपना कस्टम yt-dlp कमांड दर्ज करें। वर्तमान URL स्वचालित रूप से जोड़ा जाएगा।<br><br>विकल्पों की पूरी सूची और उपयोग के उदाहरणों के लिए <a href=\"{docs_url}\">आधिकारिक yt-dlp दस्तावेज़ देखने के लिए यहाँ क्लिक करें</a>।<br><br>नोट: डाउनलोड पथ और फ़ाइलनाम टेम्प्लेट स्वचालित रूप से संभाले जाते हैं।",
|
"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 आउटपुट टेम्प्लेट सिंटैक्स समर्थित है.",
|
"filename_format_help": "उपलब्ध चर: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. मानक yt-dlp आउटपुट टेम्प्लेट सिंटैक्स समर्थित है.",
|
||||||
"tab_general": "सामान्य",
|
"tab_general": "सामान्य",
|
||||||
"tab_format": "प्रारूप",
|
"tab_format": "प्रारूप",
|
||||||
"tab_file": "फ़ाइल"
|
"tab_file": "फ़ाइल",
|
||||||
|
"concurrent_fragments": "एक साथ कनेक्शन",
|
||||||
|
"concurrent_fragments_help": "प्रति डाउनलोड कनेक्शन की संख्या। उच्च मान थ्रॉटलिंग को बायपास करते हैं लेकिन बहुत अधिक सेट होने पर अस्थायी ब्लॉक का कारण बन सकते हैं। डिफ़ॉल्ट: 1.",
|
||||||
|
"defaults_settings": "डिफ़ॉल्ट चयन सेटिंग्स",
|
||||||
|
"default_video_quality": "डिफ़ॉल्ट वीडियो रिज़ॉल्यूशन (ऊंचाई):",
|
||||||
|
"default_subtitle_language": "डिफ़ॉल्ट उपशीर्षक भाषा(ए):",
|
||||||
|
"defaults_help": "अपनी पसंदीदा वीडियो ऊंचाई और उपशीर्षक भाषाएं (कॉमा से अलग) सेट करें। उपलब्ध होने पर वे स्वतः चयनित हो जाएंगी।"
|
||||||
},
|
},
|
||||||
"main_ui": {
|
"main_ui": {
|
||||||
"url_placeholder": "YouTube वीडियो या प्लेलिस्ट URL दर्ज करें",
|
"url_placeholder": "YouTube वीडियो या प्लेलिस्ट URL दर्ज करें",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "त्रुटि: {error}",
|
"generic_error": "त्रुटि: {error}",
|
||||||
"download_failed_return_code_conflict": "डाउनलोड {return_code} रिटर्न कोड के साथ विफल हुआ। यह कई yt-dlp इंस्टॉलेशन के टकराव के कारण हो सकता है। किसी भी सिस्टम-इंस्टॉल्ड yt-dlp (जैसे snap या apt) को हटाकर ऐप को रीस्टार्ट करें।",
|
"download_failed_return_code_conflict": "डाउनलोड {return_code} रिटर्न कोड के साथ विफल हुआ। यह कई yt-dlp इंस्टॉलेशन के टकराव के कारण हो सकता है। किसी भी सिस्टम-इंस्टॉल्ड yt-dlp (जैसे snap या apt) को हटाकर ऐप को रीस्टार्ट करें।",
|
||||||
"download_failed_return_code": "डाउनलोड {return_code} रिटर्न कोड के साथ विफल हुआ",
|
"download_failed_return_code": "डाउनलोड {return_code} रिटर्न कोड के साथ विफल हुआ",
|
||||||
"direct_command_error": "सीधे कमांड में त्रुटि: {error}"
|
"direct_command_error": "सीधे कमांड में त्रुटि: {error}",
|
||||||
|
"private_video": "यह वीडियो निजी हो सकता है। कृपया कस्टम विकल्पों से कुकीज़ का उपयोग करें।"
|
||||||
},
|
},
|
||||||
"update_dialog": {
|
"update_dialog": {
|
||||||
"title": "अपडेट उपलब्ध",
|
"title": "अपडेट उपलब्ध",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "अज्ञात प्लेलिस्ट",
|
"unknown": "अज्ञात प्लेलिस्ट",
|
||||||
"total_videos": "कुल वीडियो: {count}",
|
"total_videos": "कुल वीडियो: {count}",
|
||||||
"display_format": "प्लेलिस्ट: {title} | {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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} चुना गया"
|
"count_selected": "{count} चुना गया"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Pilih semua",
|
"select_all": "Pilih semua",
|
||||||
"deselect_all": "Batalkan pilihan semua",
|
"deselect_all": "Batalkan pilihan semua",
|
||||||
"open_folder": "Buka lokasi folder",
|
"open_folder": "Buka lokasi folder",
|
||||||
"history": "Riwayat"
|
"history": "Riwayat",
|
||||||
|
"save_playlist": "Simpan Playlist Sebagai"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Opsi khusus",
|
"custom_options": "Opsi khusus",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Filter bahasa (misalnya: id, en)...",
|
"filter_languages_placeholder": "Filter bahasa (misalnya: id, en)...",
|
||||||
"no_subtitles_available": "Tidak ada subtitle yang tersedia",
|
"no_subtitles_available": "Tidak ada subtitle yang tersedia",
|
||||||
"matching": "yang cocok",
|
"matching": "yang cocok",
|
||||||
"ytdlp_log_title": "Log yt-dlp"
|
"ytdlp_log_title": "Log yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Masuk dengan cookies",
|
"cookies": "Masuk dengan cookies",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Pengaturan cookie telah dihapus",
|
"cleared_message": "Pengaturan cookie telah dihapus",
|
||||||
"active_browser": "✓ Aktif: cookie browser ({browser})",
|
"active_browser": "✓ Aktif: cookie browser ({browser})",
|
||||||
"active_file": "✓ Aktif: file cookie ({file})",
|
"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": {
|
"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.",
|
"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.",
|
"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_general": "Umum",
|
||||||
"tab_format": "Format",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "Masukkan URL video atau playlist YouTube",
|
"url_placeholder": "Masukkan URL video atau playlist YouTube",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "Kesalahan: {error}",
|
"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_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}",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Pembaruan Tersedia",
|
"title": "Pembaruan Tersedia",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "Playlist Tidak Dikenal",
|
"unknown": "Playlist Tidak Dikenal",
|
||||||
"total_videos": "Total Video: {count}",
|
"total_videos": "Total Video: {count}",
|
||||||
"display_format": "Playlist: {title} | {count} video",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} dipilih"
|
"count_selected": "{count} dipilih"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Seleziona tutto",
|
"select_all": "Seleziona tutto",
|
||||||
"deselect_all": "Deseleziona tutto",
|
"deselect_all": "Deseleziona tutto",
|
||||||
"open_folder": "Apri posizione cartella",
|
"open_folder": "Apri posizione cartella",
|
||||||
"history": "Cronologia"
|
"history": "Cronologia",
|
||||||
|
"save_playlist": "Salva playlist come"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Opzioni personalizzate",
|
"custom_options": "Opzioni personalizzate",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Filtra lingue (es: it, en)...",
|
"filter_languages_placeholder": "Filtra lingue (es: it, en)...",
|
||||||
"no_subtitles_available": "Nessun sottotitolo disponibile",
|
"no_subtitles_available": "Nessun sottotitolo disponibile",
|
||||||
"matching": "corrispondenti",
|
"matching": "corrispondenti",
|
||||||
"ytdlp_log_title": "Registro yt-dlp"
|
"ytdlp_log_title": "Registro yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Accedi con i cookie",
|
"cookies": "Accedi con i cookie",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Le impostazioni dei cookie sono state cancellate",
|
"cleared_message": "Le impostazioni dei cookie sono state cancellate",
|
||||||
"active_browser": "✓ Attivi: cookie del browser ({browser})",
|
"active_browser": "✓ Attivi: cookie del browser ({browser})",
|
||||||
"active_file": "✓ Attivo: file cookie ({file})",
|
"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": {
|
"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.",
|
"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.",
|
"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_general": "Generale",
|
||||||
"tab_format": "Formato",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "Inserisci URL video YouTube o playlist",
|
"url_placeholder": "Inserisci URL video YouTube o playlist",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "Errore: {error}",
|
"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 l’app.",
|
"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 l’app.",
|
||||||
"download_failed_return_code": "Download non riuscito con codice di uscita {return_code}",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Aggiornamento disponibile",
|
"title": "Aggiornamento disponibile",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "Playlist sconosciuta",
|
"unknown": "Playlist sconosciuta",
|
||||||
"total_videos": "Video totali: {count}",
|
"total_videos": "Video totali: {count}",
|
||||||
"display_format": "Playlist: {title} | {count} video",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} selezionati"
|
"count_selected": "{count} selezionati"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "すべて選択",
|
"select_all": "すべて選択",
|
||||||
"deselect_all": "すべて解除",
|
"deselect_all": "すべて解除",
|
||||||
"open_folder": "フォルダの場所を開く",
|
"open_folder": "フォルダの場所を開く",
|
||||||
"history": "履歴"
|
"history": "履歴",
|
||||||
|
"save_playlist": "プレイリストを別名で保存"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "カスタムオプション",
|
"custom_options": "カスタムオプション",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "言語でフィルタ (例: ja, en)...",
|
"filter_languages_placeholder": "言語でフィルタ (例: ja, en)...",
|
||||||
"no_subtitles_available": "利用可能な字幕がありません",
|
"no_subtitles_available": "利用可能な字幕がありません",
|
||||||
"matching": "一致",
|
"matching": "一致",
|
||||||
"ytdlp_log_title": "yt-dlpログ"
|
"ytdlp_log_title": "yt-dlpログ",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Cookieでログイン",
|
"cookies": "Cookieでログイン",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Cookie設定がクリアされました",
|
"cleared_message": "Cookie設定がクリアされました",
|
||||||
"active_browser": "✓ 有効: ブラウザーのCookie ({browser})",
|
"active_browser": "✓ 有効: ブラウザーのCookie ({browser})",
|
||||||
"active_file": "✓ 有効: Cookieファイル ({file})",
|
"active_file": "✓ 有効: Cookieファイル ({file})",
|
||||||
"none_active": "○ 有効なCookieはありません"
|
"none_active": "○ 有効なCookieはありません",
|
||||||
|
"remember_settings": "次回の起動時にCookie設定を記憶する"
|
||||||
},
|
},
|
||||||
"custom_command": {
|
"custom_command": {
|
||||||
"help_text": "以下にカスタムyt-dlpコマンドを入力してください。現在のURLは自動的に追加されます。<br><br>オプションの完全なリストと使用例については、<a href=\"{docs_url}\">こちらをクリックしてyt-dlp公式ドキュメントを参照してください</a>。<br><br>注: ダウンロードパスとファイル名テンプレートは自動的に処理されます。",
|
"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出力テンプレート構文がサポートされています。",
|
"filename_format_help": "利用可能な変数: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。標準のyt-dlp出力テンプレート構文がサポートされています。",
|
||||||
"tab_general": "一般",
|
"tab_general": "一般",
|
||||||
"tab_format": "フォーマット",
|
"tab_format": "フォーマット",
|
||||||
"tab_file": "ファイル"
|
"tab_file": "ファイル",
|
||||||
|
"concurrent_fragments": "同時接続数",
|
||||||
|
"concurrent_fragments_help": "ダウンロードごとの接続数。値を大きくするとスロットリングを回避できますが、高すぎると一時的なブロックが発生する可能性があります。デフォルト: 1。",
|
||||||
|
"defaults_settings": "デフォルト選択設定",
|
||||||
|
"default_video_quality": "デフォルトのビデオ解像度 (高さ):",
|
||||||
|
"default_subtitle_language": "デフォルトの字幕言語:",
|
||||||
|
"defaults_help": "優先するビデオの高さと字幕言語(カンマ区切り)を設定します。利用可能な場合は自動的に選択されます。"
|
||||||
},
|
},
|
||||||
"main_ui": {
|
"main_ui": {
|
||||||
"url_placeholder": "YouTubeの動画URLまたはプレイリストURLを入力",
|
"url_placeholder": "YouTubeの動画URLまたはプレイリストURLを入力",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "エラー: {error}",
|
"generic_error": "エラー: {error}",
|
||||||
"download_failed_return_code_conflict": "ダウンロードは戻りコード {return_code} で失敗しました。複数の yt-dlp インストールの競合が原因の可能性があります。システムにインストールされた yt-dlp(例: snap や apt)をアンインストールしてアプリを再起動してください。",
|
"download_failed_return_code_conflict": "ダウンロードは戻りコード {return_code} で失敗しました。複数の yt-dlp インストールの競合が原因の可能性があります。システムにインストールされた yt-dlp(例: snap や apt)をアンインストールしてアプリを再起動してください。",
|
||||||
"download_failed_return_code": "ダウンロードは戻りコード {return_code} で失敗しました",
|
"download_failed_return_code": "ダウンロードは戻りコード {return_code} で失敗しました",
|
||||||
"direct_command_error": "直接コマンドのエラー: {error}"
|
"direct_command_error": "直接コマンドのエラー: {error}",
|
||||||
|
"private_video": "この動画は非公開かもしれません。カスタムオプションからCookieを使用してください。"
|
||||||
},
|
},
|
||||||
"update_dialog": {
|
"update_dialog": {
|
||||||
"title": "アップデートが利用可能です",
|
"title": "アップデートが利用可能です",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "不明な再生リスト",
|
"unknown": "不明な再生リスト",
|
||||||
"total_videos": "総動画数: {count}",
|
"total_videos": "総動画数: {count}",
|
||||||
"display_format": "再生リスト: {title} | {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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count}個選択"
|
"count_selected": "{count}個選択"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Zaznacz wszystko",
|
"select_all": "Zaznacz wszystko",
|
||||||
"deselect_all": "Odznacz wszystko",
|
"deselect_all": "Odznacz wszystko",
|
||||||
"open_folder": "Otwórz lokalizację folderu",
|
"open_folder": "Otwórz lokalizację folderu",
|
||||||
"history": "Historia"
|
"history": "Historia",
|
||||||
|
"save_playlist": "Zapisz playlistę jako"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Opcje niestandardowe",
|
"custom_options": "Opcje niestandardowe",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Filtruj języki (np: pl, en)...",
|
"filter_languages_placeholder": "Filtruj języki (np: pl, en)...",
|
||||||
"no_subtitles_available": "Brak dostępnych napisów",
|
"no_subtitles_available": "Brak dostępnych napisów",
|
||||||
"matching": "dopasowujące",
|
"matching": "dopasowujące",
|
||||||
"ytdlp_log_title": "Log yt-dlp"
|
"ytdlp_log_title": "Log yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Zaloguj za pomocą ciasteczek",
|
"cookies": "Zaloguj za pomocą ciasteczek",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Ustawienia ciasteczek zostały wyczyszczone",
|
"cleared_message": "Ustawienia ciasteczek zostały wyczyszczone",
|
||||||
"active_browser": "✓ Aktywne: ciasteczka przeglądarki ({browser})",
|
"active_browser": "✓ Aktywne: ciasteczka przeglądarki ({browser})",
|
||||||
"active_file": "✓ Aktywny: plik ciasteczek ({file})",
|
"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": {
|
"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.",
|
"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.",
|
"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_general": "Ogólne",
|
||||||
"tab_format": "Format",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "Wprowadź URL wideo YouTube lub playlisty",
|
"url_placeholder": "Wprowadź URL wideo YouTube lub playlisty",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "Błąd: {error}",
|
"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_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}",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Dostępna aktualizacja",
|
"title": "Dostępna aktualizacja",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "Nieznana playlista",
|
"unknown": "Nieznana playlista",
|
||||||
"total_videos": "Wszystkich wideo: {count}",
|
"total_videos": "Wszystkich wideo: {count}",
|
||||||
"display_format": "Playlista: {title} | {count} wideo",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} wybrano"
|
"count_selected": "{count} wybrano"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Selecionar Tudo",
|
"select_all": "Selecionar Tudo",
|
||||||
"deselect_all": "Desmarcar Tudo",
|
"deselect_all": "Desmarcar Tudo",
|
||||||
"open_folder": "Abrir local da pasta",
|
"open_folder": "Abrir local da pasta",
|
||||||
"history": "Histórico"
|
"history": "Histórico",
|
||||||
|
"save_playlist": "Salvar playlist como"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Opções Personalizadas",
|
"custom_options": "Opções Personalizadas",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Filtrar idiomas (ex., en, pt)...",
|
"filter_languages_placeholder": "Filtrar idiomas (ex., en, pt)...",
|
||||||
"no_subtitles_available": "Nenhuma legenda disponível",
|
"no_subtitles_available": "Nenhuma legenda disponível",
|
||||||
"matching": "correspondendo",
|
"matching": "correspondendo",
|
||||||
"ytdlp_log_title": "Log do yt-dlp"
|
"ytdlp_log_title": "Log do yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Entrar com Cookies",
|
"cookies": "Entrar com Cookies",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "As configurações de cookies foram limpas",
|
"cleared_message": "As configurações de cookies foram limpas",
|
||||||
"active_browser": "✓ Ativos: cookies do navegador ({browser})",
|
"active_browser": "✓ Ativos: cookies do navegador ({browser})",
|
||||||
"active_file": "✓ Ativo: arquivo de cookies ({file})",
|
"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": {
|
"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.",
|
"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.",
|
"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_general": "Geral",
|
||||||
"tab_format": "Formato",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "Digite a URL do vídeo ou playlist do YouTube",
|
"url_placeholder": "Digite a URL do vídeo ou playlist do YouTube",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "Erro: {error}",
|
"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_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}",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Atualização Disponível",
|
"title": "Atualização Disponível",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "Playlist Desconhecida",
|
"unknown": "Playlist Desconhecida",
|
||||||
"total_videos": "Total de Vídeos: {count}",
|
"total_videos": "Total de Vídeos: {count}",
|
||||||
"display_format": "Playlist: {title} | {count} vídeos",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} selecionadas"
|
"count_selected": "{count} selecionadas"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Выбрать всё",
|
"select_all": "Выбрать всё",
|
||||||
"deselect_all": "Снять выделение",
|
"deselect_all": "Снять выделение",
|
||||||
"open_folder": "Открыть расположение папки",
|
"open_folder": "Открыть расположение папки",
|
||||||
"history": "История"
|
"history": "История",
|
||||||
|
"save_playlist": "Сохранить плейлист как"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Пользовательские опции",
|
"custom_options": "Пользовательские опции",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Фильтр языков (например, en, ru)...",
|
"filter_languages_placeholder": "Фильтр языков (например, en, ru)...",
|
||||||
"no_subtitles_available": "Субтитры недоступны",
|
"no_subtitles_available": "Субтитры недоступны",
|
||||||
"matching": "соответствующие",
|
"matching": "соответствующие",
|
||||||
"ytdlp_log_title": "Журнал yt-dlp"
|
"ytdlp_log_title": "Журнал yt-dlp",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Войти через Cookie",
|
"cookies": "Войти через Cookie",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Настройки cookie были очищены",
|
"cleared_message": "Настройки cookie были очищены",
|
||||||
"active_browser": "✓ Активны: cookie браузера ({browser})",
|
"active_browser": "✓ Активны: cookie браузера ({browser})",
|
||||||
"active_file": "✓ Активен: файл cookie ({file})",
|
"active_file": "✓ Активен: файл cookie ({file})",
|
||||||
"none_active": "○ Нет активных cookie"
|
"none_active": "○ Нет активных cookie",
|
||||||
|
"remember_settings": "Запомнить настройки cookie при следующем запуске"
|
||||||
},
|
},
|
||||||
"custom_command": {
|
"custom_command": {
|
||||||
"help_text": "Введите пользовательскую команду yt-dlp ниже. Текущий URL будет добавлен автоматически.<br><br>Для полного списка опций и примеров использования, <a href=\"{docs_url}\">нажмите здесь для просмотра официальной документации yt-dlp</a>.<br><br>Примечание: Путь загрузки и шаблон имени файла будут обработаны автоматически.",
|
"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.",
|
"filename_format_help": "Доступные переменные: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s. Поддерживается стандартный синтаксис шаблона вывода yt-dlp.",
|
||||||
"tab_general": "Общие",
|
"tab_general": "Общие",
|
||||||
"tab_format": "Формат",
|
"tab_format": "Формат",
|
||||||
"tab_file": "Файл"
|
"tab_file": "Файл",
|
||||||
|
"concurrent_fragments": "Одновременные соединения",
|
||||||
|
"concurrent_fragments_help": "Количество соединений на одну загрузку. Более высокие значения позволяют обойти ограничение скорости, но могут вызвать временную блокировку при слишком высоких значениях. По умолчанию: 1.",
|
||||||
|
"defaults_settings": "Настройки выбора по умолчанию",
|
||||||
|
"default_video_quality": "Разрешение видео по умолчанию (высота):",
|
||||||
|
"default_subtitle_language": "Язык(и) субтитров по умолчанию:",
|
||||||
|
"defaults_help": "Установите предпочтительную высоту видео и языки субтитров (через запятую). Они будут выбраны автоматически, إذا كان متاحاً."
|
||||||
},
|
},
|
||||||
"main_ui": {
|
"main_ui": {
|
||||||
"url_placeholder": "Введите URL видео или плейлиста YouTube",
|
"url_placeholder": "Введите URL видео или плейлиста YouTube",
|
||||||
@@ -452,7 +461,8 @@
|
|||||||
"generic_error": "Ошибка: {error}",
|
"generic_error": "Ошибка: {error}",
|
||||||
"download_failed_return_code_conflict": "Загрузка завершилась ошибкой с кодом {return_code}. Это может быть из-за конфликта нескольких установок yt-dlp. Попробуйте удалить системно установленный yt-dlp (например, через snap или apt) и перезапустите приложение.",
|
"download_failed_return_code_conflict": "Загрузка завершилась ошибкой с кодом {return_code}. Это может быть из-за конфликта нескольких установок yt-dlp. Попробуйте удалить системно установленный yt-dlp (например, через snap или apt) и перезапустите приложение.",
|
||||||
"download_failed_return_code": "Загрузка не удалась, код {return_code}",
|
"download_failed_return_code": "Загрузка не удалась, код {return_code}",
|
||||||
"direct_command_error": "Ошибка в прямой команде: {error}"
|
"direct_command_error": "Ошибка в прямой команде: {error}",
|
||||||
|
"private_video": "Это видео может быть приватным. Пожалуйста, используйте файлы cookie из пользовательских настроек."
|
||||||
},
|
},
|
||||||
"update_dialog": {
|
"update_dialog": {
|
||||||
"title": "Доступно обновление",
|
"title": "Доступно обновление",
|
||||||
@@ -467,7 +477,13 @@
|
|||||||
"unknown": "Неизвестный плейлист",
|
"unknown": "Неизвестный плейлист",
|
||||||
"total_videos": "Всего видео: {count}",
|
"total_videos": "Всего видео: {count}",
|
||||||
"display_format": "Плейлист: {title} | {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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "выбрано: {count}"
|
"count_selected": "выбрано: {count}"
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "Tümünü seç",
|
"select_all": "Tümünü seç",
|
||||||
"deselect_all": "Tüm seçimi kaldır",
|
"deselect_all": "Tüm seçimi kaldır",
|
||||||
"open_folder": "Klasör konumunu aç",
|
"open_folder": "Klasör konumunu aç",
|
||||||
"history": "Geçmiş"
|
"history": "Geçmiş",
|
||||||
|
"save_playlist": "Oynatma Listesini Farklı Kaydet"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "Özel seçenekler",
|
"custom_options": "Özel seçenekler",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "Dilleri filtrele (örn: tr, en)...",
|
"filter_languages_placeholder": "Dilleri filtrele (örn: tr, en)...",
|
||||||
"no_subtitles_available": "Altyazı mevcut değil",
|
"no_subtitles_available": "Altyazı mevcut değil",
|
||||||
"matching": "eşleşen",
|
"matching": "eşleşen",
|
||||||
"ytdlp_log_title": "yt-dlp Günlüğü"
|
"ytdlp_log_title": "yt-dlp Günlüğü",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "Çerezlerle giriş yap",
|
"cookies": "Çerezlerle giriş yap",
|
||||||
@@ -129,7 +131,8 @@
|
|||||||
"cleared_message": "Çerez ayarları temizlendi",
|
"cleared_message": "Çerez ayarları temizlendi",
|
||||||
"active_browser": "✓ Etkin: Tarayıcı çerezleri ({browser})",
|
"active_browser": "✓ Etkin: Tarayıcı çerezleri ({browser})",
|
||||||
"active_file": "✓ Etkin: Çerez dosyası ({file})",
|
"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": {
|
"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.",
|
"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_title": "Coğrafi proxy ayarlandı",
|
||||||
"geo_set_message": "Coğrafi doğrulama proxy'si ayarlandı ve kaydedildi: {proxy}",
|
"geo_set_message": "Coğrafi doğrulama proxy'si ayarlandı ve kaydedildi: {proxy}",
|
||||||
"cleared_title": "Proxy ayarları temizlendi",
|
"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": {
|
"download": {
|
||||||
"preparing": "İndirme hazırlanıyor...",
|
"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.",
|
"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_general": "Genel",
|
||||||
"tab_format": "Biçim",
|
"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": {
|
"main_ui": {
|
||||||
"url_placeholder": "YouTube video veya oynatma listesi URL'sini girin",
|
"url_placeholder": "YouTube video veya oynatma listesi URL'sini girin",
|
||||||
@@ -450,7 +461,8 @@
|
|||||||
"generic_error": "Hata: {error}",
|
"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_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",
|
"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": {
|
"update_dialog": {
|
||||||
"title": "Güncelleme Mevcut",
|
"title": "Güncelleme Mevcut",
|
||||||
@@ -465,7 +477,13 @@
|
|||||||
"unknown": "Bilinmeyen Oynatma Listesi",
|
"unknown": "Bilinmeyen Oynatma Listesi",
|
||||||
"total_videos": "Toplam Video: {count}",
|
"total_videos": "Toplam Video: {count}",
|
||||||
"display_format": "Oynatma Listesi: {title} | {count} video",
|
"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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "{count} seçildi"
|
"count_selected": "{count} seçildi"
|
||||||
@@ -536,14 +554,21 @@
|
|||||||
"redownload_confirm_message": "Tekrar indir?\n\n{title}",
|
"redownload_confirm_message": "Tekrar indir?\n\n{title}",
|
||||||
"redownload_started": "İndirme başladı",
|
"redownload_started": "İndirme başladı",
|
||||||
"no_url_error": "Geçmiş kaydında URL bulunamadı",
|
"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": {
|
"ffmpeg": {
|
||||||
"installation_title": "FFmpeg Kurulumu",
|
"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:",
|
"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",
|
"install_button": "FFmpeg Kur",
|
||||||
"manual_guide": "Manuel Kılavuz",
|
"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": {
|
"ytdlp_setup": {
|
||||||
"required_title": "yt-dlp Kurulumu Gerekli",
|
"required_title": "yt-dlp Kurulumu Gerekli",
|
||||||
|
|||||||
+45
-10
@@ -83,7 +83,8 @@
|
|||||||
"select_all": "全选",
|
"select_all": "全选",
|
||||||
"deselect_all": "取消全选",
|
"deselect_all": "取消全选",
|
||||||
"open_folder": "打开文件夹位置",
|
"open_folder": "打开文件夹位置",
|
||||||
"history": "历史"
|
"history": "历史",
|
||||||
|
"save_playlist": "保存播放列表为"
|
||||||
},
|
},
|
||||||
"dialogs": {
|
"dialogs": {
|
||||||
"custom_options": "自定义选项",
|
"custom_options": "自定义选项",
|
||||||
@@ -95,7 +96,8 @@
|
|||||||
"filter_languages_placeholder": "过滤语言(例如:en, zh)...",
|
"filter_languages_placeholder": "过滤语言(例如:en, zh)...",
|
||||||
"no_subtitles_available": "无可用字幕",
|
"no_subtitles_available": "无可用字幕",
|
||||||
"matching": "匹配",
|
"matching": "匹配",
|
||||||
"ytdlp_log_title": "yt-dlp 日志"
|
"ytdlp_log_title": "yt-dlp 日志",
|
||||||
|
"filter_playlist_placeholder": "Filter videos..."
|
||||||
},
|
},
|
||||||
"tabs": {
|
"tabs": {
|
||||||
"cookies": "使用 Cookie 登录",
|
"cookies": "使用 Cookie 登录",
|
||||||
@@ -126,7 +128,11 @@
|
|||||||
"browser_selected_title": "已应用浏览器 Cookie",
|
"browser_selected_title": "已应用浏览器 Cookie",
|
||||||
"browser_applied_message": "将从以下位置提取浏览器 cookie:{browser}",
|
"browser_applied_message": "将从以下位置提取浏览器 cookie:{browser}",
|
||||||
"cleared_title": "已清除 Cookie",
|
"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": {
|
"custom_command": {
|
||||||
"help_text": "在下面输入您的自定义 yt-dlp 命令。当前网址将自动附加。<br><br>有关选项和使用示例的完整列表,<a href=\"{docs_url}\">点击此处查看官方 yt-dlp 文档</a>。<br><br>注意:下载路径和文件名模板将自动处理。",
|
"help_text": "在下面输入您的自定义 yt-dlp 命令。当前网址将自动附加。<br><br>有关选项和使用示例的完整列表,<a href=\"{docs_url}\">点击此处查看官方 yt-dlp 文档</a>。<br><br>注意:下载路径和文件名模板将自动处理。",
|
||||||
@@ -139,7 +145,14 @@
|
|||||||
"full_command": "🔧 完整命令:{command}",
|
"full_command": "🔧 完整命令:{command}",
|
||||||
"command_success": "✅ 自定义命令执行成功!",
|
"command_success": "✅ 自定义命令执行成功!",
|
||||||
"command_failed": "❌ 命令失败,退出代码 {code}",
|
"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": {
|
"proxy": {
|
||||||
"help_text": "配置下载的代理设置。留空使用直接连接。",
|
"help_text": "配置下载的代理设置。留空使用直接连接。",
|
||||||
@@ -167,7 +180,9 @@
|
|||||||
"geo_set_title": "已设置地理代理",
|
"geo_set_title": "已设置地理代理",
|
||||||
"geo_set_message": "地理验证代理已设置并保存: {proxy}",
|
"geo_set_message": "地理验证代理已设置并保存: {proxy}",
|
||||||
"cleared_title": "代理设置已清除",
|
"cleared_title": "代理设置已清除",
|
||||||
"cleared_message": "所有代理设置已清除并保存。"
|
"cleared_message": "所有代理设置已清除并保存。",
|
||||||
|
"saved_main": "Saved main proxy: {proxy}",
|
||||||
|
"saved_geo": "Saved geo proxy: {proxy}"
|
||||||
},
|
},
|
||||||
"download": {
|
"download": {
|
||||||
"preparing": "正在准备下载...",
|
"preparing": "正在准备下载...",
|
||||||
@@ -330,7 +345,13 @@
|
|||||||
"filename_format_help": "可用变量: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。支持标准的 yt-dlp 输出模板语法。",
|
"filename_format_help": "可用变量: %(title)s, %(uploader)s, %(upload_date)s, %(resolution)s, %(id)s, %(ext)s。支持标准的 yt-dlp 输出模板语法。",
|
||||||
"tab_general": "一般",
|
"tab_general": "一般",
|
||||||
"tab_format": "格式",
|
"tab_format": "格式",
|
||||||
"tab_file": "文件"
|
"tab_file": "文件",
|
||||||
|
"concurrent_fragments": "并发连接数",
|
||||||
|
"concurrent_fragments_help": "每个下载的连接数。较高的值可以绕过限速,但如果设置得太高,可能会导致临时被封。默认值:1。",
|
||||||
|
"defaults_settings": "默认选择设置",
|
||||||
|
"default_video_quality": "默认视频分辨率 (高度):",
|
||||||
|
"default_subtitle_language": "默认字幕语言:",
|
||||||
|
"defaults_help": "设置您首选的视频高度和字幕语言(用逗号分隔)。如果可用,它们将被自动选择。"
|
||||||
},
|
},
|
||||||
"main_ui": {
|
"main_ui": {
|
||||||
"url_placeholder": "输入 YouTube 视频或播放列表网址",
|
"url_placeholder": "输入 YouTube 视频或播放列表网址",
|
||||||
@@ -440,7 +461,8 @@
|
|||||||
"generic_error": "错误:{error}",
|
"generic_error": "错误:{error}",
|
||||||
"download_failed_return_code_conflict": "下载失败,返回码 {return_code}。这可能是由于存在多个 yt-dlp 安装导致冲突。请卸载系统中安装的 yt-dlp(例如通过 snap 或 apt),然后重启应用。",
|
"download_failed_return_code_conflict": "下载失败,返回码 {return_code}。这可能是由于存在多个 yt-dlp 安装导致冲突。请卸载系统中安装的 yt-dlp(例如通过 snap 或 apt),然后重启应用。",
|
||||||
"download_failed_return_code": "下载失败,返回码 {return_code}",
|
"download_failed_return_code": "下载失败,返回码 {return_code}",
|
||||||
"direct_command_error": "直接命令出错:{error}"
|
"direct_command_error": "直接命令出错:{error}",
|
||||||
|
"private_video": "此视频可能是私享视频。请使用自定义选项中的 cookie。"
|
||||||
},
|
},
|
||||||
"update_dialog": {
|
"update_dialog": {
|
||||||
"title": "有可用更新",
|
"title": "有可用更新",
|
||||||
@@ -455,7 +477,13 @@
|
|||||||
"unknown": "未知播放列表",
|
"unknown": "未知播放列表",
|
||||||
"total_videos": "总视频数:{count}",
|
"total_videos": "总视频数:{count}",
|
||||||
"display_format": "播放列表:{title} | {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": {
|
"subtitle_selection": {
|
||||||
"count_selected": "已选择{count}个"
|
"count_selected": "已选择{count}个"
|
||||||
@@ -526,14 +554,21 @@
|
|||||||
"redownload_confirm_message": "重新下载?\n\n{title}",
|
"redownload_confirm_message": "重新下载?\n\n{title}",
|
||||||
"redownload_started": "已开始下载",
|
"redownload_started": "已开始下载",
|
||||||
"no_url_error": "历史记录中未找到 URL",
|
"no_url_error": "历史记录中未找到 URL",
|
||||||
"redownload_failed": "无法开始重新下载: {error}"
|
"redownload_failed": "无法开始重新下载: {error}",
|
||||||
|
"loading": "Loading history..."
|
||||||
},
|
},
|
||||||
"ffmpeg": {
|
"ffmpeg": {
|
||||||
"installation_title": "FFmpeg 安装",
|
"installation_title": "FFmpeg 安装",
|
||||||
"installation_message": "YTSage 需要 FFmpeg 来处理视频。\n\n请选择下面的安装选项:",
|
"installation_message": "YTSage 需要 FFmpeg 来处理视频。\n\n请选择下面的安装选项:",
|
||||||
"install_button": "安装 FFmpeg",
|
"install_button": "安装 FFmpeg",
|
||||||
"manual_guide": "手动指南",
|
"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": {
|
"ytdlp_setup": {
|
||||||
"required_title": "需要设置 yt-dlp",
|
"required_title": "需要设置 yt-dlp",
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ class ConfigManager:
|
|||||||
"check_app_updates": True,
|
"check_app_updates": True,
|
||||||
"check_beta_updates": False,
|
"check_beta_updates": False,
|
||||||
"last_update_check": 0,
|
"last_update_check": 0,
|
||||||
|
"concurrent_fragments": 1,
|
||||||
"language": "en",
|
"language": "en",
|
||||||
"ytdlp_channel": "stable",
|
"ytdlp_channel": "stable",
|
||||||
"force_output_format": False,
|
"force_output_format": False,
|
||||||
@@ -94,7 +95,7 @@ class ConfigManager:
|
|||||||
"force_audio_format": False,
|
"force_audio_format": False,
|
||||||
"preferred_audio_format": "best",
|
"preferred_audio_format": "best",
|
||||||
"audio_normalization": False,
|
"audio_normalization": False,
|
||||||
"filename_format": "%(title)s_%(resolution)s.%(ext)s",
|
"filename_format": "%(title)s_%(resolution)s_[%(id)s].%(ext)s",
|
||||||
"cached_versions": {
|
"cached_versions": {
|
||||||
"ytdlp": {"version": None, "path": None, "last_check": 0, "path_mtime": 0},
|
"ytdlp": {"version": None, "path": None, "last_check": 0, "path_mtime": 0},
|
||||||
"ffmpeg": {"version": None, "path": None, "last_check": 0, "path_mtime": 0},
|
"ffmpeg": {"version": None, "path": None, "last_check": 0, "path_mtime": 0},
|
||||||
|
|||||||
Reference in New Issue
Block a user