384 lines
7.4 KiB
Markdown
384 lines
7.4 KiB
Markdown
|
|
# 🎬 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.
|
||
|
|
|