Ich arbeite an einem libavformat-Wrapper, der MP4-Dateien mit H.264 und AAC in MPEG-TS-Segmente konvertiert, die für Streaming geeignet sind. Ich mache nur eine einfache Stream-Kopie ohne Neucodierung, aber die Dateien, die ich produziere, spielen das Video wieder unter 3600 fps anstelle von 24 fps.Mit FFmpegs libavformat-API erstellte Dateien werden mit 3600 fps zu schnell wiedergegeben.
Hier sind einige Ausgaben von ffprobe https://gist.github.com/chrisballinger/6733678 ist die defekte Datei unter:
r_frame_rate=1/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=0
start_time=0.000000
duration_ts=2999
duration=0.033322
Die gleiche Eingabedatei manuell durch ffmpeg hat Informationen richtigen Zeitstempel gesendet:
r_frame_rate=24/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=126000
start_time=1.400000
duration_ts=449850
duration=4.998333
Ich glaube, das Problem liegt irgendwo in meinem Setup von libavformat hier: https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349, wo ich eine Reihe von Code aus ffmpeg.c, die für die direkte Stream-Kopie benötigt wurde repurpurposed.
Da 3600 scheint wie eine "magische Zahl" (60 * 60), könnte es so einfach sein wie ich nicht die Zeitskala richtig einstellen, aber ich kann nicht herausfinden, wo mein Code von ffmpeg/avconv selbst.
ähnliche Frage hier, aber ich glaube nicht, dass sie so weit gekommen, wie ich tat: Muxing a H.264 Annex B & AAC stream using libavformat with vcopy/acopy
Thank you! Ich war mir nicht ganz sicher, wie ich die Zeitbasis richtig skalieren sollte, aber es scheint, dass dies mir helfen könnte, mich in die richtige Richtung zu lenken. Ich werde dich wissen lassen, wie es läuft! –