Je veux joindre deux fichiers mp4 pour en créer un seul. Les flux vidéo sont encodés en h264 et l'audio en aac. Je ne peux pas ré-encoder les vidéos dans un autre format pour des raisons de calcul. De plus, je ne peux pas utiliser de programmes GUI, tout le traitement doit être effectué avec les utilitaires en ligne de commande Linux. FFmpeg ne peut pas le faire pour les fichiers mpeg4 donc j'ai utilisé MP4Box à la place :
MP4Box -add video1.mp4 -cat video2.mp4 newvideo.mp4
Malheureusement, l'audio est tout mélangé. J'ai pensé que le problème venait de l'audio étant en aac donc je l'ai transcodé en mp3 et j'ai de nouveau utilisé MP4Box. Dans ce cas, l'audio est bon pour la première moitié de newvideo.mp4
(correspondant à video1.mp4
) mais ensuite il n'y a pas d'audio et je ne peux pas naviguer dans la vidéo non plus.
Ma prochaine idée était que les flux audio et vidéo avaient de petites différences dans leurs longueurs que je devais corriger. Donc pour chaque vidéo d'entrée j'ai séparé les flux vidéo et audio puis je les ai rejoints avec l'option -shortest dans FFmpeg.
Ainsi, pour la première vidéo j'ai exécuté :
avconv -y -i video1.mp4 -c copy -map 0:0 videostream1.mp4
avconv -y -i video1.mp4 -c copy -map 0:1 audiostream1.m4a
avconv -y -i videostream1.mp4 -i audiostream1.m4a -c copy -shortest video1_aligned.mp4
De même pour la deuxième vidéo et puis j'ai utilisé MP4Box comme précédemment. Malheureusement cela n'a pas fonctionné non plus. Le seul succès que j'ai eu était lorsque j'ai joint les flux vidéo séparément (c'est-à-dire videostream1.mp4 et videostream2.mp4) et les flux audio (c'est-à-dire audiostream1.m4a et audiostream2.m4a) puis j'ai joint la vidéo et l'audio dans un fichier final. Cependant, la synchronisation est perdue pour la seconde moitié de la vidéo. Concrètement, il y a un délai d'1 seconde entre l'audio et la vidéo. Toute suggestion est la bienvenue.