2-pass encoding ffmpg

2-pass encoding ffmpg - Traitement Vidéo - Video & Son

Marsh Posté le 24-08-2015 à 14:29:19    

Salut j'ai un petit problème avec l'encodage 2-pass de ffmpeg. Quand j'entre ma commande il me ressort un fichier 10 fois plus gros qu'en simple passe :
 

Code :
  1. ffmpeg -i "F:\a.mp4" -pass 1 -s 960x400 -c:v libxvid -b:v 530K -an -f mp4 NUL &&
  2. ffmpeg -i "F:\a.mp4" -pass 2 -s 960x400 -c:v libxvid -b:v 530K -c:a mp3 -b:a 100K "F:\b.mp4"


Le fichier original est un mp4(h264/aac) et dure 2h40, normalement il me le ressort avec un bitrate de 530 ce qui fait 700Mo et en double passe je me retrouve avec un fichier de 4.3Go. C'est surement une erreur de syntaxe mais pas moyen de trouver l'erreur.
Si quelqu'un pouvait m'aider, je l'en remercie d'avance.


Message édité par olkerearth le 24-08-2015 à 14:29:59
Reply

Marsh Posté le 24-08-2015 à 14:29:19   

Reply

Marsh Posté le 24-08-2015 à 16:38:03    

Salut,
 
Je n'ai pas utilisé ffmpeg en ligne de commande depuis un bon moment. Aussi, sous réserve de dire une bêtise (ce dont je te prierais à l'avance de m'excuser), je commencerais par essayer de retirer la définition du format de fichier/conteneur mp4 de la 1ère ligne (1ère passe), pour la placer plutôt dans la 2ème ligne (2ème passe).
Explication de la doc (https://ffmpeg.org/ffmpeg.html#Video-Options) :
   

Citation :

Select the pass number (1 or 2). It is used to do two-pass video encoding. The statistics of the video are recorded in the first pass into a log file (see also the option -passlogfile), and in the second pass that log file is used to generate the video at the exact requested bitrate. On pass 1, you may just deactivate audio and set output to null, examples for Windows and Unix:
 
    ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
    ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null


 
Exemples :
https://evilsoup.wordpress.com/2013 [...] g-guide-2/ , §2, sous-§ "Two-pass encoding", un modèle de commande tout en bas du §.
https://wiki.archlinux.org/index.ph [...] quality.29 : attention ici dans le wiki d'Arch tu auras remarqué que des commandes sont dépréciées, e.g. -vcodec, etc.


Message édité par zoroastre94 le 24-08-2015 à 16:42:10

---------------
"Avec un escalier prévu pour la montée, on réussit souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente" (devise Shadok)
Reply

Marsh Posté le 24-08-2015 à 17:49:17    

merci pour la réponse, j'ai essayé d'enlever la définition du format dans la première commande mais je reçois un massage d’erreur me disant qu'il ne trouve pas de format approprié pour NUL.
 

Code :
  1. ffmpeg -i "F:\a.mp4" -pass 1 -s 960x400 -c:v libxvid -b:v 530K -an NUL &&
  2. ffmpeg -i "F:\a.mp4" -pass 2 -s 960x400 -c:v libxvid -b:v 530K -c:a mp3 -b:a 100K "F:\b.mp4"


 
                   |
                   V
 
[NULL @ 0000000004ddea20] Unable to find a suitable output format for 'NUL'
NUL: Invalid argument

Reply

Marsh Posté le 24-08-2015 à 20:43:53    

Re,
Il faut laisser une indication relative au format cible dans la commande pour la 1ère passe. Dans l'exemple donné de la doc, c'est "-f rawvideo -y". L'option "rawvideo" permet de n'encoder que le flux, et de s'épargner, dans la 1ère passe, une encapsulation inutile.
Cela dit, c'est secondaire. Je doute que cela résolve ton problème, en fait.
Je vais essayer de faire moi-même un test de mon côté tout à l'heure.


---------------
"Avec un escalier prévu pour la montée, on réussit souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente" (devise Shadok)
Reply

Marsh Posté le 24-08-2015 à 21:34:38    

Je viens de tester un encodage en 2 passes basé sur tes paramètres vidéo & audio exacts, avec un échantillon source mpeg-2 HDV. Et c'est OK.
Je copie-colle ma ligne de commande :

 
Citation :

ffmpeg -i "E:\in_cut_5s.mpg" -pass 1 -s 960x400 -c:v libxvid -b:v 530k -an -f rawvideo -y NUL && ffmpeg -i "E:\in_cut_5s.mpg" -pass 2 -s 960x400 -c:v libxvid -b:v 530k -c:a mp3 -b:a 100k "E:\out.mp4"

 

Rapport mediainfo du fichier obtenu :
Général
Nom complet                              : E:\out.mp4
Format                                   : MPEG-4
Profil du format                         : Base Media
Identifiant du codec                     : isom
Taille du fichier                        : 568 Kio
Durée                                    : 5s 496ms
Type de débit global                     : Constant
Débit global moyen                       : 846 Kbps
Application utilisée                     : Lavf56.40.100

 

Vidéo
ID                                       : 1
Format                                   : MPEG-4 Visual
Profil du format                         : Simple@L3
Paramètres du format, BVOP               : Non
Paramètres du format, QPel               : Non
Paramètres du format, GMC                : Pas de warppoints
Paramètres du format, Matrice            : Default (H.263)
Identifiant du codec                     : 20
Durée                                    : 5s 360ms
Type de débit                            : Constant
Débit                                    : 763 Kbps
Largeur                                  : 960 pixels
Hauteur                                  : 400 pixels
Format à l'écran                         : 16/9
Type d'images/s                          : Constant
Images par seconde                       : 25,000 Im/s
Espace de couleurs                       : YUV
Sous-échantillonnage de la chrominance   : 4:2:0
Profondeur des couleurs                  : 8 bits
Type de balayage                         : Progressif
Mode de compression                      : Avec perte
Bits/(Pixel*Image)                       : 0.080

 

Audio
ID                                       : 2
Format                                   : MPEG Audio
Version du format                        : Version 1
Profil du format                         : Layer 3
Paramètres du format, Mode               : Joint stereo
Extension du mode                        : MS Stereo
Identifiant du codec                     : 6B
Durée                                    : 5s 496ms
Duration_LastFrame                       : -1ms
Type de débit                            : Constant
Débit                                    : 96,0 Kbps
Débit maximum                            : 100,0 Kbps
Canaux                                   : 2 canaux
Echantillonnage                          : 48,0 KHz
Mode de compression                      : Avec perte
Taille du flux                           : 64,4 Kio (11%)

Message cité 1 fois
Message édité par zoroastre94 le 24-08-2015 à 22:04:16

---------------
"Avec un escalier prévu pour la montée, on réussit souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente" (devise Shadok)
Reply

Marsh Posté le 24-08-2015 à 21:50:33    

Et il y a pas un moyen qu'il ne dépasse pas les 530 kbps ? Car 3500 kbps ça me sert pas à grand chose.

Reply

Marsh Posté le 24-08-2015 à 23:03:09    

Bonsoir,
 
Certes, 3500 kbps, c'est beaucoup,  
mais je suis étonné que 530 kbps suffisent pour encoder une (vraie ?) vidéo en résolution 960 x 400 : ce sera bon avec si peu ?

Reply

Marsh Posté le 24-08-2015 à 23:06:32    

zoroastre94 a écrit :

Je viens de tester un encodage en 2 passes basé sur tes paramètres vidéo & audio exacts, avec un échantillon source mpeg-2 HDV. Et c'est OK.
Je copie-colle ma ligne de commande :
 

Citation :

ffmpeg -i "E:\in_cut_5s.mpg" -pass 1 -s 960x400 -c:v libxvid -b:v 530k -an -f rawvideo -y NUL && ffmpeg -i "E:\in_cut_5s.mpg" -pass 2 -s 960x400 -c:v libxvid -b:v 530k -c:a mp3 -b:a 100k "E:\out.mp4"


 
Type de débit                            : Constant
Débit                                    : 763 Kbps



Ben cela ne me semble pas être si OK que ça : on demande un débit variable (deux passes) à 530 kbs et on obtient une vidéo à débit constant de 763.
Je me trompe ?

Reply

Marsh Posté le 24-08-2015 à 23:17:04    

J'ai pris une configuration CD pour voir ce que ça allait donner mais voilà. Faut dire aussi que la vidéo est un peu longue. Si ça marche je prendrais une configuration dvd.


Message édité par olkerearth le 24-08-2015 à 23:22:49
Reply

Marsh Posté le 25-08-2015 à 02:30:53    

@leon1789 & olkerearth
En effet le résultat que j'ai posté n'est pas si OK que ça !
My bad.   :ange:
De plus, j'ai été (re)voir la doc ffmpeg, et spécifier le format de conteneur ("-f" ) dans la passe 1 est, entre autres choses, recommandé pour x264 (et je pense que c'est valable pour xvid aussi).
Je cite:

