web-dev-qa-db-fra.com

Comment fusionner des vidéos par avconv?

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.

36
Alex
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).

19
test

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:

34
Dustin Kirkland

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 :-(

10
Pipo

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
6
Scott Stensland

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.

2
romaroma

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é

0
MaheshPatade

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
0
Pysis

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é!

0
Pielo

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

0
MikeyB

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.

0
installero