gpt4 book ai didi

video - 尽管使用了 avformat_write_header,但 mpg 中缺少标题

转载 作者:行者123 更新时间:2023-12-04 05:22:54 25 4
gpt4 key购买 nike

这个问题不太可能帮助任何 future 的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the help center .




9年前关闭。




我正在使用 ffmpeg C API 将实时渲染的视频编码为 mpg 和/或 mp4(取决于视频的后期使用)。编码为 mp4 时,一切正常。但是当编码为 mpg 时,任何播放器都无法播放生成的视频。快速调用 ffprobe 显示标题丢失。但这似乎几乎是不可能的,因为我明确地写了它。

在对任何帧进行编码之前,这就是我编写 header 的方式:

// ptr->oc is the AVFormatContext
int error = avformat_write_header(ptr->oc, NULL);
if (error < 0)
{
s_logFile << "Could not write header. Error: " << error << endl;
fprintf(stderr, "Could not write header. Error: '%i'\n", error);
return 1;
}

写入 header 时永远不会出现任何错误。

对于编码,我关注 the official muxing.c example ,所以我确实设置了 CODEC_FLAG_GLOBAL_HEADER 标志。我使用 CODEC_ID_MPEG2VIDEO(用于视频)和 CODEC_ID_MP2(用于音频)。

当我在一个额外的步骤中使用外部 ffmpeg 可执行文件“编码”它时,结果 mpg 确实有效,如下所示: “ffmpeg -i ownEncoded.mpg -sameq -y working.mpg” .
所以似乎所有数据都在那里,只是由于某种原因缺少标题......

这是 ffmpeg 在编写 header 之前/时报告的唯一内容:
mpeg -------------------
lvl: 24
msg: VBV buffer size not set, muxing may fail

这可能是问题吗?

我想知道这里有什么问题,因为我用完全相同的函数编码 mp4,除了在编码为 mp4 时设置一些特殊值,如 qmin、qmax、me_method 等。我是否可能必须设置任何特殊值才能使 ffmpeg 真正正确地写入 header ?

最佳答案

也许你必须设置标志CODEC_FLAG_GLOBAL_HEADER对于 AVCodecContext .
outputFormat->oformat->flags & AVFMT_GLOBALHEADER == true 的情况下需要它, 其中 outputFormatAVOutputFormat
因此你应该写

if(outputFormat->oformat->flags & AVFMT_GLOBALHEADER) 
codec->flags |= CODEC_FLAG_GLOBAL_HEADER;

还要看ffmpeg的输出,可能有警告。

关于video - 尽管使用了 avformat_write_header,但 mpg 中缺少标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516652/

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