【问题标题】:the number of frames in ts filets 文件中的帧数
【发布时间】:2017-06-12 02:31:15
【问题描述】:

我从我的网络摄像头获取视频数据,并使用 ffmpeg 制作 ts、m3u8

但是 ts 是 ffmpeg 做的,每个 ts 有不同的帧数。

那么,我怎样才能使帧数相等?

而且ts中每个gop的大小也不同..

我怎样才能使 gop 大小保持不变?

avformat_alloc_output_context2(&ptr->hls_ctx, NULL, "hls", "hls.m3u8");
((HLSContext*)ptr->hls_ctx->priv_data)->flags = HLS_DELETE_SEGMENTS | HLS_ROUND_DURATIONS;
((HLSContext*)ptr->hls_ctx->priv_data)->max_nb_segments = 2;
((HLSContext*)ptr->hls_ctx->priv_data)->time = 2;

我已经用time参数来设置ts的播放时间了

【问题讨论】:

  • H.264 非常高效,部分原因是数据流最小化算法是由输入像素流的变化驱动的……您对恒定数据块的渴望与这些效率驱动的设计目标背道而驰。 . 请用您要实现的目标更新您的问题
  • @ScottStensland 他可能需要与关键帧对齐的流,并且他使用实时源,因此他不能两次通过以获得同步的自适应 GOP。

标签: ffmpeg mpeg2-ts


【解决方案1】:

您可以在编码器上下文中设置 GOP 大小:

codec = avcodec_find_encoder(AV_CODEC_ID_H264);
c = avcodec_alloc_context3(codec);
[...]
c->gop_size = 10;

doc/examples/encode_video.c 中的完整示例(或参见Github)。

【讨论】:

  • 是的,我已经完成了.. 通过使用此代码 ptr->output_vctx->gop_size = 8; ptr->output_vctx->keyint_min = 8; ptr->output_vctx->scenechange_threshold = 1;但是在ts文件中,关键帧位置是这样的.. 0 - 8 - 12 - 20 - 26 - 34 - 41 - 49 - 54 ...为什么?!
  • @j.teak 尝试禁用场景检测(将 sc_threshold 设置为零)。首先在 CLI 中尝试。
猜你喜欢
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 2017-02-23
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多