veza/veza-stream-server/docs/FFMPEG_COMMANDS.md

384 lines
7.4 KiB
Markdown
Raw Normal View History

P0: stabilisation backend/chat/stream + nouvelle base migrations v1 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.).
2025-12-06 10:14:38 +00:00
# 🎬 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:
```bash
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**:
```bash
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**:
```bash
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**:
```bash
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**:
```bash
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.ts`
- `segment_00002.ts`
- `segment_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` = Mono
- `2` = Stéréo
---
## Validation et erreurs
### Vérification FFmpeg installé
```bash
ffmpeg -version
```
### Test de commande
```bash
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
1. **Codec non disponible**: Installer les codecs manquants
```bash
# Ubuntu/Debian
sudo apt-get install ffmpeg libavcodec-extra
```
2. **Fichier d'entrée invalide**: Vérifier le format et l'intégrité
```bash
ffprobe input.wav
```
3. **Répertoire de sortie inaccessible**: Vérifier les permissions
```bash
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)
```bash
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)
```bash
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)
```bash
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
- [FFmpeg Documentation](https://ffmpeg.org/documentation.html)
- [HLS Specification](https://tools.ietf.org/html/rfc8216)
- [AAC Encoding Guide](https://trac.ffmpeg.org/wiki/Encode/AAC)
- [MP3 Encoding Guide](https://trac.ffmpeg.org/wiki/Encode/MP3)
---
**Note**: Pour des optimisations avancées (multi-pass, hardware acceleration), voir la roadmap P1/P2.