问题标签 [libavformat]

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 投票
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 回答
7555 浏览

ffmpeg - 我如何通过 libavformat 将 H264 流混合到 MP4 文件中

我想实现一个应用程序,首先解码一个多媒体文件(例如test.mp4文件,视频编解码器id是H264),得到一个视频流和一个音频流,然后在音频流中做一些不同,最后编码视频流(使用 libx264)和音频流到结果文件(result.mp4)。为了提高效率,我省略了视频流的解码和编码,我通过函数“av_read_frame”得到视频包,然后通过函数“av_write_frame”直接输出到结果文件中。但是输出文件中没有图片,输出文件的大小相当小。

我跟踪了ffmpeg的代码,发现在函数“av_write_frame->mov_write_packet->ff_mov_write_packet”中,会调用函数“ff_avc_parse_nal_units”来获取nal单元的大小,但是返回值很小(比如208字节)。

我发现MP4文件中的H264码流没有以Annex-B格式存储,所以找不到起始码(0x000001),现在我的问题是如何将H264码流改成Annex-B格式,并制作行得通吗?我在每一帧的开头手动添加了启动代码,但它仍然无法正常工作。

任何人都可以给我任何提示吗?非常感谢。以下是与我类似的代码:

0 投票
1 回答
625 浏览

ffmpeg - 什么时候 fps 可能是一个猜测而不是确切的值?

我使用 libavcodec 进行视频处理。

的文档AVStream->r_frame_rate

我尝试了几个 mp4 和 avi 视频(25fps)并且r_frame_rate总是像我预期的那样 25。所以,我想了解为什么文档说...is just a guess!如果我总是得到精确的 fps?什么时候改变?

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 投票
1 回答
3313 浏览

image - AVFrame 到 RGB - 解码伪影

我想以编程方式将 mp4 视频文件(使用 h264 编解码器)转换为单个 RGB 图像。使用命令行看起来像:

使用此命令会生成一组漂亮的图片。但是当我尝试以编程方式做同样的事情时,一些图像(可能是 B 和 P 帧)看起来很奇怪(例如,有一些带有差异信息的扭曲区域等)。读取和转换代码如下:

如何转换视频流,以便每个最终图像显示所有图像数据,以便所有帧中包含来自 B 和 P 帧的信息?

[编辑:]显示工件的示例图像在这里:http: //imageshack.us/photo/my-images/201/sampleq.jpg/

问候,

0 投票
1 回答
960 浏览

ffmpeg - avformat_write_header 产生无效的标头(导致 MPG 损坏)

我正在从运行时来自 3D 引擎的输入图片渲染视频文件(我不传递实际的图片文件,只是 RGB 内存)。这在使用 CODEC_ID_H264 作为视频编解码器输出 MP4 时非常有效。

但是当我想使用 CODEC_ID_MPEG2VIDEO 创建一个 MPG 文件时,生成的文件就被破坏了。没有播放器可以正确播放视频,然后当我想将该 MPG 与另一个 MPG 文件连接,并在另一个步骤中转换结果 MP4 时,生成的 .mp4 文件包含两个视频,但来自原始 MPG 视频的许多帧(并且只有视频!声音效果很好)被简单地跳过。

起初我认为 MPG -> MP4 转换是问题,但后来我注意到来自视频渲染引擎的初始 MPG 已经损坏,这说明标题损坏。不过,不确定是系统标头还是序列标头损坏。或者,如果它可能是完全不同的东西。

如果你想看看,这里是文件: http ://www.file-upload.net/download-7093306/broken.mpg.html

同样,当直接从视频渲染引擎创建 MP4 时,完全相同的复用代码工作得非常好,所以我很确定输入数据、swscale() 等是正确的。唯一的区别是使用了 CODEC_ID_H264 并设置了一些额外的变量(如 qmin、qmax 等),这些变量都是 H264 特有的,因此不会产生影响。

此外, avformat_write_header 和 av_write_trailer 都不会报告错误。

