[ffmpeg] Encodage mp4 x264

Applications multimedia / jeux
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

[ffmpeg] Encodage mp4 x264

Message par Feng »

Bonjour,

Je suis en train de reconvertir toutes les vidéos de mon site pour qu'elles soient supportées par les appareils mobile (type iPad & cie), j'ai choisis le profil main qui me semble être un bon compromis. Voici la commande que j'utilise :

Code : Tout sélectionner

ffmpeg -i $1 -y -vcodec libx264 -vprofile main -preset slow -b:v 400k -maxrate 400k -bufsize 800k -vf scale=-1:480 -threads 1 -acodec aac -strict -2 -b:a 128k $2
Elle fonctionne dans une bonne majorité des cas, mais environ 1 fois sur 10, ffmpeg reste bloqué, sans ne donner aucun message d'erreur.
Voici un fichier d'exemple https://docs.google.com/open?id=0B-Bury ... ThHUUl5SnM
Chacun des fichiers qui provoque un freeze, si on relance la conversion, refreezera à la même frame (différente pour chaque fichier).

Quelqu'un a-t-il une idée de pourquoi, et/ou comment résoudre ce problème ?
patou355
Daikyu
Messages : 50
Inscription : mar. 13 mars 2012, 21:34

Re: [ffmpeg] Encodage mp4 x264

Message par patou355 »

Si ça se trouve tu as résolu ton problème depuis des lustres, mais c'est depuis des temps immémoriaux que je chante les louanges du couple mplayer/mencoder. Aussi, est-ce dernier que j'ai utilisé pour encoder ta vidéo, et ça fonctionne à merveille.

Je te donne mon petit script, qui fonctionne de la manière suivante. Si tu le mets (le script) dans le répertoire '.' il exportera toutes les vidéos présentes dans '.' vers './output', qu'il aura fallu créer au préalable. Tu peux l'agrémenter à ta sauce au niveau des résolutions, voire commenter la 2ème ligne si une seule passe te suffit...

Code : Tout sélectionner

for i in *.mp4 *.flv *.avi *.MOV *.rm
do 
	j=${i// /_}
	mv -T "$i" "$j"
	mencoder $j -oac mp3lame -ovc x264 -x264encopts bitrate=300:turbo=2:pass=1:ratetol=80 -o ./output/$j.avi
	mencoder $j -oac mp3lame -ovc x264 -x264encopts bitrate=300:turbo=2:pass=3:ratetol=80 -o ./output/$j.avi

done
Enjoy!
Avatar de l’utilisateur
Feng
yeomen
Messages : 273
Inscription : mer. 07 avr. 2010, 20:19

Re: [ffmpeg] Encodage mp4 x264

Message par Feng »

Bonjour,

Merci pour ton retour :)

En fait il se trouve que non, le problème n'a toujours pas été résolu, ce site est un projet amateur et moi et mes amis n'avons toujours pas eu le temps de finaliser.

Je n'ai pas eu le temps de tester ton script mais je te fais confiance. Concernant la conversion en elle-même, j'ai énormément d'option concernant le x264, cf le script de conversion avidemux suivant :

Code : Tout sélectionner

//AD

var app = new Avidemux();

origx = app.video.width;
origy = app.video.height;

// calculate new y-value
x = 600;
y = (origy / (origx/x));

if (y % 16 >= 8)
	y = y - y % 16 + 16;
else
	y -= y % 16;

app.video.setPostProc(7,3,0);
app.video.fps1000 = 24004;

if(origx > 600)
	app.video.addFilter("resize","w="+x,"h="+y,"algo=2");

