Optimiser VidéoLan Client (VLC)
Un article de Wiki FreePlayer.org.
L'objectif de cet article est d'optimiser les paramètres de VLC afin d'obtenir un transcodage au format MPEG (1 ou 2) TS fiable et avec un minimum de latence.
Chacun des paramètres modifiés est fourni dans l'une des 3 syntaxes ci-dessous :
- syntaxe du fichier .cfg (chargé via la commande --config-file) : #<paramètre>=<valeur>
- syntaxe .m3u pour l'inclusion dans une liste de lecture : #EXTVLCOPT:<paramètre>=<valeur>
- syntaxe ligne de commande : --<paramètre>=<valeur>
Pour de plus amples informations sur le fonctionnement de VLC en général, nous vous invitions à consulter les sources d'information suivantes :
- le site web de VLC
- un manuel d'utilisation de VLC (contribution d'Olivier B.)
- nouveauté un guide d'initiation à l'utilisation de VLC par ligne de commande (contribution d'Olivier B. également)
- le wiki de videolan.org (en anglais)
- la page de discussion contient l'intégralité du fichier de configuration "vlcrc" créé par VLC dans le dossier "C:\Documents and Settings\<Nom utilisateur>\Application Data\vlc" (probablement dans le dossier utilisateur sous Linux et Mac). Vous pouvez participer à l'évolution de cette page en apportant vos commentaires sur une ou plusieurs des options de configuration présentes dans ce fichier.
Nous tenons également à remercier Olivier B. pour la réalisation du manuel d'utilisation de VLC et du d'guide sur l'utilisation de VLC par ligne de commande, à la fois clairs et complets.
Sommaire |
General
Avant tout, il est nécessaire de configurer le flux de sortie par défaut de VLC. C'est le rôle du fichier vlc-fbx.bat fourni avec le freeplayer.
Dans le cas des mods, la plupart utilisent un fichier vlc.cfg contenant l'ensemble des paramètres de VLC (accessibles via la boîte de dialogue de paramétrage de VLC).
Pour le fichier vlc.cfg :
#sout="#std" # Sortie standard #sout-standard-access=udp #sout-standard-mux=ts #sout-standard-url=212.27.38.253:1234 # adresse IP de la freebox # (à mettre en "trusted zone" dans le pare-feu # port 1234 en sortie sur udp, # ports 1024 à 65535 udp en entrée pour le multiposte # --à confirmer--)
[stream_out_transcode] # Transcodage du flux de sortie
# Video encoder (string)
#sout-transcode-venc=ffmpeg
# Destination video codec (string)
#sout-transcode-vcodec=mp2v # mettre "mp1v" pour de petites configurations
# (codage moins gourmand que le MPEG2)
# Video bitrate (integer)
#sout-transcode-vb=4800 # Débit de sortie, à réduire si vous êtes en wifi/cpl
# Video scaling (float)
#sout-transcode-scale=1.000000
# Maximum video size
#sout-transcode-maxwidth=720 # mettre 352 pour une qualité Video CD/VHS
#sout-transcode-maxheight=576 # mettre 288 //
# (réduit l'occupation processeur par 4)
# Video frame-rate (float)
#sout-transcode-fps=25.000000
# Hurry up (boolean)
#sout-transcode-hurry-up=1 # "Saute" les images qui n'ont pu être encodées à temps
[mux_ts] # Empaquetage au format TS (librairie libdvbpsi)
# Video PID (integer) #sout-ts-pid-video=68 # Audio PID (integer) #sout-ts-pid-audio=69
# Use keyframes (boolean)
#sout-ts-use-key-frames=1 # Utiliser des images clefs
# Shaping delay (ms) (integer)
#sout-ts-shaping=200 # assure un débit constant dans l'intervalle indiqué
# (évite les pics de débit lors de l'envoi des images clefs)
# mais retarde la vidéo de x ms.
# -- peut être réduit à 100 ? --
# PCR delay (ms) (integer)
#sout-ts-pcr=70 # intervalle d'envoi des "top horloge"
# DTS delay (ms) (integer)
#sout-ts-dts-delay=400 # temps d'attente entre le décodage et l'affichage
# (calés sur le PCR) -- peut être réduit à 200 ? --
# Crypt audio (boolean) #sout-ts-crypt-audio=0 # l'audio n'est pas crypté # Crypt video (boolean) #sout-ts-crypt-video=0 # de même que la vidéo
Pour tous les fichiers .m3u :
#EXTVLCOPT:sout=#transcode:std
Autres optimisations :
- calcul strict du débit :
#ffmpeg-strict-rc=true
Evite que le débit en sortie de l'encodeur ne varie trop...
- Post Traitement :
#ffmpeg-pp-q=3
Ffmpeg peut réaliser un post traitement de la vidéo d'origine (divx, xvid, etc...) avant transcodage selon un niveau allant de 0 à 6. Ceci améliore notablement la qualité de la vidéo transcodée, au détriment de l'occupation processeur.
- Autres optimisations à détailler/étudier...
- EXTVLCOPT:sout-transcode-soverlay
- EXTVLCOPT:sout-ffmpeg-keyint=24 # c'est pas plutôt 25 ?
- EXTVLCOPT:sout-ffmpeg-interlace # entralecement ou pas entrelacement ?
# note: mpeg 1 n'est pas entrelacé de toute manière
# (source wikipedia)
- EXTVLCOPT:no-sout-ffmpeg-interlace-me
- EXTVLCOPT:file-caching=1000 # justification d'un tel cache "fichier" ?
Images
VLC peut lire les formats d'image suivants : jpeg, ljpg, png, pgm, pgmyuv, pbm, pam, tga, bmp, pnm, xpm, xcf, pcx, gif, tif, tiff, lbm.
Pour cela on utilse une entrée appelée "fake" qui crée un flux vidéo à partir d'une image.
Voici le code créé par l'utilitaire fbx-playlist pour chaque image :
Options générales de transcodage :
#EXTINF:0,mon image #EXTVLCOPT:sout=#transcode:std #EXTVLCOPT:sout-transcode-width=720 #EXTVLCOPT:sout-transcode-height=576 #EXTVLCOPT:sout-transcode-vb=4800 #EXTVLCOPT:sout-transcode-vcodec=mp1v # pas besoin d'un encodage MPEG2 pour envoyer une image #EXTVLCOPT:sout-transcode-vt=1000000
options ffmpeg : désentrelacer pour réentrelacer ensuite ?!
#EXTVLCOPT:sout-ffmpeg-keyint=8 #EXTVLCOPT:sout-ffmpeg-interlace #EXTVLCOPT:no-sout-ffmpeg-interlace-me #EXTVLCOPT:fake-aspect-ratio=4:3 #EXTVLCOPT:fake-keep-ar #EXTVLCOPT:fake-deinterlace #EXTVLCOPT:deinterlace-mode=blend
c'est ici que l'on indique l'image à charger
#EXTVLCOPT:fake-file=C:/mon image.jpg fake:
Remarques :
- il doit être possible d'optimiser l'envoi des images en réduisant la taille de tampons d'encodage MPEG1/2 et du protocole udp.
- l'intervalle DTS / PTS (paramètres de muxage TS) peut être fortement réduit : de ce fait la freebox affichera l'image beaucoup plus vite !
Exemple : intervalle DTS/PTS - 40ms affichera l'image au bout de 40 ms au lieu de 400 !
- la freebox conservant en cache l'image affichée, il est possible de couper le flux vidéo dès que l'image est affichée.
A cet effet, une balise flag "wait_new_picture" attend l'affichage d'une nouvelle image vidéo avant d'afficher la page... ce qui permet alors via un lien "onfocus" de stopper le flux vidéo dès que l'image est affichée !
Audio
VLC peut lire des fichiers audio aux formats mp3, mp4, ogg, flac, musepack... Toutefois sous windows il n'est pas (encore) possible d'utiliser les filtres directshow et donc d'installer des codecs supplémentaires.
Modifier le volume
Le volume de sortie peut varier de 0 à 1024, la valeur par défaut est 128.
#EXTVLCOPT:volume=128
Vidéo
VLC peut lire les vidéos aux formats divx, mpeg4, mpeg, mpeg2, mjpeg... Toutefois sous windows il n'est pas (encore) possible d'utiliser les codecs directshow.
La lecture des DVDs fait partie du chapitre suivant.
Flux vidéo internet
VLC peut lire les flux Windows Media et certains quicktime. Par contre pas de realplayer à l'horizon...
Webradios
VLC peut lire les flux shoutcast et windows media, mais pas le real audio.
DVDs
Remarque : pour des raisons de droits, le décodage du son au format DTS a été retiré de VLC. Les pistes son DTS ne pourront pas être transcodées par VLC, mais le flux non décodé peut être transmis à la freebox raccordée en SPDIF à un décodeur DTS.
A noter: depuis le firmware dvd-1.7.2, il semblerait que le Freebox sache désormais décoder elle-même le format DTS... à vérifier
Périphériques de capture
Sous Windows VLC peut rediriger le flux vidéo d'un périphérique de capture directshow (webcam, caméra DV, carte son).
L'utilisation de périphériques virtuels comme UscreenCapture (capture d'écran) ou SplitCam (redirection de flux vidéo) permet d'effectuer des captures d'écran et de lire des vidéos via les codecs directshow. Toutefois le résultat est plutôt instable et nécessite des ressources importantes.
De plus un périphérique "spécial" appelé "screen://" permet d'envoyer à la freebox un flux vidéo réalisé par captures successives de l'écran du PC, au prix toutefois d'une consommation de ressources assez importante.
sous-titres
L'affichage des sous-titres s'effectue par intégration dans la vidéo. En effet, bien que la freebox supporte l'envoi de sous-titres par teletexte, VLC ne sait encoder les sous-titres qu'au format DVB.
Configuration des sous-titres :
# Use subtitle file (string) #sub-file= # Autodetect subtitle files (boolean) #sub-autodetect-file=1 # Subtitle autodetection fuzziness (integer) #sub-autodetect-fuzzy=3 # Subtitle autodetection paths (string) #sub-autodetect-path=.\subtitles # Force subtitle position (integer) #sub-margin=-1 # Subpictures filter module (string) #sub-filter=
# Destination subtitles codec (boolean) #sout-transcode-soverlay=1
[subsdec] # Text subtitles decoder
# Subtitles justification (integer) #subsdec-align=0 # Subtitles text encoding (string) #subsdec-encoding=System Default
[subtitle] # Text subtitles demux
# Frames per second (float) #sub-fps=0.000000 # Subtitles delay (integer) #sub-delay=0 # Subtitles fileformat (string) #sub-type=auto
OSD
VLC est capable d'afficher des informations supplémentaires en surimpression sur le flux vidéo.
Afficher l'heure (configuration) :
[time] # Time display sub filter
# Time format string (%Y%m%d %H%M%S) (string) #time-format=%Y-%m-%d %H:%M:%S # X offset, from left (integer) #time-x=-1 # Y offset, from the top (integer) #time-y=0 # Time position (integer) #time-position=9 # Opacity (integer) #time-opacity=255 # Text Default Color (integer) #time-color=16777215 # Font size, pixels (integer) #time-size=-1
Afficher l'heure (activation) :
#EXTVLCOPT:sub-filter="time"
Afficher une image en surimpression (configuration) :
[logo] # Logo video filter
# Logo filename (string) #logo-file= # X coordinate of the logo (integer) #logo-x=-1 # Y coordinate of the logo (integer) #logo-y=0 # Transparency of the logo (integer) #logo-transparency=255 # Logo position (integer) #logo-position=6
Afficher une image en surimpression (activation) :
#EXTVLCOPT:logo-file="../monlogo.png" #EXTVLCOPT:sub-filter="logo"
Désactivation de l'OSD :
#EXTVLCOPT:sub-filter=""
autres options utiles
Afficher à l'écran ce qui est envoyé à la freebox :
#EXTVLCOPT:sout-display=1
Utiliser la sortie SPDIF de la freebox :
- Pour les DVDs le flux audio doit être envoyé tel quel.
- Pour les autres formats le flux doit être transcodé dans un format reconnu par votre chaîne hi-fi (en général AC3).
- Enfin la sortie SPDIF doit être activée depuis l'interface freeplayer et/ou la page de configuration du mod freeplayer.
Son sur le PC
Dans certains cas (pc près de la TV...) certains utilisateurs préfèrent avoir le son sur le PC et la vidéo sur la freebox.
Attention : dans ce cas là le son DTS ne sera pas décodé par VLC !
#EXTVLCOPT:sout=#duplicate{dst=transcode:std,select=video,dst=display,select=audio}
# vidéo transcodée, son sur le PC...
#EXTVLCOPT:audio-desync=1000 # à régler selon votre système pour caler le son et la vidéo
Différence entre les freebox
Clément a donné des indications sur IRC. Je les renseigne ici pour ne pas les perdre. Il conseille d'utiliser des fichiers de configuration différents pour paramétrer les options sur les différentes freebox.
Freebox v5
- il vaut mieux ne pas transcoder les mp3 (les envoyer tel quel)
- les options sout-ffmpeg-keyint, sout-ffmpeg-interlace, no-sout-ffmpeg-interlace-me semblent poser problème. il vaut mieux ne pas les utiliser avec la v5. (remarque : avec mes propres divx, je n'ai pas vu de problèmes avec ces paramètres, mais clément a eu des soucis avec les siens : écran noir)
- les options --sout-transcode-maxwidth=720 --sout-transcode-maxheight=576 sont inutiles pour la v5 : elle fait le redimmensionnement elle même. De plus, si une vidéo lui ait envoyé à la résolution HD, elle aura alors la possibilité de la diffuser tel quel pour une TV HD.

