Sto lavorando su un wrapper API libavformat che converte i file MP4 con H.264 e AAC in segmenti MPEG-TS adatti allo streaming. Sto semplicemente facendo una semplice copia in streaming senza ricodifica, ma i file che produco riproducono il video allo 3600 fps anziché 24 fps.I file creati con una copia di flusso diretto utilizzando l'API libavformat di FFmpeg riproducono troppo velocemente a 3600 fps
Ecco alcune uscite ffprobe https://gist.github.com/chrisballinger/6733678, il file rotto è qui sotto:
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
Lo stesso file di input inviati manualmente tramite ffmpeg trovi corretta informazione timestamp:
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
Credo le bugie problema da qualche parte nel mio setup di libavformat qui: https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349 dove ho riproposto un mucchio di codice da ffmpeg.c che era necessario per la copia del flusso diretto.
Poiché 3600 sembra un "numero magico" (60 * 60), potrebbe essere semplice come me non impostare correttamente la scala temporale, ma non riesco a capire dove il mio codice diverge da ffmpeg/avconv stesso.
domanda simile qui, ma non credo che hanno ottenuto per quanto ho fatto: Muxing a H.264 Annex B & AAC stream using libavformat with vcopy/acopy
Grazie! Non ero abbastanza sicuro su come ridimensionare correttamente la base di tempo, ma sembra che questo potrebbe aiutare a indicarmi la giusta direzione. Ti farò sapere come va! –