繁体   English   中英

告诉libavcodec / ffmpeg丢帧

Tell libavcodec/ffmpeg to drop frame

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

我正在构建一个可以创建视频的应用。 问题是,有时(好的......大部分时间)帧采集过程不够快。

我现在正在做的是如果我迟到了就跳过当前的帧获取,但是FFMPEG / libavcodec认为每一帧都传递给它作为下一帧的行,所以如果我从2帧中删除1帧,那么20秒的视频只要我添加声音就会出现更多问题,因为声音处理速度更快......

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

我试图将帧堆叠在一个点上,但这最终会杀死我所有的内存(我也试图'堆叠'我的帧在硬盘中,这是慢的,如我所料)

我想我必须手动处理pts,但我的所有尝试都失败了,并且阅读其他一些使用ffmpeg的应用程序代码,例如VLC,没有太大的帮助...所以任何建议都会很多不胜感激!

非常感谢提前!

4 个回复

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

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

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

这里作者在视频编解码器的时基中将帧时间戳递增1,重新调整为视频流的时基,但在您的情况下,您可以简单地重新缩放自从您开始从任意时基捕获帧到输出视频流的时基之后的秒数(如上例所示)。 例如,如果您的任意时基为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