Warum kann mein Video nicht abgespielt werden, wo ich die Wiedergabeleiste ziehe?

Ich stecke fest und weiß wirklich nicht, wie ich es richtig erklären soll. Also habe ich es in die Laiendetails gesteckt.

Ich habe zwei mp4-Videos mit einer Länge von 30 Sekunden im Cloud-Speicher gespeichert.

  • video1 wird von jemand anderem generiert und
  • video2 wird von mir auf ffmpeg generiert.

Beide haben denselben Videoinhalt.

Mein Problem ist

Wenn ich video2im Safari-Browser öffne, kann ich die genaue Zeit (in Sekunden) in der Fortschrittsleiste des Videoplayers nicht finden.

Was ich meine ist, zum Beispiel mache ich Schritte:

  1. Ich pausiere das Video,
  2. Ziehen Sie den Fortschrittsbalken auf die erste Sekunde,
  3. Ich spiele das Video ab.

Der Videoplayer springt auf 0 und spielt statt ab 1 Sekunde.

Es gibt mehrere Zeitfenster, in video2denen dieses Problem auftritt.

Hat dieses Problem jedoch video1nicht.

video1-Info von ffmpeg

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'origin.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.4.101
  Duration: 00:00:33.78, start: 0.000000, bitrate: 584 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 545 kb/s, 23.98 fps, 23.98 tbr, 11988 tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 32 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

video2-Info von ffmpeg

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'my.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.71.100
  Duration: 00:00:35.04, start: 0.000000, bitrate: 734 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 90:67 DAR 160:67], 599 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

Antworten (1)

video1hat ein sehr kurzes Keyframe-Intervall - es hat alle paar Frames einen Keyframe. video2nicht. Einige Spieler haben die Fähigkeit, lautlos bis zu Nicht-KF zu decodieren und vom Suchpunkt aus zu spielen. Wenn dies nicht der Fall ist, beginnt es beim nächsten Keyframe vor dem Suchpunkt.

ffprobe origin.mp4 -show_entries frame=key_frame,pkt_pts_time -select_streams v -of compact=p=0 | grep ame=1

Ergebnis:

key_frame=1|pkt_pts_time=0.000000
key_frame=1|pkt_pts_time=0.333667
key_frame=1|pkt_pts_time=0.667334
key_frame=1|pkt_pts_time=1.001001
key_frame=1|pkt_pts_time=1.334668
key_frame=1|pkt_pts_time=1.668335
key_frame=1|pkt_pts_time=2.002002
...
key_frame=1|pkt_pts_time=32.699366
key_frame=1|pkt_pts_time=33.033033
key_frame=1|pkt_pts_time=33.366700
key_frame=1|pkt_pts_time=33.700367

Video2:

ffprobe my.mp4 -show_entries frame=key_frame,pkt_pts_time -select_streams v -of compact=p=0 | grep ame=1

Ergebnis:

key_frame=1|pkt_pts_time=0.000000
key_frame=1|pkt_pts_time=2.293958
key_frame=1|pkt_pts_time=5.171833
key_frame=1|pkt_pts_time=7.257250
key_frame=1|pkt_pts_time=9.718042
key_frame=1|pkt_pts_time=13.221542
key_frame=1|pkt_pts_time=15.473792
key_frame=1|pkt_pts_time=21.271250
key_frame=1|pkt_pts_time=24.357667
key_frame=1|pkt_pts_time=29.195833
key_frame=1|pkt_pts_time=32.407375

-g 8Zum ffmpeg-Transcode-Befehl hinzufügen, um alle 8 Frames einen Keyframe zu platzieren .

Du bist so ein Lebensretter wie immer! Du hast mich wirklich vor depressiven Tagen bewahrt!! Eine weitere Frage, ob ich sowohl ein gutes Keyframe-Intervall als auch eine Dateigröße von etwa 3 m haben möchte. Ich sollte in der Zwischenzeit die Video-Bitrate und die Audio-Hz reduzieren, was natürlich zu einer reduzierten Qualität führt. Habe ich recht?
Videobitrate reduzieren? Jawohl. Die Audio-Samplerate spielt keine große Rolle.
verstanden. guten Tag!
Mein HLS-Audio hat die gleiche Keyframe-Frequenz. Aber das Problem ist immer noch da. Gibt es ein anderes Problem, das dies bewirken kann?