#1 Le 23/04/2010, à 09:30
- seuf76
Encodage X264 en ligne de commande
Bonjour à tous,
Voila, j'ai réalisé une petite appli web de vidéo en streaming utilisant la balise <video> de HTML 5.
Le principe est de lister les vidéos dispo sur le serveur, de lancer l'encodage depuis l'interface web et une fois l'encodage terminé, on peut la regarder ne streaming.
Du coup ça s'appelle Voquad pour Video On Quasi Demand (http://sourceforge.net/projects/voquad/)
Pour l'instant il est possible de convertir la vidéo uniquement au format Theora, via la commande ffmpeg2theora.
Je souhaiterai y ajouter la possibilité d'encoder la vidéo en x264, afin d'être compatible avec les navigateurs Chrome et Safari (avec un conteneur mp4).
Mais voila, je galère pour trouver la bonne ligne d'encodage...
J'ai essayé avec mencoder, et x264 (le binaire), mais rien n'y fait..
Soit je n'ai pas de son, soit l'encodage marche mais une fois qu'on regarde la vidéo dans le navigateur, elle est tronquée, ou elle est de mauvaise qualitée...
Voici les commandes que j'ai déjà testé...
- Avec mencoder :
mencoder '$video_in' -ovc x264 -oac faac -x264encopts subq=5:pass=1:bitrate=$bitrate:bframes=3:partitions=p8x8,b8x8,i4x4:weight_b:threads=auto:nopsnr:nossim:frameref=3:mixed_refs:bime:brdo:level_idc=41:direct_pred=auto:trellis=1 -o '$video_out.avi'
MP4Box -aviraw video '$video_out.avi'
MP4Box -aviraw audio '$video_out.avi'
for i in *.raw; do mv \"\$i\" `echo \"\$i\" |sed 's/raw\$/aac/'` ; done
MP4Box -add '$video_out\_audio.aac' -add '$video_out\_video.h264':fps=$fps '$video_out.mp4'
Mais quand j'essaye d'extraire le son et la video pour la repackager avec MP4Box, ça ne marche pas..
- Avec x264
x264 --pass 1 --stats data/x264_log.stats --bitrate 2306 --stats data/test.stats --ref 3 --bframes 3 --b-pyramid --weightb --direct auto --filter -4:-3 --analyse all --8x8dct --subme 6 --me umh --trellis 1 --mixed-refs --progress --no-psnr --vbv-maxrate 400 --output data/test2.mp4 data/test.yuv 720x540
x264 --pass 2 --stats data/x264_log.stats --bitrate 2306 --stats data/test.stats --ref 3 --bframes 3 --b-pyramid --weightb --direct auto --filter -4:-3 --analyse all --8x8dct --subme 6 --me umh --trellis 1 --mixed-refs --progress --no-psnr --vbv-maxrate 400 --output data/test2.mp4 data/test.yuv 720x540
La, je n'ai pas de son, car le fichier en entrée test.yuv est juste un raw de la vidéo d'origine.
Si quelqu'un a une idée de commande à exécuter pour encoder une vidéo en h264 et la packager dans du MP4, je suis preneur...
PS : je souhaite utiliser uniquement des outils dispo dans les dépots ubuntu (pas de recompilation de ffmpeg par exemple), afin de pouvoir packager en .deb par la suite...
Hors ligne
#2 Le 23/04/2010, à 10:08
- PRQT83
Re : Encodage X264 en ligne de commande
Bonjour,
Juste une idée ( qui est peut être mauvaise ou inutile d'ailleurs):
Pourquoi ne pas tester en encodant une vidéo avec un logiciel comme handbrake?
Le truc, c'est qu'il me semble qu'il te montre la ligne de commande qu'il utilise.
Ça pourrais t'indiquer les bonnes options
#3 Le 23/04/2010, à 10:19
- seuf76
Re : Encodage X264 en ligne de commande
J'ai déjà testé d'encoder une video avec handbrake, et le la mettre dans une balise <video> : ça marche !
Hélas, je n'arrive pas a récupérer la ligne de commande qui est utilisée pour l'encodage
Hors ligne
#4 Le 23/04/2010, à 10:27
- PRQT83
Re : Encodage X264 en ligne de commande
Et en le lançant via un terminal?
Tu peut me dire en quoi est la vidéo d'origine ( ou si pas d'importance) et en quoi tu la veux ( audio vidéo conteneur taille) que je jete un oeil avec mencoder.
Par contre, te promet rien, j'ai plus encoder depuis un moment et me semble que les noms de codecs ont changés avec mencoder.
Je repasse d'ici une heure, une heure et demi
#5 Le 23/04/2010, à 10:36
- seuf76
Re : Encodage X264 en ligne de commande
Alors en format de video d'origine : n'importe..
Généralement, ça sera du mpeg 4 dans du AVI.
En sortie, ce que j'aimerai, c'est du h264 dans du MP4.
La taille n'a pas d'importance non plus, il faut que la qualité reste équivalente à la vidéo d'origine..
En tout cas, merci beaucoup de bien vouloir me filer un coup de main...
Hors ligne
#6 Le 23/04/2010, à 13:16
- PRQT83
Re : Encodage X264 en ligne de commande
Re,
Essaye ta commande avec mencoder ( post #1) en enlevant l'option brdo pour voir.
#7 Le 23/04/2010, à 15:10
- seuf76
Re : Encodage X264 en ligne de commande
Dans la commande post #1, le problème venais plus tu repackaging en MP4.
En effet, je n'arrivais pas a extraire l'audio et la video en raw du .avi généré pour le remettre dans du MP4. (avec MP4Box)
Après, j'ai lu qu'il fallait obligatoirement 2 passes pour que la vidéo puisse être lue par Chrome..
Aurais tu des exemples d'encodage avec mencoder en 2 passes ?
Hors ligne
#8 Le 23/04/2010, à 15:23
- PRQT83
Re : Encodage X264 en ligne de commande
Pourquoi tu mets pas direct en .mp4?
Ca devrais marcher.
Par contre, bizarre cette histoire de 2 pass obligatoire...
je retope mes liens et te mets quelques exemples
#9 Le 24/04/2010, à 15:23
- kurtnoise
Re : Encodage X264 en ligne de commande
Une première commande que tu peux tester:
x264 -crf 18 –intra-refresh –fps 25 –vbv-maxrate 5000 –vbv-bufsize 200 –slice-max-size 1500 -o output.mp4 input
NB : ne fonctionne probablement pas avec les dépôts actuels...car nécessite une compilation récente à partir des sources.
Dernière modification par kurtnoise (Le 24/04/2010, à 15:23)
Hors ligne
#10 Le 24/04/2010, à 18:18
- seuf76
Re : Encodage X264 en ligne de commande
Erf, j'ai testé cette commande, mais la version cd x264 que j'ai n'est pas compatible avec les fichiers AVI en entrée, et certaines options ne sont pas reconnues :
x264 [error]: not compiled with AVIS input support
C'est compliqué à recompiler ? y'a beaucoup de dépendances ?
Après, je sais pas si ça se fait de générer un .deb ou .rpm en incluant un binaire déjà dispo dans les dépots de base
Hors ligne
#11 Le 26/04/2010, à 12:48
- seuf76
Re : Encodage X264 en ligne de commande
Re..
Bon, j'ai un peu progressé avec mencoder..
J'encode en 2 passes :
1ère passe :
mencoder video_in.avi -o /dev/null -oac faac -ovc x264 -x264encopts subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:bitrate=2500:pass=1
2eme passe :
mencoder video_in.avi -o video_out.avi -oac faac -ovc x264 -x264encopts subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:bitrate=2500:pass=2
MP4Box -aviraw audio <video_out>.avi => génère un fichier video_out_audio.raw
MP4Box -aviraw video <video_out>.avi => génère un fichier video_out_video.h264
mv <video_out>_audio.raw <video_out>_audio.aac => Renomme le .raw en .aac
MP4Box -add <video_out>_audio.aac -add <video_in>_video.h264 <video_out>.mp4 => Packaging MP4
Le fichier mp4 obtenu est parfaitement lisible dans un lecteur traditionnel (gstreamer), mais dans le lecteur vidéo de chrome, ça bug (tourne en boucle sur 5 secondes au milieu de la vidéo, avec du son)
Si quelqu'un a une idée...
Hors ligne
#12 Le 02/05/2010, à 11:04
- kurtnoise
Re : Encodage X264 en ligne de commande
Erf, j'ai testé cette commande, mais la version cd x264 que j'ai n'est pas compatible avec les fichiers AVI en entrée, et certaines options ne sont pas reconnues :
x264 [error]: not compiled with AVIS input support
C'est compliqué à recompiler ? y'a beaucoup de dépendances ?
Non pas vraiment compliqué...Les dépendances sont libavcodec/libavformat/libpostproc/ffmpegsource.
Hors ligne