Comment joindre des fichiers vidéo depuis un terminal?


9

J'ai essayé avidemux2_cli, mencoder, ffmpeg, cat .. Mais cela ne fonctionne pas toujours (avec la plupart du temps l'erreur est que le codec audio n'est pas le même) Peut-être ai-je mis de mauvaises options dans les commandes.

Donc les commandes:

cat Sample.avi rrr.avi > complete.avi
ffmpeg -i Sample.avi -i output.avi -vcodec copy -acodec copy complete.avi
mencoder -ovc lavc -oac copy Sample.avi rrr.avi -o complete.avi
avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi -append output.avi --save video.avi

Le problème du chat est qu'il ne montre pas d'erreur mais qu'il ne fonctionne pas toujours .. Comme le complete.avi sera exactement le même avec Sample.avi

Fmmpeg ne fait rien. Le fichier complete.avi est toujours le même avec Sample.avi

Erreur Mencoder: tous les fichiers doivent avoir un codec audio et un format identiques pour la copie -oac. Ainsi, le fichier complete.avi est identique à Sample.avi

avidemux2_cli il n'y a pas d'erreur mais le complete.avi est à nouveau le même avec Sample.avi ..

Donc pour résumer, tous les complete.avi sont les mêmes avec Sample.avi .. Et le problème est qu'ils n'ont pas le même codec audio (je suppose) .. Des idées?


1
Je pense que vous devez changer le codec vidéo et le codec audio des fichiers d'entrée dans les mêmes codecs, si vous souhaitez combiner deux vidéos en toute sécurité,
vine_user

Et comment faire?
Leon Vitanos

Vous pouvez utiliser l' mencoderoption -ovc et l'option -oac. Voir: mplayerhq.hu/DOCS/HTML/en/menc-feat-selecting-codec.html
vine_user

Réponses:


10

Si vous souhaitez combiner deux vidéos en toute sécurité, vous devez changer le codec vidéo et le codec audio des fichiers d'entrée en les mêmes codecs.

Par exemple, en utilisant xvid (codec vidéo) et mp3lame (codec audio):

sudo apt-get install mencoder libxvidcore4 libmp3lame0

vous pouvez encoder les vidéos d'entrée par les commandes ci-dessous:

mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 first.avi -o video1.avi
mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 second.avi -o video2.avi

Pour faire correspondre vos vidéos, vous pouvez modifier les options "bitrate" etc. (ainsi que les codecs).

Si les noms de vidéo codés sont "video1.avi" et "video2.avi" et que le nom de la vidéo de sortie est "join-video.avi",

mencoder -ovc copy -oac mp3lame video1.avi video2.avi -o joined-video.avi 

En utilisant cette commande, vous pouvez créer le fichier vidéo joint.


