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 utiliser aucun programme GUI, tout le traitement doit être effectué avec les utilitaires de ligne de commande Linux. FFmpeg ne peut pas faire cela pour les fichiers mpeg4, j'ai donc utilisé MP4Box à la place:
MP4Box -add video1.mp4 -cat video2.mp4 newvideo.mp4
Malheureusement, l'audio est tout mélangé. Je pensais que le problème était que l'audio était en aac, je l'ai donc transcodé en mp3 et utilisé à nouveau MP4Box. Dans ce cas, l'audio est correct pour la première moitié de newvideo.mp4
(correspondant à video1.mp4
), mais il n'y a pas d'audio et je ne peux pas naviguer dans la vidéo également.
Ma prochaine pensée était que les flux audio et vidéo présentaient de petites différences de longueur que je devais corriger. Donc, pour chaque vidéo d'entrée, j'ai divisé les flux vidéo et audio, puis les ai joints avec l'option -shortest dans FFmpeg.
Ainsi pour la première vidéo j'ai couru:
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 ensuite utilisé MP4Box comme précédemment. Malheureusement, cela n'a pas fonctionné non plus. Le seul succès que j'ai eu a été lorsque j'ai joint les flux vidéo séparément (c.-à-d. Videostream1.mp4 et videostream2.mp4) et les flux audio (c.-à-d. 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 retard de 1 sec de l'audio et de la vidéo. Toutes les suggestions sont vraiment les bienvenues.