web-dev-qa-db-fra.com

Comment fusionner plusieurs vidéos (plus de deux) sur Ubuntu?

Je souhaite fusionner des vidéos en lot de vingt (20). J'utilise une machine Linux. Les vidéos sont au format MP4 et de qualité moyenne. Certains ont même le flux audio manquant. Jusqu'ici, j'ai essayé ffmpeg, mencoder, cvlc/vlc et MP4Box. Pour ce faire, je souhaite écrire un script en ligne de commande, car je suis en train de traiter par lots.

Le problème principal est que certaines des solutions que j'ai essayées fonctionnent bien pour deux vidéos, certaines pour les vidéos avec flux audio et d'autres pour d'autres sous-ensembles de mon ensemble de vidéos. Cependant, je n'ai pas été en mesure de trouver une solution complète pour cette tâche.

29
Dhruv Singal

Cela a résolu le problème: https://stackoverflow.com/a/22324018/5014767

melt est un excellent utilitaire de ligne de commande pour cela. Ici est la page

Editer des commentaires: La commande qui a résolu mon problème était ceci melt {input-sequence} -consumer avformat:{output-name} acodec=libmp3lame vcodec=libx264

5
Dhruv Singal

J'utilise mkvmerge pour joindre plusieurs fichiers MP4 en un seul:

mkvmerge -o outfile.mkv infile_01.mp4 \+ infile_02.mp4 \+ infile_03.mp4
34

Vous pouvez le faire en utilisant ffmpeg:

ffmpeg -i concat:"input1.mp4|input2.mp4" output.mp4

référence et plus d'infos

23
Maythux

J'ai écrit un petit script shell pour concatteindre des MP4 sans transcodage à l'aide de ffmpeg.

for f in $(ls *.MP4); do
    ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
done

CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")

ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4

rm *.ts

Cela crée des fichiers intermédiaires dans un conteneur MPEG, puis les concatène dans un MP4.

3
RawwrBag

Mon script, uniquement en bash et ffmpeg. Re-code les fichiers donnés sur une ligne de commande en un seul.

Nécessite que les fichiers aient la même résolution. Accepte différentes rotations de métadonnées, ce que ffmpeg concat: ne fait pas.

rm ffmpeg-concat-output.mkv

FILE_COUNT=$#
INPUTS=""
FILTER=""
INDEX=0
for FNAME in $@; do
    echo "Processing ${FNAME}"
    INPUTS="${INPUTS} -i $FNAME"

    if [ -z "${FILTER}" ]; then
        FILTER="[$INDEX:v:0] [$INDEX:a:0]"
    else
        FILTER="${FILTER} [$INDEX:v:0] [$INDEX:a:0]"
    fi
    let INDEX+=1
done

COMMAND="ffmpeg ${INPUTS} \
    -filter_complex '${FILTER} \
        concat=n=${INDEX}:v=1:a=1 [v] [a]' \
    -map '[v]' -map '[a]' \
    ffmpeg-concat-output.mkv"

#   -af 'volume=15dB' # won't work with -filter_complex

bash -c "${COMMAND}"
0
Victor Sergienko

J'ai créé un script Python qui, en utilisant moviepy , peut également concaténer des sous-segments (utile si vous souhaitez par exemple supprimer certaines parties d'une vidéo).

Utilisez-le avec:

vcat -i inputfile1,inputfile2[start-end],... -o <outputfile>
0
Antonello