Verwenden von trim
und concat
- Quelldateien mit verschiedenen Codecs
Stellen Sie dazu sicher, dass Ihre einzelnen Dateien dieselbe Auflösung und im Idealfall dieselbe Framerate und Chroma-Unterabtastung usw. haben. Dies verhindert Fehler oder Störungen während der Verkettung.
Mit den Filtern trim
und können Sie alles auf einmal erledigen, ohne die Datei zu teilen concat
:
ffmpeg -i edv_g24.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[out]" \
-map "[out]" output.mp4
Hier werden trim
die einzelnen Teile der Eingangsvideostreams ( 0:v
, 1:v
) angegeben, die Sie später verketten möchten. Diese Teile sind v0
durch benannt v2
. (Der setpts
Filter setzt die Zeitstempel dieser einzelnen Teile auf 0 zurück, was für die Verkettung erforderlich ist.) Später verketten wir die drei Teile.
Wenn Sie von einem bestimmten Zeitstempel bis zum Ende trimmen möchten, verwenden Sie, trim=start=15
anstatt den Bereich anzugeben.
Wenn Ihre Dateien Audio enthalten, müssen Sie diese Streams separat trimmen:
ffmpeg -i edv_g24_2.mp4 -i short-video.mp4 -filter_complex "\
[0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0]; \
[1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \
[1:a]atrim=0:5,asetpts=PTS-STARTPTS[v1]; \
[0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \
[0:a]atrim=15:30,asetpts=PTS-STARTPTS[a2]; \
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
Beachten Sie, dass Video und Audio in diesem Fall neu codiert werden. -crf
Stellen Sie sicher, dass Sie die entsprechenden Ausgabequalitätsziele angeben (z. B. für x264, x265 oder libvpx-vp9). Weitere Informationen hierzu finden Sie im FFmpeg-Wiki, z. B. für VP9 oder H.264 .
Einzelne Segmente verwenden
Wenn Sie die Clips teilen und später wieder zusammensetzen möchten:
ffmpeg -i edv_g24.mp4 -ss 0 -to 10 -c copy part1.mp4
ffmpeg -i edv_g24.mp4 -ss 10 -to 15 -c copy part2.mp4
ffmpeg -i edv_g24.mp4 -ss 15 -c copy part3.mp4
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \
-map "[outv]" -t 30 output.mp4
Wenn die Dateien Audio enthalten, verwenden Sie den gleichen Ansatz wie oben:
ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" -t 30 output.mp4
Dadurch wird der Videostream erneut neu codiert. Es ist etwas einfacher, sollte aber ansonsten der obigen Methode entsprechen.
Mit concat
demuxer
Sie können im Prinzip auch versuchen, die Bitströme mit dem concat-Demuxer zu verketten, ohne sie neu zu codieren. Erstellen Sie eine Datei mit dem Namen concat.txt
und fügen Sie die folgenden Einträge hinzu (entsprechend den oben erstellten Videoclips):
file 'part1.mp4'
file 'short-video.mp4'
file 'part3.mp4'
Verketten Sie dann diese einzelnen Dateien:
ffmpeg -f concat -i concat.txt -c copy output.avi
Dies setzt jedoch voraus, dass Ihre Clips denselben Codec, dieselbe Auflösung, dieselbe Framerate usw. haben - daher funktioniert dies nicht mit allen Arten heterogener Quellen.
Mit concat
Protokoll
Die obige Art der Verkettung auf Dateiebene kann auch unter Verwendung des concat
Protokolls mit den gleichen Einschränkungen wie oben (gleicher Codec, Auflösung usw.) erreicht werden:
ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4
Weitere Informationen zur Verkettung finden Sie auf der entsprechenden FFmpeg-Wiki-Seite .