Theo các ngoại lệ của ffmpeg: decoding_encoding.c và filtering_video.c, tôi xử lý một tệp video do iPhone chụp. Tệp video: .mov, kích thước video; 480x272, Codec video: H.264/AVC, 30 khung hình/giây, tốc độ bit: 605 kbps.Tại sao frame-> pts tăng 20, thay vì 1?
Lần đầu tiên tôi trích xuất từng khung là YUV. Tôi chuyển đổi YUV thành RGB24 và xử lý RGB24, sau đó ghi RGB24 vào tệp .ppm. Nó cho thấy tệp .ppm là chính xác.
Sau đó, tôi lập kế hoạch mã hóa RGB24 đã xử lý thành tệp video. Vì MPEG không hỗ trợ định dạng hình ảnh RGB24, tôi đã sử dụng AV_CODEC_ID_HUFFYUV. Nhưng tệp video đầu ra (hiển thị 18,5 MB) không phát. Trình phát phim trên Ubuntu xác nhận lỗi: Không thể xác định loại luồng. Tôi cũng đã thử nó trên VCL. Nó chỉ đơn giản là không hoạt động, mà không có bất kỳ thông tin lỗi nào.
câu hỏi thứ hai của tôi là: Đối với mỗi fram chiết xuất từ các tập tin video đầu vào, tôi nhận được điểm của nó như sau theo filtering_video.c:
frame->pts = av_frame_get_best_effort_timestamp(frame);
tôi in ra điểm của mỗi khung hình, và thấy rằng nó tăng thêm 20, như sau:
pFrameRGB_count: 0, frame->pts: 0
pFrameRGB_count: 1, frame->pts: 20
pFrameRGB_count: 2, frame->pts: 40
pFrameRGB_count: 3, frame->pts: 60
Khung ở đâu là khung được trích xuất từ video đầu vào và pFrameRGB_count là số được tính cho khung đã xử lý ở dạng RGB24.
Tại sao chúng sai?