gpt4 book ai didi

ffmpeg - 为什么 frame->pts 增加 20,而不是增加 1?

转载 作者:行者123 更新时间:2023-12-04 19:10:45 25 4
gpt4 key购买 nike

按照ffmpeg的例子:decode_encoding.c和filtering_video.c,我处理了一个iPhone拍摄的视频文件。视频文件:.mov,视频尺寸; 480x272,视频编解码器:H.264/AVC,每秒 30 帧,比特率:605 kbps。

我首先提取每一帧,也就是YUV。
我将 YUV 转换为 RGB24,并处理 RGB24,然后将 RGB24 写入 .ppm 文件。它显示 .ppm 文件是正确的。

然后我计划将处理后的 RGB24 帧编码为视频文件。
由于MPEG不支持RGB24图片格式,所以我使用了AV_CODEC_ID_HUFFYUV。
但输出视频文件(显示 18.5 MB)无法播放。 Ubuntu 上的电影播放器​​声称一个错误:无法确定流的类型。
我也在VCL上试过。它根本不起作用,没有任何错误信息。

我的第二个问题是:
对于从输入视频文件中提取的每个帧,我根据filtering_video.c得到它的pts如下:

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

其中 frame 是从输入视频中提取的帧,pFrameRGB_count 是 RGB24 格式的已处理帧的计数。

为什么他们错了?

最佳答案

H.264 视频使用 90 kHz clock用于编码 timestamps .由于您的视频是 30 fps , 2 个连续帧之间的 PTS 增量应该是 3000而不是 20 .

值 20 表示以下一项或两项:

  • 对于给定的 30 fps 帧速率
  • ,您的编码时钟(即采样率)配置不正确(至 600 Hz)
  • 您的每秒帧数配置不正确(至 4500fps)。

  • 计算 PTS delta 的一般公式为:
    PTS delta = (1/fps) * Encoder sampling rate

    关于ffmpeg - 为什么 frame->pts 增加 20,而不是增加 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458741/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com