Libav-tools
Libav-tools, paquet d'outils de traitement de flux audio ou vidéo (enregistrement, lecture ou conversion d'un format à un autre) est un fork très proche de FFmpeg. Remplaçant Ffmpeg dans Ubuntu Trusty 14.04 et Precise 12.04, il s'utilise à l'aide de la commande avconv
ou au travers d'une application graphique de lecture et encodage de fichiers vidéos (comme par exemple WinFF).
Vous pouvez également vous reporter à la page lecture et encodage de fichiers vidéos pour découvrir d'autres applications du même type ou encore la page FFmpeg qui propose également une liste d'outils qui pourrait être compatible avec avconv.
avconv
et un message indiquant l'obsolescence de ffmpeg
. La communauté FFmpeg continuera avec la commande ffmpeg
.- Voir cette page (en) pour plus d'explications.
Libav au travers du paquet libav-tools est est la version disponible dans les dépôts Ubuntu pour Trusty 14.04 et Precise 12.04.
Pour Trusty 14,04: Si vous souhaitez quand même utiliser FFMpeg à la place de Libav, il est disponible depuis un PPA.
Pré-requis
- Disposer des droits d'administration;
- Disposer d'une connexion à Internet configurée et activée.
Installation
Via les dépôts Ubuntu
Avconv et les autres outils de Libav-tools sont disponibles dans les dépôts officiels pour Ubuntu Trusty 14.04 ou Precise 12.04 en remplacement de FFmpeg. Pour les utiliser, il suffit d'installer le paquet libav-tools
Via un PPA pour Trusty 14.04 uniquement
Ubuntu Trusty 14.04 utilise la version 9.xx de Libav. Sauf problèmes majeurs de sécurité, il ne sera pas proposé de mise à jour vers une version supérieure. Si vous rencontrez des problèmes non résolus avec une application d'encodage vidéo et que vous pensez que cela pourrait provenir de la version de Libav utilisée par Trusty 14.04, vous pouvez essayer de résoudre le problème en utilisant Libav 11.xx (avec ses dépendances). Cette dernière est disponible depuis un PPA.
Pour cela:
- Ajoutez le PPA ppa:heyarje/libav-111) à vos sources de logiciels;
Ou bien dans un terminal, saisir les commandes suivantes:
sudo add-apt-repository ppa:heyarje/libav-11 sudo apt-get update sudo apt-get install libav-tools
À noter: Il n'est pas nécessaire de désinstaller l'ancienne version, les actions ci-dessus provoqueront alors la mise à jour.
Connaître Avconv
avconv
!
Connaître les conteneurs installés
Il est important de savoir ce que avconv est capable de lire et d'écrire: si vous ne le savez pas, c'est simple, vous ne pouvez rien faire !
Depuis un terminal, saisissez la commande suivante:
avconv -formats
Vous devriez avoir une longue liste de formats (conteneurs) que reconnaît avconv.
Cette liste est organisée de manière simple la première colonne indique si vous pourrez lire (D) ou écrire (E) le format en question indiqué en deuxième colonne.
Par exemple
DE matroska Matroska file format
Veut simplement dire que vous pourrez à la fois lire et écrire les fichiers .mkv avec avconv
Connaître les codecs installés
Comme pour les conteneurs, vous pouvez avoir la liste des codecs disponibles par la commande:
avconv -codecs
Vous aurez une liste avec là aussi les fameux D et E. Mais aussi des V, A ou S qui vous permettent de savoir si un codec concerne la vidéo, le son ou les sous-titres.
Ce sont des codecs externes pour avconv.
Vous trouverez par exemple vorbis et libvorbis. Le codec est le même, il s'agit juste de deux encodeurs différents.
Si la qualité est importante pour vous, préférez les lib<format> aux <format> eux-mêmes.
Par exemple préférez libvorbis à vorbis, libfaac à aac, car la qualité s'en ressentira…
Obtenir les caractéristiques d'une vidéo
Pour obtenir les caractéristiques d'une vidéo il suffit d’exécuter cette commande:
avconv -i maVidéo.mp4
Utilisation
Avconv étant basé sur FFmpeg ses options en sont très proches voire identiques. Pour plus d'informations, reportez-vous à la page FFmpeg
Conversion vidéo en mpeg4
Le but premier de cet exemple est d'effectuer une rotation de la vidéo (cas d'une vidéo prise à l'envers sur un smartphone) tout en gardant une qualité d'encodage équivalente.
Il s'agit ici de convertir un fichier MPEG-4 (issu d'un Samsung Galaxy S2) dont la vidéo est au format mp4 et le son en aac.
Mais cet exemple convient au ré-encodage d'une vidéo dans un autre format audio, vidéo, conteneur.
Dans cet exemple, il sera fait deux passes dont le principe est expliqué ici
- 1ère passe:
avconv -i vidéoEnEntrée.mp4 -threads 8 -s 1920x1080 -vcodec mpeg4 -acodec libvo_aacenc -b 20000k -pass 1 -r 30 -y -vf "vflip" vidéoEnSortie.mp4
- 2ème passe:
avconv -i vidéoEnEntrée.mp4 -threads 8 -s 1920x1080 -vcodec mpeg4 -acodec libvo_aacenc -b 20000k -pass 2 -r 30 -y -vf "vflip" vidéoEnSortie.mp4
Avec comme paramètres :
- -i vidéoEnEntrée.mp4 : la vidéo d'entrée à convertir
- tous les paramètres après "-i vidéoEnEntrée.mp4" concernent la vidéo de sortie, à savoir:
- -threads 8 : accélère le traitement en multipliant les threads. 8 est un bon paramètre pour un quadri-coeur multithread (4 coeurs * 2 threads = 8).
- -s 1920x1080 : la taille de la vidéo (<largeur>x<hauteur>). Les résolutions courantes : 1920x1080 (full HD ou 1080p, 1280x720 (HD ou 720p) , 960*540 (demi HD 1080p /2).
- -vcodec mpeg4 : le codec vidéo. Pour recopier la vidéo : -c:v copy Vous pouvez utiliser le codec libre libx264 mais il faut l'installer : libavcodec-extra-53 pour les versions antérieures à Trusty (14.04) ou libavcodec-extra-54 à partir de Trusty (14.04)
- -acodec libvo_aacenc : le codec audio. Pour du mp3: "-acodec mp3" et pour recopier la bande son: "-c:a copy". Pour ne pas recopier la bande son : "-an (à coté du "-y")
- -b 20000k le bit rate ⇒ maintien à peu près la taille initiale de la vidéo de sortie pour de la HD (sinon entre 1500 kb et 20000kb)
.
- -pass 1 la première passe qui va créer un fichier de log (il faudra donc un -pass 2). La réalisation en deux pass améliore la qualité de l'encodage.
- -r 30 : le frame rate ( fps ou nombre d'image par secondes souvent entre 24 et 30). Sans ce paramètre apparaît un problème de "timebase dénominator" avec les vidéos du galaxy s2 (et pas seulement !) mais pas avec les vidéos converties.
- -y : écrase les fichiers de sortie sans confirmation
Remarques
Par défaut le format du container est défini par l'extension du nom de fichier (pour vidéoEnSortie.mp4 le container est mp4).
La modification de la résolution peux entraîner un décalage entre l'image et le son. Il faut donc visualiser la vidéo au milieu de la piste pour vérifier qu'il n'y a pas de décalage.
Pour encoder une vidéo mp4 en haute qualité mettre les paramètres suivants:
-mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300
a coté de "-pass 1"
D'autres paramètres à essayer :
-bf 2’, ’-flags qprd’, ’-flags mv0’, ’-flags skiprd
définir les différents paramètres
Rotation d'une vidéo
- rotation à 180°(flip) : -vf "vflip"
- rotation 90° : -vf "transpose=1"
- rotation -90° : -vf "transpose=2"
Mon script et mes paramètres complets
Pour une conversion de vidéos .WMV (Windows Live Movie Maker), voire .AVI (depuis Fraps), j'ai testé plusieurs paramètres en respectant les suggestions de Libav, et je suis très heureux du résultat. Objectif : avoir des vidéos MP4 au format de ma tablette Xoom sous Android an 1080x720, de la meilleure qualité possible malgré la conversion et sans augmenter la taille par rapport au .wmv.
- en 2 passes (pour les raisons expliquées plus haut)
- sans tenir compte de la bande son dans la première passe : -an
- en imposant la meilleure qualité, donc en laissant avconv trouver le meilleur bitrate : -qscale 1
- la première passe envoie le fichier de sortie dans les limbes, et se concentre sur la création des infos dans la log : -f rawvideo /dev/null
- en respectant les recommandations pour mp4 : -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300
- pour la résolution compatible Xoom, et parce que j'avais vérifié le ratio de mes videos en input : -s 1280 x 720
- le script tourne localement à un répertoire, et me crée un .mp4 pour chaque .wmv en entrée
- au final, qualité quasiment respectée, taille du mp4 légèrement inférieure à l'entrée : -qscale 1
ls -1 |grep wmv | awk -F. '{print $1}' | while read entree do avconv -y -i ${entree}.wmv -s 1280x720 -threads auto -vcodec mpeg4 -an -qscale 1 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1 -f rawvideo /dev/null avconv -y -i ${entree}.wmv -s 1280x720 -threads auto -vcodec mpeg4 -qscale 1 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 2 ${entree}.mp4 done
Vous noterez que la deuxième passe a lieu dans la foulée de la première dans le script, ce qui garantit que la log n'est pas perturbée par une succession de premières passes de fichiers différents. Par ailleurs, la deuxième passe reprend quasiment les mêmes paramètres que la première, mais en omettant celui qui coupait la bande son. Je n'ai pas spécifié de codec son en sortie, mais ça marche bien.
Conversion audio (de flac vers mp3)
avconv -i maChanson.flac -threads 8 -c:a libmp3lame -ab 320k -y maChanson.mp3
Avec comme paramètres :
* -threads 8 : accélère le traitement en multipliant les threads. 8 est un bon paramètre pour un quadri-coeur multithread (4 coeurs * 2 threads = 8).
* -ab 320k encodage en mp3 320Kbs
* -y : écrase les fichiers de sortie sans confirmation
Le format mp3 est protégé. Pour pouvoir l'utiliser avec avconv, il faut installer le paquet : ubuntu-restricted-extras
Couper une vidéo
AVCONV peut être utilisé pour découper une vidéo.
- -ss indique le début de la séquence à extraire, en secondes (peut aussi être indiqué en HH:MM:SS)
- -t indique la durée en secondes (peut aussi être indiqué en HH:MM:SS)
- -vcodec copy -acodec copy indiquent que l'on conserve les mêmes codec vidéo et audio
exemples :
- avconv -ss 0 -i source.m4v -t 100 -vcodec copy -acodec copy part1.m4v
- avconv -ss 100 -i source.m4v -t 100 -vcodec copy -acodec copy part2.m4v
- avconv -ss 200 -i source.m4v -t 100 -vcodec copy -acodec copy part3.m4v
- avconv -ss 300 -i source.m4v -t 100 -vcodec copy -acodec copy part4.m4v
Voir aussi
- La page ffmpeg: logiciel dont il est tiré
- (en) Site du projet avconv.
Contributeurs: ratm54, kerkael (pour les détails supplémentaires).