Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/11/2018, à 23:58

DonutMan75

[RESOLU] ffmpeg : preset plus disponibles ?

Bonsoir à tous,
je me suis récemment mis à l'utilisation de ffmpeg pour otpimiser un peu mes vidéos perso (généralement filmées avec un iphone, donc du h264 encapsulé dans du Quick Time).

J'aimerais encapsuler tout ça dans du mkv et jouer un peu avec les options d'encodage pour voir si je peux gagner un peu de place.
Si j'ai bien compris, les presets permettent de spécifier en une fois tout un jeu de règles cohérentes entre elles afin d'optimiser soit le temps d'encodage (genre si on est pressé ??) soit la qualité du rendu final. On les pilote via l'opion "- vpre nom_du_preset". Jusque là j'ai bon ?

Or quand j'essaie de mettre en place les tuto trouvés sur le net, j'obtiens une erreur me disant que le preset n'existe pas !

$ ffmpeg -i IMG_4587.MOV -vcodec libx264 -vpre baseline -f matroska essai.mkv
ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
  configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
  libavutil      55. 78.100 / 55. 78.100
  libavcodec     57.107.100 / 57.107.100
  libavformat    57. 83.100 / 57. 83.100
  libavdevice    57. 10.100 / 57. 10.100
  libavfilter     6.107.100 /  6.107.100
  libavresample   3.  7.  0 /  3.  7.  0
  libswscale      4.  8.100 /  4.  8.100
  libswresample   2.  9.100 /  2.  9.100
  libpostproc    54.  7.100 / 54.  7.100
(...)
File for preset 'baseline' not found

En cherchant un peu sur le net, j'ai cru comprendre qu'on pouvait lister les presets disponibles via :

$ sudo find /usr -iname '*.ffpreset'
/usr/share/ffmpeg/libvpx-1080p50_60.ffpreset
/usr/share/ffmpeg/libvpx-720p50_60.ffpreset
/usr/share/ffmpeg/libvpx-360p.ffpreset
/usr/share/ffmpeg/libvpx-1080p.ffpreset
/usr/share/ffmpeg/libvpx-720p.ffpreset

Ola... aucun preset pour le h264 ???
Bon je me suis dit que, comme il s'agit juste d'un ensemble de règles, ça doit pouvoir se trouver sur le net... mais je n'ai pas réussi à trouver sad

Sur le forum, il y avait un post similaire datant de 2014 (sic !). Mais je ne comprends pas bien la réponse apportée... Je comprends vaguement que des presets ont été enlevés mais sans trop savoir par quoi ils ont été remplacés..
Et la doc de ffmpeg parle bien des presets... mais sans en donner ni les valeurs possibles ni la façon de les récupérer...

Bref, ma question pourrait se résumer à : y'a t'il parmi vous des gens habitués de l'encodage h264 avec ffmpeg ? Si oui, comment gérez-vous finement les options d'encodage ?

Merci d'avance pour votre retour smile

Bonne soirée à tous

Donut

Dernière modification par DonutMan75 (Hier à 14:45)

Hors ligne

#2 Le 09/11/2018, à 13:41

grigouille

Re : [RESOLU] ffmpeg : preset plus disponibles ?


Xubuntu 18.04

Hors ligne

#3 Le 10/11/2018, à 14:36

DonutMan75

Re : [RESOLU] ffmpeg : preset plus disponibles ?

Bonjour,
merci pour le lien, je vais regarder ça de près !
Néanmoins, ils parlent toujours des presets "fast", "slow" etc... et aucun de ces derniers ne semblent installés avec la version par défaut d'Ubuntu 18.04 LTS...

Bon samedi à tous smile

Donut

Hors ligne

#4 Le 10/11/2018, à 14:58

grigouille

Re : [RESOLU] ffmpeg : preset plus disponibles ?

fonctionne parfaitement sous 18.04


Xubuntu 18.04

Hors ligne

#5 Le 13/11/2018, à 07:14

DonutMan75

Re : [RESOLU] ffmpeg : preset plus disponibles ?

Bonjour,
eh bien pour je ne sais quelle obscure raison, ce n'est manifestement pas le cas pour moi...

En farfouillant un peu sur le net, je suis bien tombé sur ces presets (vieux de 8 ans !) : https://github.com/joeyblake/FFmpeg-Presets

Et de toute façon, ils n'ont pas l'air compatibles avec ma version de ffmpeg

