veza/veza-stream-server/docs/FFMPEG_COMMANDS.md
okinrev b7955a680c 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 11:14:38 +01:00

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.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é

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

  1. Codec non disponible: Installer les codecs manquants

    # Ubuntu/Debian
    sudo apt-get install ffmpeg libavcodec-extra
    
  2. Fichier d'entrée invalide: Vérifier le format et l'intégrité

    ffprobe input.wav
    
  3. 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.