Seguendo le exmaples di ffmpeg: decoding_encoding.c e filtering_video.c, elaborerò un file video preso da iPhone. Il file video: .mov, dimensioni del video; 480x272, codec video: H.264/AVC, 30 fotogrammi al secondo, bitrate: 605 kbps.Perché frame-> pts aumenta di 20 anziché di 1?
Estrarre prima ogni frame, che è YUV. Converto YUV in RGB24 ed elabora l'RGB24, quindi scrive RGB24 in un file .ppm. Mostra il file .ppm è corretto.
Quindi ho intenzione di codificare i frame RGB24 elaborati in un file video. Poiché MPEG non supporta il formato di immagine RGB24, ho utilizzato AV_CODEC_ID_HUFFYUV. Ma il file di output video (che mostra 18,5 MB) non viene riprodotto. Movie Player su Ubuntu afferma un errore: Impossibile determinare il tipo di flusso. L'ho provato anche su VCL. Semplicemente non funziona, senza alcuna informazione di errore.
mie seconda questione è: Per ogni Fram estratto dal file di ingresso, ricevo i suoi punti come segue in base alla filtering_video.c:
frame->pts = av_frame_get_best_effort_timestamp(frame);
stampo fuori pts di ogni fotogramma, e scoprire che aumenta di 20, come di seguito:
pFrameRGB_count: 0, frame->pts: 0
pFrameRGB_count: 1, frame->pts: 20
pFrameRGB_count: 2, frame->pts: 40
pFrameRGB_count: 3, frame->pts: 60
Dove telaio è il fotogramma estratto dal video di ingresso, e pFrameRGB_count è il conteggio per telaio trasformati in forma RGB24.
Perché si sbagliano?