J'ai plusieurs morceaux dans le dossier.
0001.mp4
0002.mp4
0003.mp4
...
0112.mp4
Je voudrais les fusionner en full.mp4
J'ai essayé d'utiliser:
avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4
Format d'entrée inconnu: 'concat'
avconv -f concat -i <(printf "%s|" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4
Format d'entrée inconnu: 'concat'
avconv -i concat:`ls -ltr /root/chunk/*.mp4 | awk 'BEGIN {ORS="|"} { print $9 }'` \
-c:v copy -c:a copy /root/test/full.mp4
Dans la dernière édition, un seul fichier d'entrée était capturé.
Comment fusionner tous les morceaux d'un dossier en une vidéo complète?
Je ne veux pas utiliser ffmpeg ou autre. Avconv seulement.
avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4
Je ne sais pas si fonctionne avec le type de conteneur (a travaillé pour moi avec AVI
).
Les fichiers mp4
ne peuvent pas être simplement concaténés, comme le suggère la réponse "acceptée".
Si vous exécutez cela, et cela seul, vous obtiendrez output.mp4
avec seulement le contenu de file1.mp4
.
Cela dit, ce que vous cherchez à faire dans la question initiale peut en fait être fait, à condition de scinder correctement le fichier original en flux mpeg.
Les commandes suivantes diviseront input.mp4
en 3x segments de 60 secondes, dans le fichier [1-3] .ts:
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
-bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file1.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
-bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file2.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
-bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file3.ts
Vous pouvez ensuite les reconstituer comme le suggère l'autre réponse:
avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \
-bsf:a aac_adtstoasc -y full.mp4
J'ai utilisé ce processus pour créer un transcodeur parallèle évolutif, comme décrit dans:
Pour mp4 la seule solution de travail que j'ai trouvée était avec MP4Box du paquet gpac
#!/bin/bash
filesList=""
for file in $(ls *.mp4|sort -n);do
filesList="$filesList -cat $file"
done
MP4Box $filesList -new merged_files_$(date +%Y%m%d_%H%M%S).mp4
ou la commande est
MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4
avec mencoder et avconv, je ne pouvais pas le faire fonctionner :-(
cela marche
avconv -i 1.mp4 1.mpeg
avconv -i 2.mp4 2.mpeg
avconv -i 3.mp4 3.mpeg
cat 1.mpeg 2.mpeg 3.mpeg | avconv -f mpeg -i - -vcodec mpeg4 -strict experimental output.mp4
Ci-dessus fonctionne si vous n’avez que avconv - cependant, ffmpeg a ajouté des fonctions ... pour citer:
"Les étapes ci-dessus avconv génèrent des étapes de codage avec pertes inutiles qui sont lentes et réduisent la qualité de la sortie. Je recommande d'utiliser le démultiplexeur concat (informations supplémentaires) Ou le filtre concat, mais avconv manque des fonctionnalités disponibles dans ffmpeg à partir de FFmpeg "- @LordNeckbeard
SEE https://trac.ffmpeg.org/wiki/Concatenate
Si vous utilisez un système prenant en charge les canaux nommés, vous pouvez les utiliser pour éviter de créer des fichiers intermédiaires - cela envoie stderr (auquel ffmpeg envoie toutes les données écrites) à/dev/null, pour éviter d'encombrer la ligne de commande:
mkfifo temp1 temp2
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null & \
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp1|temp2" -c copy -bsf:a aac_adtstoasc output.mp4
Celui-ci fonctionne pour moi:
avconv -i "concat:001.mp4|002.mp4|003.mp4" -c copy full.mp4
Concat juste tous les fichiers dans un mp4 sans les ré-encoder.
J'utilise la commande ffmpeg
pour le faire. Voici un exemple:
ffmpeg -i concat:/dev/null|file1.ts|file2.ts -c copy -bsf:a aac_adtstoasc -y output.mp4
Jetez un coup d’œil à ce projet github pour Vidéo trascoding parallèle distribué
Après ne pas avoir obtenu de réponse au message d'erreur que j'avais avec toutes ces réponses similaires:
~ avconv -i 'concat:' -c copy test.mp4
avconv version 12.3, Copyright (c) 2000-2018 the Libav developers
built on Jan 22 2019 21:47:11 with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
concat:: Protocol not found
J'ai fouillé dans certains résultats de Google, suis entré dans le traqueur de bogues et j'ai trouvé ceux-ci:
Apparemment, il a non seulement été désactivé à un moment donné, mais supprimé de la version 12, mais ma version 12.3 sur Mac 10.13.6 de Homebrew a toujours "concat" répertorié dans les protocoles d'entrée, et je le vois aussi dans la documentation. 1 rapport de bogue en suspens.
J'ai eu de la chance en utilisant cette commande:
cat *.VOB | avconv -i - -c copy test.mp4
Je l'ai fait avec - avidemux (outil gtk). Il est disponible sous forme de paquet sous la plupart des linux, également pour Windows et Mac ..__ J'ai simplement ouvert le premier fichier. Ensuite, j'ai ajouté les suivants dans l'ordre… .. Enfin, j'ai enregistré la vidéo concaténée en utilisant une copie audio et vidéo et le format mp4.
Cela a très bien fonctionné!
J'ai trouvé un outil nomméAvdshare Video Converter 7qui concatène avec succès mes vidéos. Il les transcode même à n'importe quel format que je veux.
J'ai essayé chaque solution sur cette page ... tous m'ont donné les mêmes erreurs que celles que vous avez probablement rencontrées si vous lisiez ma réponse. Est-ce que "Protocole non trouvé" vous énerve? Eux peut-être c'est le programme pour vous aussi.
Je l'exécute sur Windows.
Les étapes pour concaténer deux vidéos dans le programme sont les suivantes:
Glissez et déposez vos vidéos sur le programme
Cliquez sur Fusionner
Choisissez un "profil de sauvegarde" qui spécifie tous les paramètres possibles vouloir Tweak
Cliquez sur le bouton Enregistrer
Cette méthode fera pour concatrer raw * .avi fichiers seulement, je suppose. Mais comme de nombreuses personnes désireuses de rejoindre des fichiers avi finiront par consulter cette question, je posterai ma réponse ici de toute façon:
cat *.avi > out_tmp.avi
avconv -i out_tmp.avi -c copy output.avi
Une fois de plus: fonctionne pour non compressé * .avi fichiers uniquement.