繁体   English   中英

告诉 libavcodec/ffmpeg 丢帧

Tell libavcodec/ffmpeg to drop frame

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在构建一个创建视频的应用程序。 问题是,有时(嗯......大部分时间)帧获取过程不够快。

如果我迟到了,我目前正在做的是跳过当前帧采集,但是 FFMPEG/libavcodec 将我传递给它的每一帧都视为下一帧,所以如果我从 2 帧中删除 1 帧,则为 20 秒视频只会持续 10 个。一旦我添加声音,就会出现更多问题,因为声音处理速度更快......

我想告诉 FFMPEG:“最后一帧的持续时间应该是最初预期的两倍”,或者任何可以让我实时处理的东西。

我试图将帧堆叠在一个点上,但这最终会杀死我所有的 memory (我还尝试将我的帧“堆叠”在硬盘中,这很慢,正如我所料)

我想我将不得不手动使用 pts,但我所有的尝试都失败了,并且阅读其他一些使用 ffmpeg 的应用程序代码(例如 VLC)并没有太大帮助......所以任何建议都会很多赞赏!

提前非常感谢!

4 个回复

您的 output 可能会被视为可变帧率 (vfr),但您可以在帧到达时使用挂钟时间简单地生成时间戳,然后在编码之前将其应用于您的 AVFrame。 那么该帧将在播放时显示在正确的时间。

有关如何执行此操作的示例(至少指定您自己的时间戳部分),请参阅 ffmpeg 分布中的 doc/examples/muxing.c (我当前的 ZBA9F11ECC34927D9993ZB933E 中的第 491 行):

frame->pts += av_rescale_q(1, video_st->codec->time_base, video_st->time_base);

在这里,作者将视频编解码器的时基中的帧时间戳增加 1,重新调整为视频流的时基,但在您的情况下,您可以简单地重新调整自开始从任意时基捕获帧到 output 视频流的时基以来的秒数(如上例所示)。 例如,如果您的任意时基是 1/1000,并且您在开始捕获后 0.25 秒内收到一帧,则执行以下操作:

AVRational my_timebase = {1, 1000};
frame->pts = av_rescale_q(250, my_timebase, avstream->time_base);

然后像往常一样对帧进行编码。

许多(大多数?)视频格式不允许遗漏帧。 相反,当您无法及时获得新视频帧时,请尝试重用旧视频帧。

只是一个想法..当处理滞后时,您是否尝试再次将同一帧传递给它(并丢弃当前帧)? 也许它可以快速处理重复的帧。

有这个 ffmpeg 命令行开关-threads...用于多核处理,所以你应该能够用 API 做类似的事情(虽然我不知道怎么做)。 这可能会解决您的问题。

1 带ffmpeg的带丢帧的视频

我每天几乎不间断地在生产环境中使用ffmpeg录制视频,持续15个小时。 有时视频冻结了几秒钟。 我相信硬件已经足够。 它是具有16GB内存和Windows 10的i7。视频平均每个大约2:00分钟。 每天发生几次这种情况大约10次,所以我获得了奖励。 这里是一个冻结的视频 ...

2018-03-21 19:13:26 0 159   ffmpeg
3 ffmpeg / libavcodec内存管理

libavcodec文档对于何时释放分配的数据以及如何释放它不是很明确。 阅读完文档和示例后,我将下面的示例程序放在一起。 源代码中内联了一些特定的问题,但是我的一般问题是,我是否可以在下面的代码中正确释放所有内存? 我意识到以下程序在发生错误后不会进行任何清理-重点是最终清理。 该 ...

5 重复ffmpeg流(libavcodec / libavformat)

我正在使用ffmpeg的各种API在我的应用程序中绘制视频。 到目前为止,效果很好。 由于我也有gif,因此我想循环播放而不必一遍又一遍地加载文件。 在我的代码中,解码器循环如下所示: 最终读取视频效果非常好,如果我未将mRepeat设置为true,则EOF正确并停止解析。 ...

7 ffmpeg解码器似乎丢帧

我正在使用avcodec(c ++)api解码视频文件帧并对其进行处理。 我注意到解码的帧数少于预期的\\实际帧数。 区别是16帧。 当使用ffmpeg解码x帧时,VirtualDub表示同一文件具有x + 16帧。 使用ffprobe,我看到文件包含x帧: 此外,当我尝试使用f ...

9 由于色彩空间不匹配而导致 FFMPEG 丢帧

我有两个 png 图像序列,每个图像序列有 30 帧,我试图将它们混合在一起。 问题是有些图像在 rgb24 颜色空间中,而有些在 rgba 中。 将两个 30 帧动画混合在一起会导致帧松散——输出只有 26 帧长,两个单独的片段不同步。 使用的命令: 结果: 从单个序列创建视频不会产生此 ...

10 FFmpeg - 如何确保丢帧延迟> 1 [s]?

我正在使用 ffmpeg 和 mpv,在两个主机之间传输音频/视频。 其中一台主机正在使用 ffmpeg 发送流: 第二台主机正在接收 mpv: 我尝试了很多选项和组合来尽可能地减少延迟。 以上命令效果很好,启动延迟<1s。 不幸的是,有时在流式传输过程中会出现延迟,甚至会随着时间的推 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM