Pracuję nad otoką API libavformat, która konwertuje pliki MP4 na H.264 i AAC na segmenty MPEG-TS odpowiednie do przesyłania strumieniowego. Po prostu wykonuję prostą kopię strumieniową bez ponownego kodowania, ale pliki, które produkuję, odtwarzają wideo pod numerem 3600 fps zamiast 24 fps.Pliki utworzone za pomocą bezpośredniej kopii strumieniowej przy użyciu funkcji API libavformat firmy FFmpeg są odtwarzane zbyt szybko z szybkością 3600 fps
Oto kilka wyjść z ffprobe https://gist.github.com/chrisballinger/6733678, złamane plik jest poniżej:
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
Ten sam plik wejściowy ręcznie wysłane przez ffmpeg ma odpowiedniej informacji datownika:
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
wierzę, problem leży gdzieś w moim ustawieniu libavformat tutaj: https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349, gdzie przekierowałem paczkę kodu z ffmpeg.c, która była wymagana do bezpośredniego kopiowania strumieniowego.
Ponieważ 3600 wydaje się być "magiczną liczbą" (60 * 60), to może być tak proste, jak ja nie odpowiednio ustawić skalę czasową, ale nie mogę się dowiedzieć, gdzie mój kod odbiega od samego ffmpeg/avconv.
Podobne pytanie tutaj, ale nie sądzę, że mam tak daleko, jak ja: Muxing a H.264 Annex B & AAC stream using libavformat with vcopy/acopy
Dziękujemy! Nie byłem do końca pewien, jak poprawnie zmienić skalę czasu, ale wydaje mi się, że może to pomóc we właściwym kierunku. Dam ci znać, jak to działa! –