Dies kann mit dem Segment Multiplexer und Concat Demuxer erreicht werden.
Schritt 1 Segmentieren Sie die Eingabe
Angenommen, Sie extrahieren möchten, 00:50
um 02:20
aus dem aufgenommenen Quelle. Nehmen wir an, die GOP-Größe beträgt 3 Sekunden. Da Ihr In-Point möglicherweise der letzte Frame einer GOP ist, müssen Sie eine GOP-Länge früher beginnen. Also reinschneiden ist 00:47
und extrahieren dauert 01:33
. So,
ffmpeg -ss 0:57 -t 01:33 -i input.mp4 -c copy -f segment -segment_time 0.01 -reset_timestamps 1 seg%02d.mp4
Dadurch werden Segmente mit jeweils einer GOP erstellt. Also nicht für intracodierte Streams verwenden :)
Schritt 2 Trimmen Sie die Kopf- und Schwanzsegmente
Alle überflüssigen Segmente am Kopf und am Schwanz löschen - möglich, wenn die GOP-Länge klein ist. Trimmen Sie dann die korrekten oberen und hinteren Segmente:
ffmpeg -ss 2 -i seg00.mp4 -crf 18 -map [v] -map [a] seg00a.mp4 ffmpeg -t 2 -i seg46.mp4 -crf 18 -map [v] -map [a] seg46a.mp4
Schritt 3 Concat
a) Bereiten Sie die concat-Datei vorsegments.txt
file 's00a.mp4' file 's01.mp4' file 's02.mp4' ... file 's44.mp4' file 's45.mp4' file 's46a.mp4'
b)
ffmpeg -f concat -i segments.txt -c copy -fflags +genpts trimmed.mp4
Da Sie an einem Live-Capture arbeiten, können Sie die Ausgabe an den TS statt an MP4 vornehmen, außer an der endgültigen Ausgabe.