La Fibre

Télécom => Télécom => télécom TV et codecs => Discussion démarrée par: vivien le 16 mai 2016 à 09:39:08

Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 16 mai 2016 à 09:39:08
Comment réduire le poids de ses vidéos en les ré-encodant en VP9 / Opus ?

Vous avez peut-être une caméra qui filme en full HD ou en 4k. C'est sympa, mais les fichiers sont très lourds. Si vous avez besoin de mettre vos vidéos sur un blog familial, la taille pose probablement problème. Vous souhaitez réduire sensiblement la taille (débit de 1 à 1,5 Mb/s), tout en gardant la qualité de Youtube en 720p ?

On va utiliser ffmpeg qui va réduire la résolution à 720p, encoder la vidéo en VP9 (le codec le plus efficace supporté par les navigateurs web) et l'audio avec le codec Opus, le codec audio le plus efficace)

Installation : sudo apt install ffmpeg libavcodec-extra

Voici la ligne de commande à utiliser pour une compression en une seule passe :
ffmpeg -i source.mp4 -vf scale=1280:-1 -c:v libvpx-vp9 -b:v 0 -crf 40 -threads 4 -speed 1 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 64k -f webm destination.webm


Détail des options utilisées :
-i source.mp4 : fichier source
-vf scale=1280:-1 : Option pour changement la résolution => résolution cible (-1 garde le ratio rappel: 1920×1080 = 1280×720 = 16/9)
-c:v libvpx-vp9 : Codec vidéo de destination. libvpx-vp9 encode en VP9.
-b:v 0 : Débit maximum, pour une qualité constante (déterminée par crf), il faut le mettre à 0. Pour mettre une limite haute du débit à 1 Mb/s c'est -b:v 1000K
-crf 40 : Qualité perçue : la valeur CRF peut être entre 0 et 63. Des valeurs plus faibles signifient une meilleure qualité. 32 à 45 = iso Youtube. Si on souhaite encoder à débit fixe, il ne faut pas mettre cette option. Il est toutefois plus pertinent d'encoder à une qualité perçue fixe, plutôt que un débit fixe.
-threads 4 :  Encodage sur 4 threads en parallèle. SI vous avez 8 cœurs physiques, vous pouvez utiliser -threads 8. Sans cette option, l'encodage n'utilise qu'un seul cœur et est malheureusement assez lent.
-speed 1 : Compromis entre vitesse de compression et qualité. speed 1, la valeur par défaut, produit qualité de sortie très proche de la vitesse speed 0, mais speed 1 encode généralement beaucoup plus vite que speed 0. Pour un encodage en deux passe, on speed 4 est un bon compromis pour la première passe. Les valeurs possible vont de -16 a 16.
-tile-columns 6 -frame-parallel 1 : Permet de créer un ficher vidéo qui pourra être lu en multi-threaded (coté client). -tile-columns 6 -frame-parallel 1 sont les valeurs par défaut.
-auto-alt-ref 1 : Le décodeur va choisir en fonction du contenu quand prendre une image de référence (image fixe complètement décrite, alors que les autres images codent ce qui a changé par rapport à l'image précédente ou à l'image suivante). concrètement a chaque changement de plan, une image de référence sera insérée.
-lag-in-frames 25 : nombre d'images à regarder vers l'avenir pour l'encodage , 0 aucune limite. [min 0 - max 25]

-c:a libopus : Codec audio de destination (avec libopus il y a par déault -vbr on -compression_level 10)
-b:a 64k : Débit cible 64 Kb/s (Youtube encode dans 3 débits théoriques : 50 Kb/s , 70 Kb/s et 160 Kb/s en réalité on est un peu en dessous).
-f webm : Force le format de sortie en webm
destination.webm : fichier destination compressé en VP9 / Opus