Citation :

In pass 1 specify a output format (with "-f" ) that matches the output format in pass 2.
 Also in pass 1, specify the audio codec used in pass 2; in many cases "-an" in pass 1 will not work.

 

Par contre, je ne suis pas sûr que le débit vidéo obtenu dans le fichier dont j'ai posté les caractéristiques soit réellement constant, malgré ce qu'affiche mediainfo. Il me faudrait vérifier en encodant 1 vidéo de durée nettement supérieure à 5sec.

 

Vite fait / dit (avec les risques d'erreur que ça comporte), à mon avis on peut :

 

- soit réduire le débit cible dans la ligne de commande. Cependant, je suis surpris que ta vidéo en sortie, olkerearth, monte jusqu'à 3500 kbps...

 

- soit essayer de plafonner le bitrate cible avec une commande du type (ce n'est qu'un exemple) :

Citation :

ffmpeg -i "E:\in_cut_5s.mpg" -pass 1 -s 960x400 -c:v libxvid -b:v 530k -c:a mp3 -b:a 100k -f mp4 -y NUL && ffmpeg -i "E:\in_cut_5s.mpg" -pass 2 -s 960x400 -maxrate 630k -bufsize 300k -c:v libxvid -b:v 530k -c:a mp3 -b:a 100k "E:\out.mp4"


NB: d'après la doc, spécifier un "maxrate" oblige à spécifier une "bufsize".
Avec la commande modifiée ci-dessus, mon fichier test (certes trop court !) de 5s a été nettement réduit en bitrate & en volume, par rapport à la vidéo issue de la commande antérieure (cf.post #5).


Message édité par zoroastre94 le 25-08-2015 à 18:47:21

---------------
"Avec un escalier prévu pour la montée, on réussit souvent à monter plus bas qu'on ne serait descendu avec un escalier prévu pour la descente" (devise Shadok)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed