Je travaille sur un wrapper API libavformat qui convertit les fichiers MP4 avec H.264 et AAC en segments MPEG-TS adaptés au streaming. Je fais juste une simple copie de flux sans ré-encodage, mais les fichiers que je produis rejouent la vidéo à 3600 fps au lieu de 24 fps.Les fichiers créés avec une copie directe à l'aide de l'API libavformat de FFmpeg sont lus trop rapidement à 3600 fps
Voici quelques sorties de ffprobe https://gist.github.com/chrisballinger/6733678, le fichier brisé est ci-dessous:
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
Le fichier d'entrée même envoyé manuellement via ffmpeg a une bonne information d'horodatage:
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
Je crois que les mensonges de problème quelque part dans ma configuration de libavformat ici: https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349 où j'ai réutilisé un tas de code de ffmpeg.c qui était requis pour la copie de flux direct. Depuis 3600 semble être un "nombre magique" (60 * 60), il pourrait être aussi simple que moi de ne pas régler l'échelle de temps correctement, mais je ne peux pas comprendre où mon code diverge de ffmpeg/avconv lui-même.
question similaire ici, mais je ne pense pas qu'ils ont autant que je l'ai fait: Muxing a H.264 Annex B & AAC stream using libavformat with vcopy/acopy
Merci! Je n'étais pas tout à fait sûr de savoir comment redimensionner la base de temps correctement, mais il semble que cela pourrait m'aider à me diriger dans la bonne direction. Je vais vous laisser savoir comment ça se passe! –