it-swarm.com.de

Wie kann ich Videos von avconv zusammenführen?

Ich habe mehrere Brocken im Ordner.

0001.mp4
0002.mp4
0003.mp4
...
0112.mp4

Ich möchte sie in full.mp4 zusammenführen

Ich habe versucht zu verwenden:

avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4

Unbekanntes Eingabeformat: 'concat'

avconv -f concat -i <(printf "%s|" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4

Unbekanntes Eingabeformat: 'concat'

avconv -i concat:`ls -ltr /root/chunk/*.mp4 | awk 'BEGIN {ORS="|"} { print $9 }'` \
 -c:v copy -c:a copy /root/test/full.mp4

In der letzten Ausgabe wurde nur eine Eingabedatei für die Ausgabe abgefangen.

Wie füge ich alle Stücke aus dem Ordner in das vollständige Video zusammen?

Ich möchte nicht ffmpeg oder anderes verwenden. Nur Avconv.

36
Alex
avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4

Ich weiß nicht, ob es mit irgendeinem Containertyp funktioniert (bei mir AVI).

19
test

mp4-Dateien können nicht einfach verkettet werden, wie die "akzeptierte" Antwort nahelegt.

Wenn Sie das und nur das ausführen, erhalten Sie am Ende output.mp4, der nur den Inhalt von file1.mp4 enthält.

Das heißt, das, was Sie in der ursprünglichen Frage zu tun haben, kann tatsächlich getan werden, solange Sie die Originaldatei in mpeg-Streams richtig aufteilen.

Die folgenden Befehle teilen input.mp4 in 3 x 60 Sekunden lange Segmente in Datei [1-3] .ts auf:

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

Sie können sie dann wieder zusammenfügen, wie es in der anderen Antwort vorgeschlagen wird:

avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \
   -bsf:a aac_adtstoasc -y full.mp4

Ich habe diesen Prozess verwendet, um einen skalierbaren parallelen Transcoder zu erstellen, wie unter beschrieben:

34
Dustin Kirkland

Für mp4 war die einzige funktionierende Lösung, die ich gefunden habe, mit MP4Box von gpac package

#!/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

oder Befehl ist

MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4

mit mencoder und avconv könnte ich es nicht schaffen :-(

10
Pipo

das funktioniert

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

Obiges funktioniert, wenn Sie nur über avconv verfügen - ffmpeg hat jedoch Funktionen hinzugefügt ... um zu zitieren:

"Die obigen avconv-Schritte führen zu unnötigen zusätzlichen verlustbehafteten Codierungsschritten, was langsam ist und die Qualität der Ausgabe verringert. Ich würde empfehlen, den concat-Demuxer (zusätzliche Info) .__- oder concat-Filter zu verwenden ffmpeg from FFmpeg "- @LordNeckbeard

    SEE  https://trac.ffmpeg.org/wiki/Concatenate

Wenn Sie ein System verwenden, das Named Pipes unterstützt, können Sie diese verwenden, um das Erstellen von Zwischendateien zu vermeiden - dies sendet stderr (an das ffmpeg alle geschriebenen Daten sendet) an/dev/null, um die Befehlszeile nicht zu überladen:

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

Dieser arbeitet für mich:

avconv -i "concat:001.mp4|002.mp4|003.mp4" -c copy full.mp4

Einfach alle Dateien zu einem mp4 zusammenfassen, ohne sie neu zu kodieren.

2
romaroma

Ich verwende dazu den Befehl ffmpeg. Hier ist ein Beispiel:

ffmpeg -i concat:/dev/null|file1.ts|file2.ts -c copy -bsf:a aac_adtstoasc -y output.mp4

Werfen Sie einen Blick auf dieses github-Projekt für Distributed parallel video trascoding

0
MaheshPatade

Nachdem ich keine Antwort auf die Fehlermeldung erhalten hatte, hatte ich mit all diesen ähnlichen Antworten:

~ 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

Ich habe einige Google-Ergebnisse durchgesehen, bin in den Bug-Tracker gegangen und habe Folgendes gefunden:

Es scheint, dass es nicht nur irgendwann deaktiviert, sondern in Version 12 entfernt wurde, aber mein Build 12.3 auf Mac 10.13.6 von Homebrew enthält immer noch "concat" in den Eingabeprotokollen, und ich sehe es auch in der Dokumentation, so dass 1 ausstehender Fehlerbericht.

Ich hatte etwas Glück mit diesem Befehl:

cat *.VOB | avconv -i - -c copy test.mp4
0
Pysis

Ich habe das mit avidemux (gtk tool) gemacht. Es ist unter den meisten Linux-Paketen als Paket verfügbar, auch für Windows und Mac. Ich habe einfach die erste Datei geöffnet. Dann fügte ich die nächsten in der Reihenfolge hinzu. Endlich habe ich das verkettete Video mit Audio- und Videokopie und Format mp4 gespeichert.

Es hat super funktioniert!

0
Pielo

Ich habe ein Tool namensAvdshare Video Converter 7gefunden, das meine Videos erfolgreich verkettet. Es transkodiert sie sogar in fast jedes gewünschte Format. 

Ich habe die every -Lösung auf dieser Seite ausprobiert ... Alle von ihnen gaben mir die gleichen Fehler, die Sie wahrscheinlich beim Lesen meiner Antwort festgestellt haben. Stört Sie "Protocol not found"? Vielleicht ist das auch das Programm für Sie.

Ich lasse es unter Windows laufen.

Um zwei Videos im Programm zu verketten, gehen Sie wie folgt vor:

Ziehen Sie Ihre Videos per Drag & Drop in das Programm

Klicken Sie auf Zusammenführen

Wählen Sie ein "Profil speichern" aus, das jeden Parameter angibt. will zwicken

Klicken Sie auf die Schaltfläche Speichern

0
MikeyB

Ich nehme an, dass diese Methode nur für das Zusammenstellen von raw * .avi -Dateien gilt. Da jedoch viele Leute, die bereit sind, sich avi-Dateien anzuschließen, diese Frage sehen werden, werde ich meine Antwort hier trotzdem posten:

cat *.avi > out_tmp.avi
avconv -i out_tmp.avi -c copy output.avi

Einmal mehr: funktioniert nur für unkomprimierte * .avi -Dateien.

0
installero