作为附加信息,在 VLC 播放器中查看 MPG 的编解码器数据时,无法显示 FPS、分辨率和格式(应显示 640x360、30 fps 和 4:2:0 YUV)。

我正在使用一个相当新的(可能是 2-3 个月大)FFmpeg 版本,它是我从 MinGW 的源代码编译而来的。

欢迎任何有关如何解决此问题的想法。目前,我不在那些:)

0 投票
0 回答
422 浏览

c - 是否可以在现有音频流的末尾添加音频?

我设法用 libavformat 实现了我的解码和编码音频类。我可以创建和阅读 mp3、ogg、...

现在,我想添加一个功能来“在现有音频文件的末尾录制”。即:将一些新帧(音频数据)添加到现有流的末尾。(我的文件只是带有 1 且只有流的音频文件)。

总而言之,我尝试了这个但没有成功:

它在第一个 av_write_frame 上崩溃。

我看到 3 个可能的原因,但我不知道该怎么做:

  • 输入和输出文件是一样的。我应该如何初始化我的 AVFormatContext 和 AVOutputFormat ?

    avformat_alloc_output_context2(&AVFormatContext , NULL, NULL, 文件名); AVOutputFormat = AVFormatContext ->oformat; avformat_open_input(&AVFormatContext , 文件名, NULL, NULL)

  • 当我得到我的 AVStream 时,我必须寻求它的结束吗?如何 ?

  • 我必须使用 avio_open(&AVFormatContext->pb, filename, AVIO_FLAG_WRITE); ?

提前致谢。我在样本中一无所获,但如果你有一些样本或想法...... :)

0 投票
1 回答
7236 浏览

c++ - FFMPEG 到 OpenGL 纹理

我是来问的,如何将 AVFrame 转换为 opengl 纹理。实际上,我创建了一个渲染器,向我输出音频(音频正在工作)和视频,但视频没有输出。这是我的代码:

纹理创建:

代码信息:_texture 变量是一个保存纹理 ID 的 GLuint

获取 AVFrame 并将其转换为 OpenGL 纹理的函数:

代码信息:有一个线程存储 AVFrames 的队列,这个函数经常被调用来获取 AVFrames,直到它得到一个 NULL 它停止被调用。

这实际上是行不通的。(我试图查看堆栈溢出中的一些问题,它仍然无法正常工作)任何示例,或者帮助我纠正任何错误的人?

附加数据:我尝试将 GL_RGB 更改为 GL_RGBA 并开始使用这些格式,但是当我尝试 GL_RGBA 时它会崩溃(因为宽度和高度非常大,无论如何我尝试调整它们的大小)。我试图将大小更改为 2 的幂,但仍然无法正常工作。

1 编辑:

线程功能:

线程创建函数:

这里指的是包含 NextVideoFrame 和 _texture 成员的类。

解决了:

我遵循了一些 datenwolf 提示,现在视频与音频/视频一起正确显示:

截图

0 投票
1 回答
1551 浏览

visual-c++ - 在 Visual Studio 2008 中使用 zeranoe libavcodec 构建

我正在尝试在 Visual Studio 2008 中使用来自 zeranoe 的 libavcoded 共享构建。我已经在调试模式下使用 libavcodec 测试了我的应用程序,它运行良好。但是当我尝试通过发布版本构建应用程序时,它编译得很好,但是在运行时它显示错误为“过程入口点 CoCreateInstance 无法位于动态链接库 avcodec-54.dll 中”有人可以帮忙吗我来解决这个问题。

0 投票
1 回答
677 浏览

android - 编译ffmpeg库和转换器类的麻烦

我使用这个项目作为参考:代码可在http://roman10.net/src/affmpeg.zip获得。

我正在尝试使用与项目建议的配置不同的 ffmpeg 编译该项目。我编译了一个新的 libffmpeg.so 并将其添加到项目中。但是,现在我收到“UnsatisfiedLinkError”

我决定重新编译 converter.so 文件,但是,在其上运行 ndk-build 命令时,我收到以下消息:

我能做些什么来解决这个问题并让它发挥作用?