Backend Go: - Remplacement complet des anciennes migrations par la base V1 alignée sur ORIGIN. - Durcissement global du parsing JSON (BindAndValidateJSON + RespondWithAppError). - Sécurisation de config.go, CORS, statuts de santé et monitoring. - Implémentation des transactions P0 (RBAC, duplication de playlists, social toggles). - Ajout d’un job worker structuré (emails, analytics, thumbnails) + tests associés. - Nouvelle doc backend : AUDIT_CONFIG, BACKEND_CONFIG, AUTH_PASSWORD_RESET, JOB_WORKER_*. Chat server (Rust): - Refonte du pipeline JWT + sécurité, audit et rate limiting avancé. - Implémentation complète du cycle de message (read receipts, delivered, edit/delete, typing). - Nettoyage des panics, gestion d’erreurs robuste, logs structurés. - Migrations chat alignées sur le schéma UUID et nouvelles features. Stream server (Rust): - Refonte du moteur de streaming (encoding pipeline + HLS) et des modules core. - Transactions P0 pour les jobs et segments, garanties d’atomicité. - Documentation détaillée de la pipeline (AUDIT_STREAM_*, DESIGN_STREAM_PIPELINE, TRANSACTIONS_P0_IMPLEMENTATION). Documentation & audits: - TRIAGE.md et AUDIT_STABILITY.md à jour avec l’état réel des 3 services. - Cartographie complète des migrations et des transactions (DB_MIGRATIONS_*, DB_TRANSACTION_PLAN, AUDIT_DB_TRANSACTIONS, TRANSACTION_TESTS_PHASE3). - Scripts de reset et de cleanup pour la lab DB et la V1. Ce commit fige l’ensemble du travail de stabilisation P0 (UUID, backend, chat et stream) avant les phases suivantes (Coherence Guardian, WS hardening, etc.).
7.4 KiB
🎬 Commandes FFmpeg - Documentation technique
Date: 2025-01-27
Version: 0.2.0
Vue d'ensemble
Ce document décrit les commandes FFmpeg générées par le FfmpegCommandBuilder pour chaque codec et format de sortie.
Format HLS (HTTP Live Streaming)
Structure générale
Toutes les commandes HLS suivent cette structure:
ffmpeg -y \
-hide_banner \
-nostats \
-i {input_file} \
-c:a {codec} \
-b:a {bitrate} \
-ar {sample_rate} \
-ac {channels} \
-f hls \
-hls_time {segment_duration} \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename {segment_pattern} \
{output_playlist}
Options HLS
-f hls: Format de sortie HLS-hls_time {seconds}: Durée de chaque segment (défaut: 6 secondes)-hls_playlist_type vod: Type VOD (Video On Demand) - liste complète-hls_list_size 0: Liste complète des segments (0 = tous)-hls_segment_filename {pattern}: Pattern de nommage des segments
Codecs supportés
AAC (Advanced Audio Coding)
Commande complète:
ffmpeg -y -hide_banner -nostats \
-i input.wav \
-c:a aac \
-b:a 192000 \
-ar 44100 \
-ac 2 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Paramètres:
- Codec:
aac(encodeur natif FFmpeg) - Bitrate: 64-320 kbps (selon profil)
- Sample rate: 22.05-48 kHz
- Channels: 1 (mono) ou 2 (stéréo)
Avantages:
- Compatibilité maximale (iOS, Safari, Chrome, Firefox)
- Bonne qualité à bas débit
- Support HE-AAC pour très bas débit
MP3 (MPEG-1 Audio Layer 3)
Commande complète:
ffmpeg -y -hide_banner -nostats \
-i input.wav \
-c:a libmp3lame \
-b:a 192000 \
-ar 44100 \
-ac 2 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Paramètres:
- Codec:
libmp3lame(encodeur LAME) - Bitrate: 64-320 kbps
- Sample rate: 44.1 kHz (standard)
- Channels: 2 (stéréo)
Avantages:
- Compatibilité universelle
- Support VBR (Variable Bitrate)
- Qualité acceptable à 192+ kbps
Limitations:
- Pas de support natif dans certains navigateurs modernes
- Qualité inférieure à AAC à même bitrate
Opus
Commande complète:
ffmpeg -y -hide_banner -nostats \
-i input.wav \
-c:a libopus \
-b:a 192000 \
-ar 48000 \
-ac 2 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Paramètres:
- Codec:
libopus(encodeur Opus) - Bitrate: 64-320 kbps
- Sample rate: 48 kHz (recommandé)
- Channels: 2 (stéréo)
Avantages:
- Excellente qualité à bas débit
- Latence très faible
- Support natif dans Chrome, Firefox, Edge
Limitations:
- Pas de support natif dans Safari/iOS (nécessite WebM)
- HLS avec Opus nécessite container WebM (non standard)
Note: Pour HLS standard, Opus n'est pas recommandé. Utiliser AAC à la place.
FLAC (Free Lossless Audio Codec)
Commande complète:
ffmpeg -y -hide_banner -nostats \
-i input.wav \
-c:a flac \
-compression_level 5 \
-ar 44100 \
-ac 2 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Paramètres:
- Codec:
flac(lossless) - Compression level: 0-8 (5 = équilibre vitesse/compression)
- Sample rate: 44.1-96 kHz
- Channels: 2 (stéréo)
Avantages:
- Qualité lossless (sans perte)
- Compression efficace
- Support métadonnées
Limitations:
- Taille de fichiers importante
- Pas de support natif dans tous les navigateurs
- HLS avec FLAC non standard (utiliser MP4/FLAC à la place)
Note: Pour HLS, FLAC n'est pas recommandé. Utiliser AAC haute qualité ou MP3 à la place.
Patterns de nommage
Segments
Le pattern segment_%05d.ts génère:
segment_00001.tssegment_00002.tssegment_00003.ts- ...
Format: %05d = 5 chiffres avec zéros à gauche
Playlist
Le fichier playlist est toujours nommé index.m3u8 dans le répertoire de sortie.
Options globales
-y
Écrase les fichiers existants sans demander confirmation.
-hide_banner
Masque la bannière d'information FFmpeg.
-nostats
Désactive l'affichage des statistiques (on parse manuellement si besoin).
-i {input_file}
Fichier d'entrée (WAV, MP3, FLAC, etc.).
Options audio
-c:a {codec}
Codec audio à utiliser.
-b:a {bitrate}
Bitrate audio en bps (bits par seconde).
Exemples:
-b:a 64000= 64 kbps-b:a 128000= 128 kbps-b:a 192000= 192 kbps-b:a 320000= 320 kbps
-ar {sample_rate}
Sample rate (fréquence d'échantillonnage) en Hz.
Valeurs courantes:
22050= 22.05 kHz (qualité téléphone)44100= 44.1 kHz (qualité CD)48000= 48 kHz (qualité professionnelle)
-ac {channels}
Nombre de canaux.
Valeurs:
1= Mono2= Stéréo
Validation et erreurs
Vérification FFmpeg installé
ffmpeg -version
Test de commande
ffmpeg -y -hide_banner -nostats \
-i test.wav \
-c:a aac \
-b:a 192000 \
-ar 44100 \
-ac 2 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Erreurs communes
-
Codec non disponible: Installer les codecs manquants
# Ubuntu/Debian sudo apt-get install ffmpeg libavcodec-extra -
Fichier d'entrée invalide: Vérifier le format et l'intégrité
ffprobe input.wav -
Répertoire de sortie inaccessible: Vérifier les permissions
chmod 755 output_dir
Optimisations
Qualité vs Vitesse
- Vitesse:
-preset fast(non utilisé actuellement, à ajouter) - Qualité: Multi-pass encoding (non implémenté P0)
Parallélisation
FFmpeg utilise automatiquement tous les cores disponibles pour l'encodage.
Mémoire
- Buffer size: Ajustable via
-bufsize(non utilisé actuellement) - Threads: Ajustable via
-threads(auto par défaut)
Exemples par profil
Profil "high" (192 kbps AAC)
ffmpeg -y -hide_banner -nostats \
-i input.wav \
-c:a aac \
-b:a 192000 \
-ar 44100 \
-ac 2 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Profil "medium" (128 kbps AAC)
ffmpeg -y -hide_banner -nostats \
-i input.wav \
-c:a aac \
-b:a 128000 \
-ar 44100 \
-ac 2 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Profil "low" (64 kbps AAC mono)
ffmpeg -y -hide_banner -nostats \
-i input.wav \
-c:a aac \
-b:a 64000 \
-ar 22050 \
-ac 1 \
-f hls \
-hls_time 6 \
-hls_playlist_type vod \
-hls_list_size 0 \
-hls_segment_filename segment_%05d.ts \
index.m3u8
Références
Note: Pour des optimisations avancées (multi-pass, hardware acceleration), voir la roadmap P1/P2.