Ich bin nicht mit der Verwendung von MP4Box vertraut, kann aber ein wenig erläutern, was hinter den Kulissen vor sich geht.
Um das Video zu decodieren, benötigen Sie zunächst einen Einstiegspunkt, ein Bild, auf das Sie verweisen können. Dieses Referenzbild wird durch Intra-Referenzierung erstellt, sodass es unabhängig von den anderen Frames ist. Andere Frames referenzieren diesen Frame und andere zuvor erstellte Frames, um zum Zeitpunkt der Decodierung neu erstellt zu werden. Es sei darauf hingewiesen, dass diese Bilder in der Kodierreihenfolge manchmal nicht dieselbe Position haben wie in der Darstellungsreihenfolge.
Okay, Sie sagen mir, dass Sie Videos von 1 Sekunde Länge haben wollten, aber ich sage, es sei denn, an jedem Sekundenzeiger gibt es I-Frames, dann ist dies nicht möglich. Nun, es ist möglich, aber es ist so, als würde ich sagen, dass ich ohne Bedenken kochen kann, ob mein Essen essbar ist. Sie haben möglicherweise im Sekundentakt geschnitten, aber das Video kann erst decodiert werden, wenn es auf ein Referenzbild trifft.
Lösungen: ffmpeg hat einen Segmenter, der dies für Sie erledigen kann, aber die Ergebnisse werden nicht perfekt 1 Sekunde lang sein (Dies ist unvollständig, da er bestimmte Codierungsreihenfolgen nicht wirklich verarbeiten kann, ein kleiner Teil der Fälle). Was passiert, wenn ein Frame in der Codierreihenfolge vor dem stoppenden I-Frame (Beginn des nächsten Segments), aber davor in der Präsentationsreihenfolge auftritt? Dasselbe, was Sie am Anfang Ihres Videos sehen, außer am Ende.
Sie könnten in ein Rohformat dekodieren und dann in Scheiben schneiden. Mit der I-Frame-Erkennung und dem gepufferten Schneiden (Spaß) können Sie viel Jonglieren.
Es gibt viele Möglichkeiten, dies zu tun, und abhängig von den Speicher- und Rechenbeschränkungen können Sie Ihren Geschmack wählen.
Ich hoffe, das erklärt die Fehler, die Sie sehen, und bietet mögliche Lösungen für Sie.