Nach den Beispielen von ffmpeg: decoding_encoding.c und filtering_video.c, verarbeite ich eine vom iPhone aufgenommene Videodatei. Die Videodatei: .mov, Videodimensionen; 480x272, Video Codec: H.264/AVC, 30 Bilder pro Sekunde, Bitrate: 605 kbps.Warum Frame-> Punkte um 20 statt um 1 erhöht?
Ich extrahiere zuerst jeden Rahmen, der YUV ist. Ich wandle YUV in RGB24 um und bearbeite das RGB24, schreibe dann das RGB24 in eine .ppm Datei. Es zeigt an, dass die .ppm-Datei korrekt ist.
Dann plane ich, verarbeitete RGB24-Frames zu einer Videodatei zu kodieren. Da MPEG RGB24 Bildformat nicht unterstützt, habe ich AV_CODEC_ID_HUFFYUV verwendet. Die Ausgabevideodatei (mit 18,5 MB) wird nicht abgespielt. Movie Player auf Ubuntu behauptet einen Fehler: Der Typ des Streams konnte nicht bestimmt werden. Ich habe es auch auf VCL versucht. Es funktioniert einfach nicht, ohne irgendwelche Fehlerinformationen.
Meine zweite Frage ist: Für jeden extrahierte Fram aus der Eingangsvideodatei, erhalte ich seine Punkte als nach filtering_video.c folgt:
frame->pts = av_frame_get_best_effort_timestamp(frame);
ich jedes pts des Rahmens ausdrucken, und dass es finden um 20 erhöht, wie unten:
pFrameRGB_count: 0, frame->pts: 0
pFrameRGB_count: 1, frame->pts: 20
pFrameRGB_count: 2, frame->pts: 40
pFrameRGB_count: 3, frame->pts: 60
Wo Rahmen der extrahierte Rahmen aus dem Eingangsvideo ist, und pFrameRGB_count ist die Zählwert für verarbeitete Rahmen in RGB24 Form.
Warum liegen sie falsch?