继ffmpeg:decode_encoding.c和filtering_video.c之后,我会处理iPhone拍摄的一个视频文件。视频文件:.mov,视频尺寸; 480x272,视频编解码器:H.264/AVC,每秒30帧,比特率:605 kbps。为什么frame-> pts增加20,而不是1?
我首先提取每个帧,这是YUV。 我将YUV转换为RGB24,并处理RGB24,然后将RGB24写入.ppm文件。它显示.ppm文件是正确的。
然后我打算将处理过的RGB24帧编码为视频文件。 由于MPEG不支持RGB24图片格式,我使用了AV_CODEC_ID_HUFFYUV。 但输出视频文件(显示18.5 MB)不播放。 Ubuntu上的电影播放器声明错误:无法确定流的类型。 我也在VCL上试过。它根本不起作用,没有任何错误信息。
我的第二个问题是: 从输入的视频文件,我得到它的PTS各提取FRAM如下根据filtering_video.c:
frame->pts = av_frame_get_best_effort_timestamp(frame);
我打印出每帧的PTS,并发现它由20增加时,象下面这样:
pFrameRGB_count: 0, frame->pts: 0
pFrameRGB_count: 1, frame->pts: 20
pFrameRGB_count: 2, frame->pts: 40
pFrameRGB_count: 3, frame->pts: 60
其中帧是从输入视频提取的帧,并且pFrameRGB_count是用于RGB24形式处理的帧的计数。
他们为什么错了?