Teilen Sie das Video in gleich lange Segmente

Ich verwende derzeit ffmpeg, um Videos in 10Sekundensegmente aufzuteilen. Ich habe zwei Ansätze gewählt, aber keiner scheint die gewünschten Ergebnisse zu liefern. Ansatz Nummer eins ist das einfache Schneiden mit den Optionen -t und -ss, um die Segmente zu erhalten. Dies ergibt nahezu genaue Segmente, hat jedoch einige Probleme mit den Frames am Ende einiger Videos. Die zweite Option ist die Verwendung von Segmenten: großartig und schnell, aber es gibt Segmente mit unterschiedlicher Dauer. Haben Sie eine Idee, wie Sie Segmente mit derselben Dauer und ohne Probleme in den Frames erhalten? Mit anderen Worten, wenn ich sie in einer Liste abspiele, sollte es reibungslos abgespielt werden

Allgemeiner Weg

ffmpeg – i input.mp4  -ss <start> -t <duration> -vcodec copy -acodec copy output%03d.mp4

Segment verwenden

ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment output%03d.mp4
Hast du eine Lösung oder einen Grund gefunden?

Antworten (1)

Das Problem mit den Frames ist sehr wahrscheinlich das Ergebnis der Verwendung von h264 und der fehlenden Neucodierung des Videos. h264 hat normalerweise keine einzelnen Frames (sofern nicht mit einem Intra-Profil codiert), sondern Gruppen von Frames (GOPs), ffmpeg schneidet an einer Keyframe-Position, dh. am Ende oder Anfang einer GOP. Oder nicht bei Ihrem ersten Ansatz, was zu Problemen mit den betroffenen GOPs führt.

Das Problem sollte durch erneutes Codieren (-vcodec libx264 -preset slow) behoben werden, oder wenn dies auch zu Fehlern führt, transcodieren Sie in einen verlustfreien Codec wie jpeg2000 ( -vcodec libopenjpeg), schneiden Sie Ihr Video und codieren Sie es dann erneut in h264 (oder einen anderen Codec, den Sie bevorzugen). .

Was ist mit der Verwendung des Parameters -g?! (GOP-Größe einstellen)
Das würde Ihnen beim rahmengenauen Schneiden nicht helfen. Das Problem ist, dass es GOPs gibt. Wenn Sie ein Video innerhalb einer GOP aufteilen, werden Frames am Ende Ihres Clips zerstört.
Was meinst du mit "du wirst Frames am Ende deines Clips zerstören"?!
Frames innerhalb einer GOP benötigen alle anderen Frames in der GOP. Wenn Sie also eine GOP ausschneiden, enthalten die verbleibenden Frames nicht alle erforderlichen Informationen. Technisch gesehen könnten Sie nur die letzte GOP neu codieren, aber ich glaube nicht, dass es ein Tool gibt, das dies für Sie tun würde.