app.video.codecPlugin("32BCB447-21C9-4210-AE9A-4FCE6C8588AE", "x264", "2PASSBITRATE=400", "<?xml version='1.0'?><x264Config><presetConfiguration><name>Common Main Profile MP4</name><type>user</type></presetConfiguration><x264Options><fastFirstPass>true</fastFirstPass><threads>1</threads><deterministic>true</deterministic><sliceThreading>false</sliceThreading><threadedLookahead>-1</threadedLookahead><idcLevel>-1</idcLevel><vui><sarAsInput>false</sarAsInput><sarHeight>1</sarHeight><sarWidth>1</sarWidth><overscan>undefined</overscan><videoFormat>undefined</videoFormat><fullRangeSamples>true</fullRangeSamples><colorPrimaries>undefined</colorPrimaries><transfer>undefined</transfer><colorMatrix>smpte240m</colorMatrix><chromaSampleLocation>0</chromaSampleLocation></vui><referenceFrames>4</referenceFrames><gopMaximumSize>250</gopMaximumSize><gopMinimumSize>24</gopMinimumSize><scenecutThreshold>40</scenecutThreshold><periodicIntraRefresh>false</periodicIntraRefresh><bFrames>16</bFrames><adaptiveBframeDecision>2</adaptiveBframeDecision><bFrameBias>4</bFrameBias><bFrameReferences>normal</bFrameReferences><loopFilter>true</loopFilter><loopFilterAlphaC0>0</loopFilterAlphaC0><loopFilterBeta>0</loopFilterBeta><cabac>true</cabac><openGop>disabled</openGop><interlaced>disabled</interlaced><constrainedIntraPrediction>false</constrainedIntraPrediction><cqmPreset>flat</cqmPreset><intra4x4Luma><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value></intra4x4Luma><intraChroma><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value></intraChroma><inter4x4Luma><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value></inter4x4Luma><interChroma><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value></interChroma><intra8x8Luma><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value></intra8x8Luma><inter8x8Luma><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value><value>16</value></inter8x8Luma><analyse><partitionI4x4>true</partitionI4x4><partitionI8x8>false</partitionI8x8><partitionP8x8>true</partitionP8x8><partitionP4x4>false</partitionP4x4><partitionB8x8>true</partitionB8x8><dct8x8>false</dct8x8><weightedPredictionPframes>smart</weightedPredictionPframes><weightedPrediction>true</weightedPrediction><directPredictionMode>auto</directPredictionMode><chromaLumaQuantiserDifference>0</chromaLumaQuantiserDifference><motionEstimationMethod>multi-hexagonal</motionEstimationMethod><motionVectorSearchRange>32</motionVectorSearchRange><motionVectorLength>-1</motionVectorLength><motionVectorThreadBuffer>-1</motionVectorThreadBuffer><subpixelRefinement>6</subpixelRefinement><chromaMotionEstimation>true</chromaMotionEstimation><mixedReferences>true</mixedReferences><trellis>allModeDecisions</trellis><fastPSkip>false</fastPSkip><dctDecimate>false</dctDecimate><psychoRdo>1</psychoRdo><psychoTrellis>0</psychoTrellis><noiseReduction>0</noiseReduction><interLumaDeadzone>21</interLumaDeadzone><intraLumaDeadzone>11</intraLumaDeadzone></analyse><rateControl><quantiserMinimum>10</quantiserMinimum><quantiserMaximum>51</quantiserMaximum><quantiserStep>4</quantiserStep><maximumConstantRateFactor>0</maximumConstantRateFactor><averageBitrateTolerance>0.35</averageBitrateTolerance><vbvMaximumBitrate>0</vbvMaximumBitrate><vbvBufferSize>0</vbvBufferSize><vbvInitialOccupancy>0.9</vbvInitialOccupancy><ipFrameQuantiser>1.4</ipFrameQuantiser><pbFrameQuantiser>1.3</pbFrameQuantiser><adaptiveQuantiserMode>variance</adaptiveQuantiserMode><adaptiveQuantiserStrength>1</adaptiveQuantiserStrength><mbTree>true</mbTree><frametypeLookahead>40</frametypeLookahead><quantiserCurveCompression>0.6</quantiserCurveCompression><reduceFluxBeforeCurveCompression>20</reduceFluxBeforeCurveCompression><reduceFluxAfterCurveCompression>0.5</reduceFluxAfterCurveCompression></rateControl><accessUnitDelimiters>false</accessUnitDelimiters><spsIdentifier>0</spsIdentifier><sliceMaxSize>0</sliceMaxSize><sliceMaxMacroblocks>0</sliceMaxMacroblocks><sliceCount>0</sliceCount><hrd>none</hrd></x264Options></x264Config>");

app.audio.reset();
app.audio.codec("Lame",192,20,"c0 00 00 00 01 00 00 00 01 00 00 00 04 00 00 00 00 00 00 00 ");
app.audio.normalizeMode=0;
app.audio.normalizeValue=0;
app.audio.delay=0;
app.audio.mixer="NONE";
app.setContainer("AVI");
setSuccess(1);
Penses-tu que Mencoder peut tout gérer ? Au moins s'en approcher ce serait bien.

Le script de conversion est appelé à chaque fois qu'une nouvelle vidéo est envoyée sur le site, l'opération n'est donc pas manuelle et peut se faire en plusieurs temps et faire intervenir plusieurs programmes.
patou355
Daikyu
Messages : 50
Inscription : mar. 13 mars 2012, 21:34

Re: [ffmpeg] Encodage mp4 x264

Message par patou355 »

Il y a certains programmes (je pense à mencoder et vim) où la seule question qui vaille n'est pas "est-ce qu'il peut le faire" car la réponse s'avère être toujours la même, mais comment le faire. :mrgreen:

Ce que je n'ai pas compris, c'est ce que tu appelles "la conversion elle-même" parce que ce que je t'ai mis, ça convertit tout les fichiers vidéos qui sont dans le dossier, et crois-moi ça le fait bien... :altere:
Répondre