/home/donut/.ffmpeg/libx264-veryslow.ffpreset: Invalid option or argument: 'directpred=3
', parsed as 'directpred' = '3'

Quelque chose m'échappe...

$ ffmpeg -version
ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
configuration: --prefix=/usr --extra-version=0ubuntu0.18.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil      55. 78.100 / 55. 78.100
libavcodec     57.107.100 / 57.107.100
libavformat    57. 83.100 / 57. 83.100
libavdevice    57. 10.100 / 57. 10.100
libavfilter     6.107.100 /  6.107.100
libavresample   3.  7.  0 /  3.  7.  0
libswscale      4.  8.100 /  4.  8.100
libswresample   2.  9.100 /  2.  9.100
libpostproc    54.  7.100 / 54.  7.100
$ lsb_release -d
Description:	Ubuntu 18.04.1 LTS

Donut.

Hors ligne

#6 Le 16/11/2018, à 22:38

Gatsu

Re : [RESOLU] ffmpeg : preset plus disponibles ?

Salut DonutMan75

DonutMan75 a écrit :

Bref, ma question pourrait se résumer à : y'a t'il parmi vous des gens habitués de l'encodage h264 avec ffmpeg ? Si oui, comment gérez-vous finement les options d'encodage ?

La réponse sera très simple : si tu ne t'y connais pas en options d'encodage, n'y touche surtout pas, tu feras plus de mal que de bien.

Bon ça c'était la réponse générale, maintenant les parties spécifiques.

1. Si tu veux faire varier le temps d'encodage / taille du fichier final pour une qualité d'image équivalente, il faut utiliser l'option -preset suivi d'une des valeurs suivantes : ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo. medium étant le standard par défaut et le mieux optimisé pour obtenir un fichier de petite taille en comparaison avec la vitesse d'encodage. Réduire la vitesse d'encodage activera des options supplémentaires gourmandes en processeur qui réduiront encore plus la taille du fichier final. Je te conseille de faire des essais, tu verras que le gain est assez minime pour un encodage bien plus long. Les options plus rapides sont interessantes quand on veut faire du streaming, c'est à dire encoder sans surcharger à outrance son processeur. Attention, placebo sera infiniment lent.

2. Si tu veux améliorer la qualité du rendu final, il faut utiliser l'option -crf suivi d'un chiffre, 23 par défaut s'il n'est pas défini. Plus tu réduiras ce chiffre, plus la qualité sera meilleure, plus tu l'augmenteras, plus la qualité sera dégradée. Un écart de 6 points divisera ou multipliera par 2 la taille du fichier final. Tu trouveras tout un tas d'essais que j'avais effectués il y a plusieurs années dans ce post : https://forum.ubuntu-fr.org/viewtopic.php?id=1431841

Le lien fourni par grigouille résume très bien les options les plus utiles de ffmpeg avec x264.

Un exemple de ligne à fournir en spécifiant certaines des options les plus utiles:

ffmpeg -i [VIDEO-ENTREE] -c:v libx264 -tune film -preset medium -crf 23 -c:a libvorbis -q:a 3 [VIDEO-SORTIE].mkv

Dernière modification par Gatsu (Le 16/11/2018, à 22:41)

Hors ligne

#7 Hier à 14:44

DonutMan75

Re : [RESOLU] ffmpeg : preset plus disponibles ?

Hello !
super, merci beaucoup pour ces détails !
Je me suis d'ailleurs aperçu qu'avec l'option -preset (ainsi que tu l'indiques dans ton post) ça fonctionne !

Ainsi, cette ligne fonctionne parfaitement chez moi...

$ ffmpeg -i IMG_8125.MOV -preset medium -vcodec libx264 -b 1500k -f matroska test.mkv

... mais pas celle là :

$ ffmpeg -i IMG_8125.MOV -vpre medium -vcodec libx264 -b 1500k -f matroska test.mkv
[...]
File for preset 'medium' not found

Le man de ffmpeg indique pourtant bien -vpre :

man ffmpeg a écrit :

