[tuto]Remultiplexer des mkv/avi en mp4 pour iDevices/ps3/360

Remultiplexer des mkv/avi en mp4 pour iDevices/ps3/360 [tuto] - Traitement Vidéo - Video & Son

Marsh Posté le 05-05-2012 à 18:38:22    

v0.1 (version ouverte à toutes remarques !)
 
Bonjour à tous !
Après avoir lurké pendant des années sur ce forum et récolté énormément de tips et bons conseils, je me permets un petit tutorial sur une opération que j'ai un peu fouillée ces derniers jours : remultiplexer des mkv/avi en mp4 SANS ré encoder.
Je voulais au départ charger des mkv en 1080p avec sous-titres "soft" sur ipad3, mais la même logique s'applique pour beaucoup de devices qui supportent mp4.
 
Préliminaire rapide pour comprendre les bases :
mkv, avi, mp4 sont des formats de fichiers "conteneurs" dans lesquels on peut trouver une ou plusieurs pistes de video, audio ou sous-titres. De nombreux devices supportent très bien les pistes vidéos h.264 mais seulement de certains types et seulement en conteneurs mp4.
 
L'approche bourrine, celle qui marche à tous les coups mais qui prends du temps, c'est le ré encodage avec incrustation des sous-titres dans la piste vidéo ("hard" subtitles). Je souhaitais m'épargner ça, mais si vous avez beaucoup de CPU et de temps, des outils comme handbrake le font très bien, et manuellement c'est avisynth+x264+mp4box.
L'approche qui consiste à utiliser un lecteur alternatif type GoodPlayer ou ADPlayerHD repose sur du décodage software, qui consomme plus de batterie et n'offre pas un framerate acceptable. Surtout en 1080p.
 
Ici, on souhaite extraire les pistes qui nous intéressent du conteneur original et les insérer dans un nouveau conteneur : on les re multiplexe. Ca doit prendre moins de 30 secondes avec un script, batch ou shell selon votre type d'OS.
 
Outils utilisés :
Uniquement des outils CLI, souvent ceux qui sont au coeur de softs "tout fait" avec interface graphique. Mais au moins là on comprend ce qui se passe, et on peut scripter pour automatiser.
MKVToolNix
MP4Box
Lame
NeroAac
 
 
Les étapes,  :
0) obtenir les informations nécessaires sur le fichier :

Code :
  1. mkvinfo "source.mkv"

ou bien

Code :
  1. mp4box -info source.avi


 
1) extraire toutes les pistes du mkv à partir des ID retournées par mkvinfo :

Code :
  1. mkvextract tracks source.mkv 0:"video.h264" 1:"audio.aac" 2:"st.ass"

etc.
Ou si c'est un avi :

Code :
  1. MP4Box -aviraw video source.avi

et

Code :
  1. MP4Box -aviraw audio source.avi

etc.
 
 
2) S'assurer, dans les informations, que la piste vidéo est bien supportée telle quelle par le device cible. Très grossièrement : le h.264 est spécifié selon plusieurs "profils", qui vont avoir des lecteurs cibles différents (embarqué, stream IPTV, disques...) puis ensuite pour chaque profil, on a plusieurs "niveaux" qui vont en gros avoir un bitrate cible.  
Votre lecteur multimédia (xbox, ps3, iDevice etc.) aura un décodeur h.264 avec un profil+niveau MAX supportés. Si le profil h.264 est au-dessus, pas de bol, il faudra ré encoder. Si c'est seulement le niveau, c'est selon.
Par exemple, pour iDevice, c'est High Profile@L4.1 . Si votre piste vidéo est en "High 10 Profile" (le fameux Hi10p des teams de fansubs), il faudra ré encoder. Si le niveau est au-dessus de 4.1, vous pouvez tenter d'éditer l'en-tête avec un éditeur hexa : changer la séquence \x67\x64\x00\x32 ou \x33 en \x67\x64\x00\x29 au début du fichier. Ca peut passer de temps en temps.
 
3)Pareil pour la piste son, mais là on peut ré encoder, c'est assez rapide. Pour iDevice, on veut du AAC 2channels.
Si on a du mp3 : on décode avec

Code :
  1. lame --decode audio.mp3 audio.wav


Si on a du AC3 ou DTS : on décode avec eac3to :

Code :
  1. eac3 audio.ac3 audio.wav


 
Puis on ré encode avec NeroAac :

Code :
  1. neroAacEnc -if audio.wav -of audio.aac


 
4) Les sous-titres : on part le plus souvent avec une piste de "soft" subtitles dans un format donné, qu'il faudra peut-être convertir pour être supportés par le device cible. SubRip est le plus souvent supporté :

Code :
  1. SAConv.exe "st.ass" SubRip

par exemple sous win.
(ce qui va sortir un st.srt, au prix de la perte de tous les styles du format SubStation Alpha)
 
5) On re multiplexe le tout :

Code :
  1. MP4Box -add "video.h264:fps=<FPS>" -add "audio.aac" -add "st.srt:hdlr=sbtl:tx3g:lang=eng:group=2:layer=-1" "video_finale.mp4"


<FPS> est récupérée dans les informations de la piste vidéo. Les autres pistes seront synchronisées sur la vidéo.
Notez que le multiplexage de la piste de sous-titres .srt pour iDevices est un peu plus subtile, si on ne la place pas correctement dans les layers, l'app Videos native va les ignorer (sinon un bouton apparaît à côté du bouton Play pour sélectionner les sous-titres).
 
Happy Multiplexing !


Message édité par krali le 06-05-2012 à 23:25:18
Reply

Marsh Posté le 05-05-2012 à 18:38:22   

Reply

Marsh Posté le 06-11-2012 à 19:23:24    

Un grand bravo et un grand merci pour ce topic !  
J'ai (enfin) réussi à faire ce que je voulais faire depuis des mois... bon j'avoue avoir un peu galéré car je n'y connais vraiment pas grand chose en ligne de commandes. Mais avec un peu de jugeotte ;)
 
Il n'existe pas de logiciel (gratuit) avec GUI qui permette de faire la même chose... ça me parait incroyable. Mais bon, maintenant je sais faire !

Reply

Sujets relatifs:

Leave a Replay

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