Ich habe ein Video mit einer Dauer von einer Minute und 35 Sekunden. Ich kann es in mehrere 30-Sekunden-Segmente aufteilen (ich kenne andere Möglichkeiten zum Aufteilen eines Videos, habe dies jedoch aus einem bestimmten Grund ausgewählt). Dies ergibt jedoch 3 Videos mit einer Länge von 30 Sekunden und ein Video mit einer Länge von 5 Sekunden. Was wäre der beste Weg, um ein schwankendes Video zu beseitigen, das weniger als 15 Sekunden dauert und an Segmente angehängt wird?
in Segmente aufteilen
ffmpeg -i test.mp4 -codec:v copy -codec:a copy -segment_time 30 test-%03d.mp4
Dauer
ffprobe -i test.mp4 -show_format -v quiet | grep '.=.'
Antworten:
ffmpeg alleine kann das nicht. Sie müssen die Dauer des einzelnen Segments selbst herausfinden, da es keine Möglichkeit gibt, eine Mindestdauer festzulegen.
Zu diesem Zweck würden Sie wahrscheinlich zweimal über die Gesamtlänge des Videos iterieren. Bestimmen Sie im ersten Lauf die Länge der Segmente. Wenn Sie feststellen, dass das letzte Segment kürzer als beispielsweise 15 Sekunden ist, müssen Sie lediglich die Länge des vorletzten Segments anpassen. Dies kann leicht mit Skriptsprachen durchgeführt werden.
Sobald Sie das haben, müssen Sie dem
segment
Muxer die einzelnen Segmentdauern mitteilen :quelle
expr:gte(t,n_forced*30)
genau spezifizieren , um das Segment mit der korrekten Länge von 30 Sekunden zu erhalten. Wie kann ichexpr:gte(t,n_forced*x)
für mehrere Segmente angeben ?