Auteur : Maxime ETUNDI
GitHub : https://github.com/maximeetundi/video-converter-pro
Contact : maximeetundi@gmail.com
- Vue d'ensemble
- Fonctionnalités
- Architecture technique
- Installation
- Configuration
- Utilisation
- API
- Dépannage
- Contribution
- Licence
Le Convertisseur Vidéo Pro est une application web Flask moderne qui permet de télécharger des vidéos depuis diverses sources (HTTP, torrents, liens magnets) et de les convertir dans différents formats et résolutions. L'interface utilisateur est élégante, responsive et inclut un mode sombre.
- Interface web moderne avec thème sombre/clair
- Téléchargement de vidéos depuis URLs HTTP et torrents
- Conversion multi-format (MP4, MKV, AVI, WebM)
- Conversion multi-résolution (480p, 720p, 1080p)
- Lecteur vidéo intégré pour prévisualisation
- Suivi de progression en temps réel
- Historique des téléchargements
- Nettoyage automatique des fichiers (24h)
- Statistiques d'utilisation
- URLs HTTP/HTTPS : Téléchargement direct de fichiers vidéo
- Torrents : Support des liens magnet et fichiers .torrent
- Progression : Suivi en temps réel avec pourcentage
- Formats supportés : MP4, MKV, AVI, WebM
- Résolutions : 480p, 720p, 1080p
- Codec vidéo : H.264 (libx264) avec preset rapide
- Codec audio : AAC 128kbps
- Progression : Suivi frame par frame avec pourcentage
- Design moderne : Interface glassmorphique avec Tailwind CSS
- Responsive : Adapté mobile, tablette et desktop
- Thème adaptatif : Mode sombre/clair automatique
- Lecteur intégré : Prévisualisation avec Plyr.js
- Icônes : Font Awesome pour l'iconographie
- Stockage organisé : Séparation fichiers originaux/convertis
- Expiration : Suppression automatique après 24h
- Métadonnées : Taille, date d'expiration
- Actions : Télécharger, supprimer, copier lien, prévisualiser
server_pikpak.py
├── Flask Application
├── SQLite Database (historique)
├── File Management
├── Video Processing (FFmpeg)
├── Download Management (aria2c/requests)
└── Progress Tracking
HTML_TEMPLATE
├── Tailwind CSS (styling)
├── Font Awesome (icons)
├── Plyr.js (video player)
├── Vanilla JavaScript (interactions)
└── Responsive Design
projet/
├── server_pikpak.py # Application principale
├── history.db # Base de données SQLite
├── converted/ # Dossier des fichiers convertis
├── fichier_original.mp4 # Fichiers téléchargés
└── autre_fichier.mkv # Autres fichiers
- Python 3.7+
- FFmpeg
- aria2c
- Connexion Internet
sudo apt update && sudo apt upgrade -ysudo apt install python3 python3-pip python3-venv -ysudo apt install ffmpeg -ysudo apt install aria2 -ypython3 --version
ffmpeg -version
aria2c --version# Créer un dossier pour le projet
mkdir convertisseur-video
cd convertisseur-video
# Créer un environnement virtuel
python3 -m venv venv
source venv/bin/activate
# Installer les dépendances Python
pip install flask requests
# Cloner le projet depuis GitHub
git clone https://github.com/maximeetundi/video-converter-pro.git .
# Ou télécharger manuellement le fichier server_pikpak.py
# wget https://raw.githubusercontent.com/maximeetundi/video-converter-pro/main/server_pikpak.py
# Rendre le fichier exécutable
chmod +x server_pikpak.pypython3 server_pikpak.py- Télécharger Python depuis python.org
- Cocher "Add to PATH" pendant l'installation
- Vérifier :
python --version
# Méthode 1 : Chocolatey (recommandée)
choco install ffmpeg
# Méthode 2 : Scoop
scoop install ffmpeg
# Méthode 3 : Manuelle
# Télécharger depuis https://ffmpeg.org/download.html
# Extraire dans C:\ffmpeg
# Ajouter C:\ffmpeg\bin au PATH# Méthode 1 : Chocolatey
choco install aria2
# Méthode 2 : Scoop
scoop install aria2
# Méthode 3 : Manuelle
# Télécharger depuis https://aria2.github.io/
# Extraire et ajouter au PATH# Créer un dossier
mkdir convertisseur-video
cd convertisseur-video
# Créer environnement virtuel
python -m venv venv
venv\Scripts\activate
# Installer dépendances
pip install flask requests
# Cloner le projet depuis GitHub
git clone https://github.com/maximeetundi/video-converter-pro.git .
# Ou télécharger manuellement
# Invoke-WebRequest -Uri "https://raw.githubusercontent.com/maximeetundi/video-converter-pro/main/server_pikpak.py" -OutFile "server_pikpak.py"python server_pikpak.py/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# Python (si pas déjà installé)
brew install python
# FFmpeg
brew install ffmpeg
# aria2c
brew install aria2# Créer le projet
mkdir convertisseur-video
cd convertisseur-video
# Environnement virtuel
python3 -m venv venv
source venv/bin/activate
# Dépendances
pip install flask requests
# Cloner le projet depuis GitHub
git clone https://github.com/maximeetundi/video-converter-pro.git .
# Ou télécharger manuellement
# curl -O https://raw.githubusercontent.com/maximeetundi/video-converter-pro/main/server_pikpak.pypython3 server_pikpak.pyFROM python:3.11-slim
# Installation des dépendances système
RUN apt-get update && apt-get install -y \
ffmpeg \
aria2 \
&& rm -rf /var/lib/apt/lists/*
# Création du répertoire de travail
WORKDIR /app
# Installation des dépendances Python
RUN pip install flask requests
# Copie du code source
COPY server_pikpak.py .
# Création des dossiers
RUN mkdir converted
# Exposition du port
EXPOSE 8000
# Commande de démarrage
CMD ["python", "server_pikpak.py"]# Construire l'image
docker build -t convertisseur-video .
# Lancer le conteneur
docker run -d -p 8000:8000 -v $(pwd)/data:/app convertisseur-videoversion: '3.8'
services:
convertisseur:
build: .
ports:
- "8000:8000"
volumes:
- ./data:/app
- ./converted:/app/converted
restart: unless-stopped# Port d'écoute (défaut: 8000)
export PORT=8000
# Répertoire de travail
export UPLOAD_DIR="/path/to/files"
# Répertoire des fichiers convertis
export CONVERTED_DIR="/path/to/converted"
# Chemin de la base de données
export DB_PATH="/path/to/history.db"Les paramètres de conversion peuvent être modifiés dans la fonction convert_video() :
cmd = [
"ffmpeg", "-y", "-i", filepath,
"-vf", f"scale=-2:{height}",
"-c:v", "libx264", # Codec vidéo
"-preset", "fast", # Preset de vitesse
"-crf", "28", # Qualité (18-28)
"-c:a", "aac", # Codec audio
"-b:a", "128k", # Bitrate audio
output_path
]Pour modifier les paramètres de téléchargement torrent :
subprocess.run([
"aria2c",
"--seed-time=0", # Temps de seed
"--max-connection-per-server=16", # Connexions max
"--split=16", # Segments de téléchargement
url,
"-d", UPLOAD_DIR
], check=True)- Accéder à
http://localhost:8000 - Coller un lien vidéo (HTTP ou magnet)
- Sélectionner résolutions et formats
- Cliquer sur "Lancer"
- Suivre la progression
- Télécharger les fichiers convertis
- Cliquer sur l'icône "baguette magique" d'un fichier original
- Sélectionner nouvelles résolutions/formats
- Lancer la reconversion
- Cliquer sur l'icône "play" pour ouvrir le lecteur
- Contrôles complets (lecture, pause, volume, plein écran)
- Fermer avec la croix ou clic extérieur
- Télécharger : Icône de flèche vers le bas
- Copier lien : Icône de copie (lien direct)
- Supprimer : Icône de poubelle (confirmation requise)
- Bouton "Thème" en haut à droite
- Bascule entre mode clair et sombre
- Préférence sauvegardée localement
Description: Page d'accueil avec interface utilisateur
Retour: HTML template avec liste des fichiers
Description: Télécharge et convertit une vidéo
Paramètres:
- url: URL de la vidéo
- resolutions[]: Liste des résolutions
- formats[]: Liste des formats
- perform_conversion: Case à cocher pour conversion
Retour: Redirection vers /
Description: Convertit un fichier existant
Paramètres:
- resolutions[]: Nouvelles résolutions
- formats[]: Nouveaux formats
Retour: Redirection vers /
Description: État de la progression actuelle
Retour: JSON
{
"message": "Téléchargement... 45%",
"percentage": 45,
"done": false
}
Description: Télécharge un fichier converti
Retour: Fichier en téléchargement
Description: Télécharge un fichier original
Retour: Fichier en téléchargement
Description: Supprime un fichier
Paramètres:
- type: "original" ou "converted"
- filename: Nom du fichier
Retour: Status 204
{
"message": "Conversion... video_123 (2/6) - 67.3%",
"percentage": 67.3,
"done": false
}{
"message": "❌ Erreur: Fichier non trouvé",
"done": true
}# Linux
sudo apt install ffmpeg
# macOS
brew install ffmpeg
# Windows
choco install ffmpeg# Linux
sudo apt install aria2
# macOS
brew install aria2
# Windows
choco install aria2# Trouver le processus
sudo lsof -i :8000
# Tuer le processus
sudo kill -9 <PID>
# Ou changer le port
export PORT=8080
python3 server_pikpak.py# Donner les permissions au dossier
chmod 755 /path/to/project
chmod +x server_pikpak.py# Supprimer et recréer
rm history.db
# Redémarrer l'applicationapp.run(host='0.0.0.0', port=8000, debug=True)# Ajouter dans convert_video()
cmd.extend(["-v", "verbose"])# Ajouter dans download_task()
cmd.extend(["--log", "aria2.log", "--log-level=info"])# Conversion plus rapide (qualité réduite)
"-preset", "ultrafast"
"-crf", "30"
# Meilleure qualité (plus lent)
"-preset", "slow"
"-crf", "20"# aria2c optimisé
"--max-connection-per-server=16"
"--split=16"
"--max-concurrent-downloads=5"# Configuration et initialisation
Flask app, dossiers, base de données
# Fonctions utilitaires
format_size(), cleanup_old_files(), init_db()
# Fonctions de traitement
convert_video(), start_processing_thread()
# Routes Flask
@app.route() pour chaque endpoint
# Template HTML
HTML_TEMPLATE avec JavaScript intégré// Fonctions utilitaires
checkProgress(), deleteFile(), toggleTheme()
// Gestion des modales
openPlayerModal(), closePlayerModal()
openConversionModal(), closeModal()
// Interactions
copyToClipboard(), window.onclick- Utiliser les conventions PEP 8
- Documenter les fonctions complexes
- Gérer les exceptions proprement
- Utiliser les context managers pour les fichiers
- Utiliser des noms de fonctions explicites
- Gérer les erreurs avec try/catch
- Optimiser les requêtes AJAX
- Maintenir la compatibilité navigateurs
- Structure sémantique HTML5
- Classes Tailwind CSS consistantes
- Responsive design mobile-first
- Accessibilité (ARIA labels)
# Dans convert_video()
formats = ["mp4", "mkv", "avi", "webm", "nouveau_format"]
# Dans HTML_TEMPLATE
<option value="nouveau_format">Nouveau Format</option># Dans convert_video()
resolutions = ["480p", "720p", "1080p", "1440p"]
# Ajuster la logique de hauteur
height = res.replace("p", "")def download_from_new_service(url):
# Logique de téléchargement
pass
# Dans download_task()
elif "nouveau_service.com" in url:
downloaded_filepath = download_from_new_service(url)import unittest
import tempfile
import os
class TestVideoConverter(unittest.TestCase):
def setUp(self):
self.temp_dir = tempfile.mkdtemp()
def test_format_size(self):
self.assertEqual(format_size(1024), "1.00 KB")
def test_file_cleanup(self):
# Test de nettoyage des fichiers
passdef test_download_and_convert():
# Test complet de téléchargement et conversion
pass
def test_api_endpoints():
# Test des endpoints Flask
passCe projet est sous licence MIT. Vous êtes libre de l'utiliser, le modifier et le distribuer.
MIT License
Copyright (c) 2024 Maxime ETUNDI
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Pour toute question ou problème :
- Vérifiez la section Dépannage
- Consultez les logs d'erreur
- Créez une issue sur le dépôt GitHub
- Contactez le développeur : maximeetundi@gmail.com
- Dépôt GitHub : https://github.com/maximeetundi/video-converter-pro
- Auteur : Maxime ETUNDI
- Email : maximeetundi@gmail.com
Développé par : Maxime ETUNDI
Version de la documentation : 1.0
Dernière mise à jour : Décembre 2024