Tôi đang làm việc trên trình bao bọc API libavformat chuyển đổi tệp MP4 có phân đoạn H.264 và AAC sang MPEG-TS phù hợp để phát trực tuyến. Tôi chỉ đang thực hiện một bản sao luồng đơn giản mà không cần mã hóa lại, nhưng các tệp tôi tạo phát lại video tại 3600 fps thay vì 24 khung hình/giây.Các tệp được tạo bằng bản sao luồng trực tiếp bằng cách sử dụng API libavformat của FFmpeg phát lại quá nhanh tại 3600 fps
Dưới đây là một số kết quả đầu ra từ ffprobe https://gist.github.com/chrisballinger/6733678, các tập tin bị hỏng ở dưới:
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
Các tập tin đầu vào tương tự bằng tay gửi qua ffmpeg có thông tin timestamp thích hợp:
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
Tôi tin rằng vấn đề dối trá một nơi nào đó trong thiết lập của tôi về libavformat ở đây: https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349 nơi tôi đã thay đổi một loạt mã từ ffmpeg.c đã được yêu cầu cho bản sao luồng trực tiếp.
Vì 3600 có vẻ như một "số ma thuật" (60 * 60), nó có thể đơn giản như tôi không đặt đúng thang thời gian, nhưng tôi không thể tìm ra mã của tôi phân biệt với chính ffmpeg/avconv.
câu hỏi tương tự ở đây, nhưng tôi không nghĩ rằng họ đã như xa như tôi đã làm: Muxing a H.264 Annex B & AAC stream using libavformat with vcopy/acopy
Cảm ơn bạn! Tôi đã không hoàn toàn chắc chắn làm thế nào để rescale cơ sở thời gian đúng cách nhưng nó có vẻ như thế này có thể giúp chỉ cho tôi đi đúng hướng. Tôi sẽ cho bạn biết làm thế nào nó đi! –