问题标签 [libav]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
407 浏览

video - 使用 libav 在内存流中写入视频

我正在使用 libav 从网络成功捕获视频数据包。目前,我有一个 AVFormatContext 对象,我可以在其中写入标头、数据包等......关键是我想在需要时将这个上下文中的所有内容转储到文件中。我应该怎么办 ?

在此先感谢, 迪达克佩雷斯

0 投票
1 回答
7283 浏览

c++ - 使用 libav 从内存中解码视频文件

假设我在内存中有一个完整的视频文件,我想使用 libav 来解码整个帧。我该怎么做?关键是我可以使用 avformat_open_input() 函数直接从文件中读取,但我确实需要从存储在内存中的文件中读取。

我的 AVIOContext 实现:

我当前的代码:

提前致谢,

迪达克·佩雷斯

0 投票
2 回答
6024 浏览

c++ - LibAv/FFMpeg 的线程安全?

LibAV/FFMpeg 线程安全吗?例如。我可以在一个线程中使用 AVFormatContext* 从文件中读取数据,然后通过简单地添加互斥锁将读取的数据包解码到另一个线程中,还是库的线程安全性是“不知道不关心”类型的交易?我知道 libav 对编码器线程有基本支持,但我正在尝试更多的黑盒类型方法,我将其分解为多个线程(源 -> 解码器 -> 过滤器 -> 编码器 -> 接收器)并试图了解复杂性这样的。

任何对 ffmpeg 和线程有任何经验并希望提供与此相关的任何其他信息的人也将不胜感激。

0 投票
0 回答
280 浏览

ffmpeg - 将 RTSP 与计算机时间同步

我成功地使用 libav 从 RTSP 网络源接收视频流。关键是我需要将我的计算机时间与视频捕获同步,这意味着我需要知道我的计算机的哪个日期时间对应于第一帧(pts = 0)。我的 API 调用如下:

通过上面的调用,我成功读取了帧,但我确实需要知道如何知道与第一帧相对应的确切绝对日期时间,因为它的 pts 为 0。也许我可以使用 time() 函数或 GetSystemTime (我正在使用 Windows)在上述两个调用之间,但并不真正知道 libav 是如何工作的。

0 投票
1 回答
8693 浏览

ffmpeg - 关键帧不是关键帧吗?AV_PKT_FLAG_KEY 不解码为 AV_PICTURE_TYPE_I

在解码标志中包含 AV_PKT_FLAG_KEY 的数据包后,我期待得到 I 帧,但我得到了 P 帧:

致电后:

我打印出以下内容作为健全性检查:

返回输出:

当我期待:

其中“1”== AV_PKT_FLAG_KEY。'I' 指的是 AV_PICTURE_TYPE_I,

这种行为正确吗?(我正在解码 MPEG2 视频)。

0 投票
1 回答
15958 浏览

ffmpeg - 如何控制 ffmpeg 的关键帧生成?

我正在制作一个分段器来干预 ffmpeg 的 write_frame 函数并将输出数据写入单独的文件。每个分段文件包含大约 3 秒的视频片段。

代码执行以下操作:

一般来说,每个片段至少包含 3 秒的视频数据,并且从一个关键帧开始。

问题是输出视频的持续时间非常不同,有些包含 3 秒,有些包含 5 或 6。

我怀疑这个问题是由于 ffmpeg 在转码期间如何生成关键帧。如果两个相邻关键帧之间的“距离”是 6 秒,我得到 6 秒的片段。

这是我的问题:

  1. ffmpeg 以不规则的间隔生成关键帧是真的吗(间隔时间可以长达几秒(例如 6 秒)?

  2. 我们如何控制 ffmpeg 关键帧的生成?(我想应该有一个 ffmpeg 命令的参数, -force_key_frames 可能,但我不确定)

0 投票
1 回答
216 浏览

stdvector - 使用 std::vector而不是 libav 编码/解码示例中的 fread()

我正在尝试使用使用 fread 读取文件的 api-example.c 来代替使用 memcpy (或类似的),因为我已将我希望解码和编码的文件加载到std::vector<char>. (由于我将它从压缩存档读取到内存中)。关于如何实现这一目标的任何建议或示例?

原始 api-example http://svn.perian.org/ffmpeg/libavcodec/api-example.c

我目前的“进展” http://pastebin.com/Ag0KfEsg

0 投票
1 回答
2865 浏览

c++ - 如何使用 libav* 将 KLV 数据包编码为 H.264 视频

目前我正在使用 libav* 对 H.264 视频进行编码。我想将 KLVPackets 添加到比特流中,但不知道在哪里实现它。

avcodec 中有一个结构,但我不确定如何将其写入帧元数据

当前 FFMPEG 代码(仅留下相关代码):

有人知道我可以使用的任何示例吗?

0 投票
1 回答
2181 浏览

c++ - 从原始 pcm 到 OGG Vorbis 的 libav 音频编码示例

我目前正在开发一种工具来转换多种专有格式的游戏媒体资产并将它们转换为更开放的格式。我正在尝试使用 libav 库http://libav.org/将 WAV、mp3、ect 格式解码为原始 pcm std::vector<char>(成功完成),然后将其编码为 ogg vorbis。我正在尝试api-example.c在文档中使用。https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decoding_encoding.c但进展甚微,因为我卡在音调生成结束和 AVPacket 编码开始的位置。

有人可以指出我从原始 pcm 文件(或std::vector)写入文件(最好是 ogg vorbis)的音频编码的工作示例吗?

0 投票
0 回答
404 浏览

c++ - 在 C++ 程序中使用 libvo-aacenc 和 libav

我正在制作一个程序来记录和编码这个录音到 aac。我为 linux 和 libfaac 做了一个函数来完成这项工作。现在我需要为 Windows 制作这个程序。我知道我需要使用 libvo-aacenc,但我不知道要在我的代码中更改什么。你能告诉我该怎么做吗?这是我的代码。