Preset files
       A preset file contains a sequence of option=value pairs, one for each line, specifying a sequence of options which would be awkward to specify on the command line.
       Lines starting with the hash ('#') character are ignored and are used to provide comments. Check the presets directory in the FFmpeg source tree for examples.

       There are two types of preset files: ffpreset and avpreset files.

       ffpreset files

       ffpreset files are specified with the "vpre", "apre", "spre", and "fpre" options. The "fpre" option takes the filename of the preset instead of a preset name as
       input and can be used for any kind of codec. For the "vpre", "apre", and "spre" options, the options specified in a preset file are applied to the currently selected
       codec of the same type as the preset option.

       The argument passed to the "vpre", "apre", and "spre" preset options identifies the preset file to use according to the following rules:

       First ffmpeg searches for a file named arg.ffpreset in the directories $FFMPEG_DATADIR (if set), and $HOME/.ffmpeg, and in the datadir defined at configuration time
       (usually PREFIX/share/ffmpeg) or in a ffpresets folder along the executable on win32, in that order. For example, if the argument is "libvpx-1080p", it will search
       for the file libvpx-1080p.ffpreset.

       If no such file is found, then ffmpeg will search for a file named codec_name-arg.ffpreset in the above-mentioned directories, where codec_name is the name of the
       codec to which the preset file options will be applied. For example, if you select the video codec with "-vcodec libvpx" and use "-vpre 1080p", then it will search
       for the file libvpx-1080p.ffpreset.

       avpreset files

       avpreset files are specified with the "pre" option. They work similar to ffpreset files, but they only allow encoder- specific options. Therefore, an option=value
       pair specifying an encoder cannot be used.

       When the "pre" option is specified, ffmpeg will look for files with the suffix .avpreset in the directories $AVCONV_DATADIR (if set), and $HOME/.avconv, and in the
       datadir defined at configuration time (usually PREFIX/share/ffmpeg), in that order.

       First ffmpeg searches for a file named codec_name-arg.avpreset in the above-mentioned directories, where codec_name is the name of the codec to which the preset file
       options will be applied. For example, if you select the video codec with "-vcodec libvpx" and use "-pre 1080p", then it will search for the file
       libvpx-1080p.avpreset.

       If no such file is found, then ffmpeg will search for a file named arg.avpreset in the same directories.

Enfin l'important est que ça marche.
Et merci pour vos retours sur la bonne façon de réencoder simplement des vidéos !
Ca voir de différences perceptibles, je gagne facile un facteur dix en taille par rapport aux vidéos d'origine de mon iPhone !

Bon dimanche à la communauté smile

Donut

Hors ligne

#8 Aujourd'hui à 00:15

Gatsu

Re : [RESOLU] ffmpeg : preset plus disponibles ?

DonutMan75 a écrit :

... mais pas celle là :

$ ffmpeg -i IMG_8125.MOV -vpre medium -vcodec libx264 -b 1500k -f matroska test.mkv
[...]
File for preset 'medium' not found

Attention, ce ne sont pas les mêmes presets.
-preset modifie la vitesse d'encodage.
-vpre c'est pour spécifier tout un ensemble d'options à partir d'un fichier sans avoir à tout ré-écrire dans la ligne de commande.

---
Quelques remarques sur la ligne de commande que tu utilises :

$ ffmpeg -i IMG_8125.MOV -preset medium -vcodec libx264 -b 1500k -f matroska test.mkv

1. l'option -b 1500k définit un bitrate, ce n'est utile que si tu veux obtenir une taille spécifique de fichier, typiquement faire tenir une vidéo sur un disque DVD pour une gravure. Si la taille de fichier final n'est pas impérative, je te conseille d'utiliser l'option -crf qui elle se focalise sur la qualité de l'image. -crf 21 te donnera une qualité tip-top pour tout archivage de vidéo. -crf 23 est la valeur par défaut si rien n'est spécifié et reste de bonne qualité. (voir le lien que j'ai mis à la fin de mon post précédent pour les tests et explications)

2. l'option -f matroska n'est pas nécessaire si l'extension est déjà spécifiée dans le nom de fichier final (ici test.mkv), ffmpeg la déduira automatiquement

3. idem pour -preset medium, medium est la valeur par défaut si rien n'est spécifié.

4. Il te manque la définition de l'encodage audio. Par défaut ffmpeg encode en Ogg Vorbis qualité 3, soit env. 112kb/s pour du stéréo à 44.1kHz qui sera meilleur qu'un MP3 en 128kb/s.

5. Ces 2 lignes de commandes sont équivalentes :

$ ffmpeg -i IMG_8125.MOV -preset medium -vcodec libx264 -crf 23 -f matroska -acodec libvorbis -q:a 3 test.mkv
$ ffmpeg -i IMG_8125.MOV test.mkv

Pour du MKV, ffmpeg utilise par défaut le codec vidéo x264 en crf 23 et preset medium avec le codec audio Vorbis en qualité 3.

Hors ligne