Ich verwende derzeit ffmpeg, um Videos in 10
Sekundensegmente 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
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). .
Dr.jacky