2
Je pensais juste renforcer le nom de cet utilitaire mencoder(c'est-à-dire Media ENcoder). Beaucoup de gens se retrouvent coincés en tapant accidentellement memcoder.
Val

les tailles de cadre ne doivent-elles pas également correspondre?
Elder Geek

4

J'ai dû joindre trois morceaux de vidéo avec des codecs identiques. En lisant les réponses précédentes, j'ai réussi à le faire:

mencoder -ovc copy -oac faac 01.mp4 02.mp4 03.mp4 -o output.mp4

Beaucoup plus rapide et plus simple qu'OpenShot!

J'ai d'abord essayé l'option '-oac copy', mais il semble que le codec audio de mes vidéos ne le permette pas. J'ai reçu un message d'erreur recommandant '-oac pcm'. Le codec pcm n'est cependant pas une bonne option: le fichier résultant est très volumineux et 2/3 d'entre eux sont de l'audio non compressé.

J'espère que cela t'aides


2
MEncoder svn r34540 (Ubuntu), construit avec gcc-4.7 (C) 2000-2012 MPlayer Team MPlayer a été compilé sans libfaac. Voir README ou DOCS.
Philippe Gachoud

1

Une solution que j'ai trouvée ici m'a aidé à joindre sans perte deux fichiers mp4:

sudo apt-get install gpac
MP4Box -cat part1.mp4 -cat part2.mp4 -new joinedfile.mp4

J'ai essayé d'utiliser Avidemux, mais j'ai eu des problèmes de son dans la vidéo fusionnée.


1

Vos fichiers ne se joindront pas correctement car quelque chose ne correspond pas.

Comme beaucoup d'autres, j'ai eu des problèmes de synchronisation du son dans les vidéos fusionnées. et bien que MP4Box fonctionne bien si les clips ont des spécifications identiques, dans certains cas, je serais frappé par le "Aucune piste de destination appropriée trouvée - en créant une nouvelle", auquel cas Totem (alias Vidéos) ne jouerait pas ce segment dans le fichier joint Après quelques essais et erreurs et d'autres recherches, j'ai développé la méthode suivante pour gérer la jonction de vidéos qui, jusqu'à présent, a toujours fonctionné avec une qualité acceptable (pour moi).

Si les tailles d'images ne correspondent pas (erreurs de jonction relatives aux pistes vidéo):

Normaliser la vidéo sans perturber l'audio (-c: une copie) en définissant des contraintes (divisibles par 8 pour une compatibilité maximale du codec) pour des segments inégalés

Exemples de commandes

width=856

height=480

avconv -i input.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" -c:a copy output.mp4

Si l'audio ne correspond pas (jonction des erreurs relatives aux pistes audio):

Normaliser l'audio

Traitez l'audio sans perturber la vidéo (copie c: v) de sorte que tous les clips correspondent au codec, à la fréquence et au débit binaires souhaités avec c: un codec-fréquence de voiture comme -ar 48000 et et débit binaire avec b: a 128k pour la stéréo (64K par canal semble une bonne cible) ou quoi que ce soit correspond.

Exemple: avconv -i input.mp4 -c:v copy -c:a libmp3lame -ar 48000 b:a 128k output.mp4(notez que libmp3lame est un codec pour l'audio mp3) Vous pouvez obtenir une liste des encodeurs pris en charge par avconv en émettant la commande avconv -codecsou pour affiner les choses vers un codage spécifique avconv -codecs|grep *codecname*par exempleavconv -codecs|grep mp3

Maintenant que nous avons normalisé les fichiers, nous pouvons les rejoindre. Dans cet exemple, je vais joindre les fichiers avec MP4Box. Si vous ne l'avez pas, vous pouvez l'obtenir en lançant la commandesudo apt-get install gpac

Joignez les fichiers avec la commande MP4Box file1.mp4 -cat file2.mp4 -cat file3.mp4 -cat file4.mp4 -out joinedfile.mp4(notez qu'il n'y a pas de chat avant le premier fichier et que chaque fichier supplémentaire est précédé de -cat et le fichier cible est précédé de -out)

Si vous utilisez MP4Box (recommandé pour MP4) pour rejoindre, vous pouvez constater que vous devez traiter tous les clips avec avconv, que les spécifications semblent correspondre ou non pour éviter l'erreur "Aucune piste de destination appropriée trouvée - création d'une nouvelle (type vide)"

Remarque: J'ai trouvé que Avidemux avait des problèmes avec les vidéos encodées en utilisant des fichiers H.264 / AVC (par totem) en raison des images B comme référence. Cela semble entraîner une désynchronisation audio lors de la jonction, même lorsque vous choisissez de copier à la fois l'audio et la vidéo sans remux. Se bloque lorsque vous ne choisissez pas le mode sans échec et n'est pas synchronisé lorsque vous utilisez le mode sans échec

Sources:

/superuser/547296/resizing-videos-with-ffmpeg-avconv-to-fit-into-static-sized-player

/programming/20703160/problems-with-setting-constant-bitrate-by-using-avconv

https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_cbr

Remarque: Pour autant que je sache, d'autres formats (conteneurs) ont des contraintes similaires pour faire correspondre la taille de la trame et les taux audio, donc cela peut également fonctionner pour avi si vous essayez de vous joindre via cat ou mencoder après la normalisation de la vidéo et de l'audio .

Facultatif: utilisez Handbrake pour ré-encoder le fichier joint pour une taille plus petite si vous le souhaitez avec un taux de rafraîchissement variable et un paramètre de qualité constante de 25 (paramètres suggérés - ajustez si nécessaire en fonction de vos attentes en matière de matériau et de qualité)


1

Vous devez taper comme ceci:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output.avi --save video.avi

Si vous souhaitez ajouter plus de fichiers:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output1.avi --append output2.avi --append output3.avi --save video.avi

1

J'ai pu utiliser le lecteur multimédia VLC pour joindre / fusionner plusieurs fichiers vidéo. VLC peut être téléchargé à partir du logiciel Ubuntu ou vous pouvez l'installer à partir d'un terminal en appuyant sur Ctrl+ Alt+ Tet en tapant:

sudo apt update
sudo apt install vlc

Une fois VLC installé, ouvrez un terminal dans le dossier contenant les fichiers vidéo, puis tapez:

vlc InFile1.mp4 InFile2.mp4 --sout "#gather:std{access=file,dst=OutFile.mp4}" --sout-keep

Cela ouvre l'interface graphique de VLC et vous pouvez le fermer une fois que les fichiers sont joints / fusionnés. Vous pouvez trouver plus d'informations ici .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.