Voici les lignes de commande à utiliser pour une compression en deux passes (permettant d'avoir une meilleure qualité pour un même débit) :
ffmpeg -i source.mp4 -vf scale=1280:-1 -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 40 -threads 4 -tile-columns 6 -frame-parallel 1 -an -f webm -y /dev/null
ffmpeg -i source.mp4 -vf scale=1280:-1 -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 40 -threads 4 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 64k -f webm destination.webm


Détail des nouvelles options utilisées :
-pass 1 : Le numéro de passe (1 ou 2). Les statistiques de la vidéo de la première passe sont enregistrées dans un fichier journal (PREFIX-N.log où N est un nombre spécifique au flux de sortie).
-an : désactiver audio qui est inutile pour la première passe
/dev/null : la sortie NULL sous Linux/ Unix / MacOS X pour ne pas enregistrer le fichier vidéo généré. Sous Windows, il faut utiliser NUL
-y : na pas avertir que le fichier existe déjà (sans ça, on a la question "File '/dev/null' already exists. Overwrite ?")


J'ai testé la compression du flux 1080p H.264 en 720p VP9/Opus de deux vidéos :
- PSY - GANGNAM STYLE => Il faut mettre la qualité à 43 (-crf 43) pour avoir un fichier 720p VP9 de la taille de celui de Youtube
- Michael Jackson - Hold My Hand => Il faut mettre la qualité à 33 (-crf 33) pour avoir un fichier 720p VP9 de la taille de celui de Youtube

Youtube n'encode pas à débit constant (les vidéos qui bougent beaucoup utilisent plus de débit que les vidéo avec une image fixe) mais pas uniquement à qualité constante, vu que quand on choisit ce mode, on voit que le paramètre qualité varie sensiblement pour avoir une taille iso Youtube.

Quels sont les navigateurs qui supportent VP9 + Opus ?
- Google Chrome / Chromium
- Opéra
- Mozilla Firefox (sous Linux depuis Firefox 43 et sous Windows, à partir de Firefox 47, qui sort le 7 juin 2016)
- Microsoft Edge (a partir de Windows 10 anniversary update, qui sort fin juillet 2016)
- Android 5, sortie en 2014 mais pas encore sur tous les téléphones.
Tous les processeurs, même ceux qui ont 8an d'age,  arrivent à décoder logiciellement le 720p en VP9 / Opus

Safari gère Opus depuis 2012, mais par le codec VP9  :(




Comparatif des codec audios (enfin il manque l'AC3) :
(https://lafibre.info/images/tv/201501_comparatif_codec_audio.png)
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: fab67 le 17 mai 2016 à 19:57:06
ici des paramètres complèmentaires : http://wiki.webmproject.org/ffmpeg/vp9-encoding-guide

et notamment -threads 8  -tile-columns 6 pour la vitesse
et  -auto-alt-ref 1 -lag-in-frames 25 pour la qualité
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 31 mai 2016 à 16:24:50
Merci pour le lien.

Plusieurs paramètres sont des paramètres par défaut de libvpx-vp9 1.4.0:
- profile=0
- threads=0
- quality=good (deadline=1000000)
- cpu-used=1 (-cpu-used = -speed)
- frame-parallel=1
- tile-columns=6
- auto-alt-ref=1
- lag-in-frames=25
- aq-mode=0
- kf_max_dist=9999 (-g)

Par contre "-threads 4" est nécessaire pour l'avoir 4 threads. J'ai mis à jour mon premier message avec les optimisations proposées.

Faut-il faire une passe ou deux passe quand on encode à une qualité perçue fixe ? J'étais persuadé que la double passe était pour les encodage avec une limitation de débit (débit fixe ou qualité + débit maximum) mais non : il y  a aussi un gain pour un encodage avec une qualité perçue fixe. J'imagine que c'est grâce à un meilleur placement des images de références (images i) et je suis étonné d'avoir un gain significatif.

J'ai testé une vidéo tout simple (non montée) et récente pour voir la qualité d'un encodage Youtube 720p VP9 en partant d'un flux 1080p H264.

https://www.youtube.com/watch?v=kt59iTM2ADc

- Fichier Youtube 1080p H.264 30images par secondes : 52,6 Mo
- Fichier Youtube 720p VP9 30images par secondes : 18,8 Mo
- Encodage 720p VP9 double passe qualité crf 40 depuis 1080p H.264 (lignes de commande plus haut) : 17,9 Mo
- Encodage 720p VP9 double passe qualité crf 39 depuis 1080p H.264 (lignes de commande plus haut) : 19,5 Mo
- Encodage 720p VP9 double passe qualité crf 33 depuis 1080p H.264 (lignes de commande plus haut) : 28,1 Mo
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 31 mai 2016 à 19:56:50
Compresser via une commande tous les fichiers de votre appareil photo (à exécuter la nuit)

Script bash pour compresser toutes les vidéos .MP4 du dossier où est exécuté le script et réduire leur résolution en 720p :

for i in *.MP4 ; do
    ((n++))
    date '+===> %kh%M %Ssec: Vidéo N°'$n' Passe 1/2 '$i' => '${i/.MP4}'.webm'
    ffmpeg -i "$i" -vf scale=1280:-1 -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 40 -threads 4 -speed 4 -tile-columns 6 -frame-parallel 1 -an -loglevel warning -f webm -y /dev/null
    date '+===> %kh%M %Ssec: Vidéo N°'$n' Passe 2/2 '$i' => '${i/.MP4}'.webm'
    ffmpeg -i "$i" -vf scale=1280:-1 -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 40 -threads 4 -speed 1 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 64k -loglevel warning -f webm -y "${i/.MP4}".webm
done
date '+===> %kh%M %Ssec: Encodage vidéo VP9 terminé'


Script bash pour compresser toutes les vidéos .MOV du dossier où est exécuté le script et réduire leur résolution en 720p :

for i in *.MOV ; do
    ((n++))
    date '+===> %kh%M %Ssec: Vidéo N°'$n' Passe 1/2 '$i' => '${i/.MOV}'.webm'
    ffmpeg -i "$i" -vf scale=1280:-1 -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 40 -threads 4 -speed 4 -tile-columns 6 -frame-parallel 1 -an -loglevel warning -f webm -y /dev/null
    date '+===> %kh%M %Ssec: Vidéo N°'$n' Passe 2/2 '$i' => '${i/.MOV}'.webm'
    ffmpeg -i "$i" -vf scale=1280:-1 -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 40 -threads 4 -speed 1 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 64k -loglevel warning -f webm -y "${i/.MOV}".webm
done
date '+===> %kh%M %Ssec: Encodage vidéo VP9 terminé'


Les fichiers traités sont numérotés (pour estimer où en est le script) et l'heure affichée à chaque étape.
J'ai rajouté -loglevel warning pour n'afficher que les avertissement / erreurs.
En cas de fichier destination déjà existant, le fichier est supprimé (option -y)
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: jack le 31 mai 2016 à 23:19:59
Deux petits commentaires:
Citer
Voici les lignes de commande à utiliser pour une compression en deux passes (permettant d'avoir une meilleure qualité pour un même débit)
Le double passe n'est utile que si tu as des contraintes de bitrate à respecter
Sinon, le vbr est ce qui te donne le meilleur résultat

Citer
-crf 40 : Qualité perçue : la valeur CRF peut être entre 0 et 63. Des valeurs plus faibles signifient une meilleure qualité. 32 à 45 = iso Youtube. Si on souhaite encoder à débit fixe, il ne faut pas mettre cette option. Il est toutefois plus pertinent d'encoder à une qualité perçue fixe, plutôt que un débit fixe.
C'est vraiment le crf utilisé par youtube ? Il est un peu .. viril, disons
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: kgersen le 01 juin 2016 à 00:07:11
Perso je les upload brut sur youtube en privé. puis ensuite les download dans la résolution et codec (vp9 ou h264) qui m’intéressent grace a youtube-dl.

Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 01 juin 2016 à 07:07:12
Mes vidéos sur Youtube (peu de vues) n'ont pas de VP9 :

$ youtube-dl -F https://www.youtube.com/watch?v=dgHNWfwE3mM
[youtube] dgHNWfwE3mM: Downloading webpage
[youtube] dgHNWfwE3mM: Downloading video info webpage
[youtube] dgHNWfwE3mM: Extracting video information
[youtube] dgHNWfwE3mM: Downloading MPD manifest
[youtube] dgHNWfwE3mM: Downloading MPD manifest
[info] Available formats for dgHNWfwE3mM:
format code  extension  resolution note
140          m4a        audio only DASH audio  130k , m4a_dash container, mp4a.40.2@128k (44100Hz)
160          mp4        256x144    DASH video  108k , avc1.4d400b, 25fps, video only
133          mp4        426x240    DASH video  242k , avc1.4d400c, 25fps, video only
134          mp4        640x360    DASH video  604k , avc1.4d401e, 25fps, video only
135          mp4        854x480    DASH video 1155k , avc1.4d4014, 25fps, video only
136          mp4        1280x720   DASH video 2310k , avc1.4d4016, 25fps, video only
137          mp4        1920x1080  DASH video 4331k , avc1.64001e, 25fps, video only
36           3gp        320x?      small , mp4v.20.3,  mp4a.40.2
17           3gp        176x144    small , mp4v.20.3,  mp4a.40.2@ 24k
5            flv        400x240    small , h263, mp3  @ 64k
43           webm       640x360    medium , vp8.0,  vorbis@128k
18           mp4        640x360    medium , avc1.42001E,  mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F,  mp4a.40.2@192k (best)

https://www.youtube.com/watch?v=dgHNWfwE3mM
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: kgersen le 01 juin 2016 à 07:15:08
Effectivement ca a du changé avec le nombre de vue. Ca peut se comprendre vu les ressources cpu que ca prend pour convertir en vp9.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 01 juin 2016 à 07:57:39
Deux petits commentaires:Le double passe n'est utile que si tu as des contraintes de bitrate à respecter
Moi aussi, je pensais ça.

Le site officiel recommande 2 passes : http://wiki.webmproject.org/ffmpeg/vp9-encoding-guide

J'ai donc testé avec la vidéo Michael Jackson - Hold My Hand en source le 1080p H264 et en destination du VP9 720p avec la qualité 43

1 passe : 20,7 Mo
Ligne de commande :
ffmpeg -i source.mp4 -vf scale=1280:-1 -c:v libvpx-vp9 -b:v 0 -crf 43 -threads 4 -speed 1 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 64k -f webm destination.webm

2 passes : 17,8 Mo

Lignes de commande :
ffmpeg -i source.mp4 -vf scale=1280:-1 -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 43 -threads 4 -speed 4 -tile-columns 6 -frame-parallel 1 -an -f webm -y /dev/null
ffmpeg -i source.mp4 -vf scale=1280:-1 -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 43 -threads 4 -speed 1 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 64k -f webm destination.webm

Il y a donc un gain, même si je ne m'explique pas pourquoi. Le placement des images de référence est mieux optimisé ?
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: jack le 01 juin 2016 à 09:58:19
Hoh, c'est très intéressant ça
Je me note de faire des tests pour savoir si c'est spécifique au codec

Merci de l'info Vivien!
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: underground78 le 01 juin 2016 à 13:42:39
En théorie le type des images est choisi lors de la première passe et ne change plus ensuite.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: Anonyme le 01 juin 2016 à 15:57:45
Je ne sais plus trop pourquoi,vérifiez les changelog, mais j'ai eu à recompiler ffmpeg dernièrement.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 01 juin 2016 à 22:21:00
Je vous donne le résultat : j'ai passé les 54 vidéos de mon bébé filmés principalement avec mon appareil photo ou des téléphones :
- H.264 1080p 30img/sec : 9,5 Go (176 Mo / vidéo)
- VP9 720p 30img/sec : 327 Mo (6 Mo / vidéo)

=> La taille est divisée par 50 en moyenne et la différence n'est pas perceptible quand on visionne la vidéo en 720p.

L'encodage a pris 3 heures, sur un Intel Core i3-4150 CPU @3.50GHz (processeur 2 cœurs HT)

Je ne m'attendais pas à un tel résultat, j'ai tout de suite pensé a cette vidéo  ;D

https://www.youtube.com/watch?v=IbZ3h089GZg
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: Phach le 02 juin 2016 à 09:45:18
J'ai fait un petit test avec une vidéo 1080p issue de mon appareil photo.
Ca demande tout de même pas mal de ressource pour obtenir une vitesse d'encodage correcte.

J'ai fait le test avec un serveur dédié chez ovh que je possède, avec un xeon D-1520 (je ne sais absolument pas ce qu'il vaut...) et bien ca tournait à 1 FPS.
Sur mon NUC (i5-5250u) qui est loin d'être un PC dédié au calcul, j'avais 4-5 FPS.

Ca serait interessant de tester, j'ai vu que Amazon supportait désormais le VP9 sur le service AWS Elastic Trancoder.

Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: Phach le 02 juin 2016 à 09:51:55
Tiens, il est interessant de constater chez Youtube qu'en 3840x2160 le fichier VP9 est plus lourd que le H264.
Je ne suis pas en mesure de juger de la différence de qualité entre les deux, je ne suis pas équipé.

C:\youtube-dl>youtube-dl.exe -F https://www.youtube.com/watch?v=gEnkA5jR410
[youtube] gEnkA5jR410: Downloading webpage
[youtube] gEnkA5jR410: Downloading video info webpage
[youtube] gEnkA5jR410: Extracting video information
[youtube] gEnkA5jR410: Downloading MPD manifest
[info] Available formats for gEnkA5jR410:
format code  extension  resolution note
249          webm       audio only DASH audio   56k , opus @ 50k (48000Hz), 2.85MiB
250          webm       audio only DASH audio   78k , opus @ 70k (48000Hz), 3.62MiB
171          webm       audio only DASH audio  121k , vorbis@128k (44100Hz), 6.38MiB
140          m4a        audio only DASH audio  128k , m4a_dash container, mp4a.40.2@128k (44100Hz), 7.69MiB
251          webm       audio only DASH audio  150k , opus @160k (48000Hz), 7.40MiB
278          webm       256x144    DASH video  117k , webm container, vp9, 30fps, video only, 5.64MiB
160          mp4        256x144    DASH video  123k , avc1.4d400c, 30fps, video only, 6.55MiB
133          mp4        426x240    DASH video  256k , avc1.4d4015, 30fps, video only, 14.51MiB
242          webm       426x240    DASH video  272k , vp9, 30fps, video only, 9.44MiB
243          webm       640x360    DASH video  493k , vp9, 30fps, video only, 17.69MiB
134          mp4        640x360    DASH video  640k , avc1.4d401e, 30fps, video only, 18.05MiB
244          webm       854x480    DASH video  960k , vp9, 30fps, video only, 31.01MiB
135          mp4        854x480    DASH video 1170k , avc1.4d401f, 30fps, video only, 38.10MiB
247          webm       1280x720   DASH video 1923k , vp9, 30fps, video only, 62.48MiB
136          mp4        1280x720   DASH video 2342k , avc1.4d401f, 30fps, video only, 75.52MiB
248          webm       1920x1080  DASH video 3383k , vp9, 30fps, video only, 111.43MiB
137          mp4        1920x1080  DASH video 4359k , avc1.640028, 30fps, video only, 141.98MiB
264          mp4        2560x1440  DASH video 10591k , avc1.640032, 30fps, video only, 351.25MiB
271          webm       2560x1440  DASH video 11802k , vp9, 30fps, video only, 308.19MiB
313          webm       3840x2160  DASH video 21217k , vp9, 30fps, video only, 794.71MiB
266          mp4        3840x2160  DASH video 23364k , avc1.640033, 30fps, video only, 752.21MiB
17           3gp        176x144    small , mp4v.20.3,  mp4a.40.2@ 24k
36           3gp        320x180    small , mp4v.20.3,  mp4a.40.2
5            flv        426x240    small , h263, mp3  @ 64k
43           webm       640x360    medium , vp8.0,  vorbis@128k
18           mp4        640x360    medium , avc1.42001E,  mp4a.40.2@ 96k
22           mp4        1280x720   hd720 , avc1.64001F,  mp4a.40.2@192k (best)
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 14 juin 2016 à 18:29:39
La configuration minimum pour lire une vidéo VP9 / Opus :
- Google Chrome 27 (sortie le 21 mai 2013) et suivantes
- Mozilla Firefox 47 (sortie le 7 juin 2016) et suivantes
- Microsoft Edge 14 (sortie prévue fin juillet 2016) et suivantes
- Opera depuis 2014
- Android 5 (sortie sur en 3 novembre 2014 sur les Nexus et en 2015 sur les autres téléphones récents)
- VLC 2.1.3 (février 2014) et suivants

Les navigateurs qui ne peuvent pas lire une vidéo VP9 / Opus :
- Microsoft Edge 12/13 (versions actuellement en prod)
- Microsoft Internet Explorer (pas de prise en charge de VP9, ni d'Opus)
- Apple Safari (pas de prise en charge de VP9, ni d'Opus)
- Apple iOS (pas de prise en charge de VP9, ni d'Opus)
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 15 juin 2016 à 07:58:52
Je suis étonné de la politique d'Olympus : les appareils photo compact haut de gamme neuf ne proposent que deux formats pour l'enregistrement des vidéos :
- MOV (format Apple, non lisible sur Windows 7 sans installer un logiciel / codec)
- MJPEG (suite d'image JPEG, prend une place énorme)

J'ai utilisé la plus forte compression "MOV" en 720p d'Olympus :
=> 10min et 2sec de vidéo = 488 Mo en MOV 720p (48,8 Mo/min)

Après compression double-passe en VP9, on passe de 488 Mo (48,8 Mo/min) a... 22 Mo (2,2 Mo/min), sans changement de résolution !
La taille est divisée par plus de 22 sans perte de qualité !


J'ai encodé 16 vidéos MOV (4,7Go) => sans perte visible de qualité cela fait 212 Mo en VP9.
Durée de la compression double passe : 3 heures sur un Core i3-4150 @3.50GHz (toute la partie décodage .MOV se fait en utilisant un seul cœur)
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: Nico le 15 juin 2016 à 08:12:11
Globalement, les APN ne compressent que très peu la vidéo (et la photo). Problème de ressources ? Manière d'éviter une compression destructrice ?
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: underground78 le 15 juin 2016 à 08:18:54
Probablement un peu des deux (et peut-être un peu d'optimisation des couts aussi).
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: Phach le 15 juin 2016 à 10:22:55
il doit aussi y avoir un problème de dissipation de la chaleur que ca pourrait génerer.
Je crois me souvenir qu'à une époque pas si lointaine certains modèles d'APN très haut de gamme chauffaient tellement en mode vidéo qu'il ne pouvait enregistrer que pendant quelques minutes.

Et puis il doit y avoir aussi une politique vis à vis du traitement d'image qu'on peut faire derrière. C'est un peu comme le RAW versus le JPEG.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: TroniQ89 le 23 novembre 2016 à 21:27:29
Suis je le seul qui n'arrive pas à avancer/reculer dans une vidéo encodée en vp9 avec ffmpeg?
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 11 novembre 2019 à 16:28:22
Désolé, pour la latence de réponse.

Je n'ai pas le problème avec VP9, mais avec AV1, cf Tutoriel pour encoder AV1 et réduire une vidéo de 3 Go à 30 Mo ! (https://lafibre.info/tv-numerique-hd-3d/encoder-av1/)

Tu as testé cette solution ?
D'après https://ffmpeg.org/ffmpeg.html, -force_key_frames expr:gte(t,n_forced*5) pour une toutes les 5s (soit on fait comme YouTube en VP9, mais en acceptant un temps de seek plus long, soit il faudrait réduire pour tenir compte de la lourdeur du décodage).
Ah, OK  :)
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 11 novembre 2019 à 20:15:34
Edit commandes modifiées avec les solutions trouvées à la page suivante (rajout de -pix_fmt yuv420p)

J'ai un souci pour les vidéos crées depuis VirtualBox (version 6.0.14).

Il y a pas mal d'options, mais le codec est obligatoirement VP8. Ce n'est pas grave, je préfère que le PC perdre peu de temps à encoder en temps réel pour laisser le maximum de CPU pour le machine virtuelle.

Je règle donc la qualité vidéo au maximum, vu que je post-traiterais le fichier à posteriori.
Je me limite à 6 images par seconde, comme ça en visualisant les images à 30 images par seconde, je fais un accéléré de x5.

(https://lafibre.info/testdebit/ubuntu/201911_virtualbox_video_1.png)

Avec le post-traitement, tous les logiciels utilisés se sont révélés inefficaces, car VirtualBox ne met aucune image de référence : pour chaque image, il faut faire le calcul depuis le début de la vidéo et je n'ai réussi à faire avec me logiciels habituels (Avidemux ou OpenShot Video Editor n'arrivnet pas a traiter le fichier en raison d'absence de keyframes).

J'ai opté pour une méthode radicale : je transforme la vidéo en autant des milliers d'images :

Convertir une vidéo en x images .png :
ffmpeg -i video.webm image%d.png
Cela générera des fichiers image1.png, image2.png…etc dans le répertoire courant. Les formats supportés sont PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.

Cette opération fonctionne bien et les images sont plutôt de bonne qualité.
Cela me permet de facilement supprimer ce qui doit être supprimé ou édité.

Script bash pour diviser le nombre d'images d'une capture par 3 :

#!/bin/bash
i="1"
j="1"
while [ $i -lt "5621" ]
do
mv ./image$i.png ./image$j.png
i=$[$i+1]
j=$[$j+1]
mv ./image$i.png ./sauvegarde/
i=$[$i+1]
mv ./image$i.png ./sauvegarde/
i=$[$i+1]
done

Script bash pour supprimer les 290 premières images :
#!/bin/bash
i="290"
j="1"
while [ $i -lt "1908" ]
do
        mv ./image$i.png ./image$j.png
        i=$[$i+1]
        j=$[$j+1]
done

Ensuite je fais l'opération dans l'autre sens pour récupérer une vidéo bien faite.

Convertir une série d'images en vidéo VP9 :
ffmpeg -f image2 -framerate 30 -i image%d.png -c:v libvpx-vp9 -pix_fmt yuv420p -b:v 0 -crf 30 -threads 4 -speed 1 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 video-source.webm

Rajouter un fichier audio à la vidéo :
ffmpeg -i audio-source.mp3 -vn -c:a libopus -b:a 160k -f webm audio-source.webm
ffmpeg -i video-source.webm -i audio-source.webm -c copy -map 0:0 -map 1:0 destination.webm


Le résultat est ce fichier vidéo VP9 : (nouvelle vidéo qui est parfaite, depuis le rajout de -pix_fmt yuv420p)
https://lafibre.info/videos/materiel/201911_dell_poweredge_r330_maj.webm

Il est plus ou moins lisible selon les les lecteurs. Firefox le refuse directement "La vidéo ne peut être visionnée, car le fichier est corrompu", Chrome et VLC cela passe plutôt bien, pour d'autres lecteur, les couleurs sont déformées alors que je n'ai pas eu d'erreur pendant la compression du fichier VP9 :
(https://lafibre.info/testdebit/ubuntu/201911_virtualbox_video_2.png)

(https://lafibre.info/testdebit/ubuntu/201911_virtualbox_video_3.png)

J'ai testé plusieurs option d'encodage et plusieurs niveau de qualité: cela ne change rien.

J'ai mis dans ce fichier compressé 201911_dell_poweredge_r330_maj.tar.xz (https://lafibre.info/videos/materiel/201911_dell_poweredge_r330_maj.tar.xz) les source de la vidéo : les 5769 images.png et le fichier audio source au format .mp3 (musique Creative Commons).
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 12 novembre 2019 à 08:11:11
Edit: commandes d'origine modifiées avec les solutions détaillées dans les messages ci-dessous.

C'est un peu hors-sujet, mais je rajouter le tutoriel pour le faire en H.264.

Convertir une vidéo en x images .png :
ffmpeg -i source.webm image%d.png
Cela générera des fichiers image1.png, image2.png…etc dans le répertoire courant. Les formats supportés sont PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.

Convertir une série d'images en vidéo H.264 :
ffmpeg -f image2 -framerate 30 -i image%d.png -c:v libx264 -pix_fmt yuv420p -preset veryslow -profile:v high -level:v 4.0 -crf 20 video-source.mp4

Options de l'encodeur libx264 :
-pix_fmt yuv420p : Certains lecteurs pourraient ne pas être en mesure de gérer le résultat sans un sous-échantillonnage de chrominance 4:2:0 (https://fr.wikipedia.org/wiki/Sous-%C3%A9chantillonnage_de_la_chrominance#4:2:0)
-preset veryslow : Permet d'avoir une compression plus forte pour une même qualité (au prix d'un encodage plus long)
-profile:v high -level:v 4.0 : Les différents niveaux sont expliqués sur https://en.wikipedia.org/wiki/Advanced_Video_Coding

-crf 20 : qualité d'image élevée

Gestion du nb d'image par secondes :
-framerate : concerne la source
-r : concerne la destination

Pour faire une vidéo à un débit de 25 images/seconde, mais avec une source à 1 image par seconde - chaque image est dupliquée 25 fois :
ffmpeg -f image2 -framerate 1 -i image%d.png -c:v libx264 -pix_fmt yuv420p -preset veryslow -profile:v high -level:v 4.0 -crf 20 -r 25 video-source.mp4

Rajouter un fichier audio AAC à la vidéo :
ffmpeg -i audio-source.mp3 audio-source.wav
ffmpeg -i audio-source.wav -c:a aac -b:a 160k audio-source.m4a
ffmpeg -i video-source.mp4 -i audio-source.m4a -c copy -map 0:0 -map 1:0 destination.mp4


Monter le son de 6 décibels sans ré-encoder la vidéo :
ffmpeg -i source.mp4 -vcodec copy -af "volume=6dB" destination.mp4

Le résultat la aussi n'est pas lisible avec Firefox, mais cela passe bien avec les autres lecteurs :

https://lafibre.info/videos/materiel/201911_dell_poweredge_r330_maj.mp4

Retour de ffmpeg :
$ ffmpeg -f image2 -framerate 30 -i image%d.png -c:v libx264 -crf 20 destination.mp4
ffmpeg version 4.1.4-1build2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.2.1-4ubuntu1)
  configuration: --prefix=/usr --extra-version=1build2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=1build2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-liblensfun --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, image2, from 'image%d.png':
  Duration: 00:03:12.30, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24(pc), 1024x768, 30 fps, 30 tbr, 30 tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x56078b55d400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x56078b55d400] profile High 4:4:4 Predictive, level 3.1, 4:4:4 8-bit
[libx264 @ 0x56078b55d400] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'destination.mp4':
  Metadata:
    encoder         : Lavf58.20.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv444p, 1024x768, q=-1--1, 30 fps, 15360 tbn, 30 tbc
    Metadata:
      encoder         : Lavc58.35.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame= 5769 fps=142 q=-1.0 Lsize=    2908kB time=00:03:12.20 bitrate= 124.0kbits/s speed=4.72x   
video:2840kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.398931%
[libx264 @ 0x56078b55d400] frame I:33    Avg QP: 8.86  size: 15981
[libx264 @ 0x56078b55d400] frame P:1495  Avg QP:12.61  size:  1146
[libx264 @ 0x56078b55d400] frame B:4241  Avg QP:15.46  size:   157
[libx264 @ 0x56078b55d400] consecutive B-frames:  1.6%  0.9%  0.9% 96.7%
[libx264 @ 0x56078b55d400] mb I  I16..4: 91.6%  0.0%  8.4%
[libx264 @ 0x56078b55d400] mb P  I16..4:  3.8%  0.0%  0.3%  P16..4:  1.0%  0.2%  0.1%  0.0%  0.0%    skip:94.6%
[libx264 @ 0x56078b55d400] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  1.9%  0.0%  0.0%  direct: 0.1%  skip:97.9%  L0:64.8% L1:34.8% BI: 0.3%
[libx264 @ 0x56078b55d400] coded y,u,v intra: 6.5% 1.0% 1.0% inter: 0.1% 0.1% 0.0%
[libx264 @ 0x56078b55d400] i16 v,h,dc,p: 39% 59%  2%  0%
[libx264 @ 0x56078b55d400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 30% 33% 20%  2%  2%  2%  6%  3%  3%
[libx264 @ 0x56078b55d400] Weighted P-Frames: Y:2.2% UV:2.1%
[libx264 @ 0x56078b55d400] ref P L0: 43.2%  6.7% 40.4%  8.9%  0.9%
[libx264 @ 0x56078b55d400] ref B L0: 42.7% 56.1%  1.2%
[libx264 @ 0x56078b55d400] ref B L1: 98.0%  2.0%
[libx264 @ 0x56078b55d400] kb/s:120.97
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 17 novembre 2019 à 17:35:55
Le fichier crée par ffmpeg est lisible avec divers logiciels de lecture vidéo et le navigateur Chromium, mas pas Firefox.

Twitter refuse de l'importer, donc je pense bien que cela doit être une erreur dans ma ligne de commande ffmpeg

(https://lafibre.info/testdebit/ubuntu/201911_virtualbox_video_4.png)
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: underground78 le 17 novembre 2019 à 17:42:13
Essaie avec "-profile:v high -level:v 4.1" pour voir.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 17 novembre 2019 à 17:46:59
Alors c'est radical: ffmpeg refuse de faire la vidéo avec ces paramètres.

J'ai l'erreur suivante :
[libx264 @ 0x56220f3eaa00] Error setting profile high.
[libx264 @ 0x56220f3eaa00] Possible profiles: baseline main high high10 high422 high444
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

La ligne de commande et le retour complet : (c'est le ffmpeg des dépôts Ubuntu 19.10)
$ ffmpeg -f image2 -framerate 30 -i image%d.png -c:v libx264 -profile:v high -level:v 4.1 -crf 20 destination.mp4
ffmpeg version 4.1.4-1build2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.2.1-4ubuntu1)
  configuration: --prefix=/usr --extra-version=1build2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=1build2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-liblensfun --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, image2, from 'image%d.png':
  Duration: 00:03:12.30, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24(pc), 1024x768, 30 fps, 30 tbr, 30 tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> h264 (libx264))
Press [q] to stop, [?] for help
x264 [error]: high profile doesn't support 4:4:4
[libx264 @ 0x56220f3eaa00] Error setting profile high.
[libx264 @ 0x56220f3eaa00] Possible profiles: baseline main high high10 high422 high444
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

J'ai mis dans ce fichier compressé 201911_dell_poweredge_r330_maj.tar.xz (https://lafibre.info/videos/materiel/201911_dell_poweredge_r330_maj.tar.xz) les source de la vidéo : les 5769 images.png et le fichier audio source au format .mp3 (musique Creative Commons).
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: underground78 le 17 novembre 2019 à 17:52:00
Pour le coup la vraie erreur est "x264 [error]: high profile doesn't support 4:4:4". Du même coup ça nous donne l'explication de pourquoi certains outils/sites peinent à traiter la vidéo produite sans ces options.

Ajoute l'option "-pix_fmt yuv420p".

Un peu de lecture pour la culture : https://fr.wikipedia.org/wiki/Sous-%C3%A9chantillonnage_de_la_chrominance.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 17 novembre 2019 à 18:12:39
Merci, cela fonctionne parfaitement et le fichier est vraiment de toute petite taille.

Pourquoi forcer le profil 4.1 ?

Le profil 4.2 n'est pas plus intéressant ? (cela semble plutôt bien supporté aujourd'hui, sur les iPhone, à partir de l'iPhone 5s)

J'ai comparé, mon fichier fait la même taille que ce soit en profil 4.0 , profil 4.1 ou profil 4.2.

Du coup coté VP9, cela doit être la même cause de pb ?
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: underground78 le 17 novembre 2019 à 18:58:24
Pourquoi forcer le profil 4.1 ?
A l'époque c'était le plus compatible avec le décodage matériel mais aujourd'hui c'est potentiellement moins un problème.

Le profil 4.2 n'est pas plus intéressant ? (cela semble plutôt bien supporté aujourd'hui, sur les iPhone, à partir de l'iPhone 5s)
L'intérêt du level 4.2 c'est qu'il permet le full HD à 60 fps ce que ne permet pas le level 4.1.

J'ai comparé, mon fichier fait la même taille que ce soit en profil 4.0 , profil 4.1 ou profil 4.2.
C'est que tu n'as pas atteint les limites du profil 4.0 avec cette source et les paramètres utilisés.

Du coup coté VP9, cela doit être la même cause de pb ?
Je connais moins bien le VP9 mais c'est très probable.

Pour le x264, une autre option intéressant est "-preset:v" pour changer les paramètres d'encodage en fonction du ratio vitesse/qualité ou vitesse/taille du fichier recherché.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 17 novembre 2019 à 19:20:40
Merci, les différents niveaux sont expliqués sur https://en.wikipedia.org/wiki/Advanced_Video_Coding
Pas besoin level 4.2 si on ne dépasse pas résolutions 1,280×720 à 60 images par seconde ou 1,920×1,080 à 30 images par seconde.

Je connais moins bien le VP9 mais c'est très probable.
Je pensais il y a quelques années que le VP9 serait supporté par tous les appareils après quelques années, le temps que la nouveauté se diffuse.

Aujourd'hui je comprends qu'il n'y aura probablement jamais de support de VP9 sur iOS ou safari. Aujourd'hui un utilisateur sur 5 n'a pas de support du VP9 et il n'y a plus trop de progressions, sauf pour Edge quand il va passer sur la base Chromium.

AV1 sera sans doute la solution de convergence, mais dans 5 ans... aucun support matériel aujourd'hui.
Bref en attendant, H264 semble un bon compromis vu qu'il est supporté par presque l'intégralité du parc, malgré le fait qu'il soit propriétaire.
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: vivien le 20 novembre 2019 à 22:06:43
Pour le x264, une autre option intéressant est "-preset:v" pour changer les paramètres d'encodage en fonction du ratio vitesse/qualité ou vitesse/taille du fichier recherché.

Impressionnant.

Pour une même qualité :
- ultrafast : 5766 Ko
- superfast : 3118 Ko
- veryfast : 2396 Ko
- faster : 2247 Ko
- fast : 2210 Ko
- medium – default preset :2173 Ko
- slow : 2069 Ko
- slower : 1223 Ko
- veryslow : 1004 Ko
- placebo : 1040 Ko
Titre: Encoder des vidéos HD720 à 1 Mb/s grâce au codec VP9 / Opus
Posté par: underground78 le 20 novembre 2019 à 22:17:45
Pour une même qualité :
Avec un bémol tout de même sur ce qu'on appelle "qualité" : à "crf" égal, il peut y avoir des variations de qualité perçue selon les paramètres utilisés.

C'est très difficile pour un encodeur d'avoir une notion de qualité qui colle à la perception humaine (voir tout ce qui tourne autour des métriques comme PSNR, SSIM, etc).