问题标签 [libavcodec]

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 回答
2274 浏览

ffmpeg - FFmpeg 和 Libav 有什么区别?

根据这个问题的第一条评论,我引用

“FFmpeg 项目和 Libav 项目都提供了具有此名称的库,但它们相互不兼容”。所以我认为答案取决于你想使用哪个 libavcodec。

通过用户aland维基百科

这两个项目之间存在什么区别?

我对使用 Mp4/Mkv 容器将视频和音频编码为 H/X264、Mp3 和 AAC 感兴趣;但更重要的是,我想从一个可靠且最新的库开始,该库具有许可许可证并在尽可能多的平台上得到广泛支持。

0 投票
0 回答
2992 浏览

c - 如何使用 libavcodec 流式传输带有 mp3 音频的 h.264 视频?

我从网络摄像头读取 h.264 帧并从麦克风捕获音频。我需要将实时视频流式传输到 ffserver。在调试期间,我使用 ffmpeg 使用以下命令从 ffserver 读取视频:

我的输出文件中的视频略微加速。如果我添加一个音频流,它会加速几次。有时输出文件中没有音频。

这是我的音频编码代码:

这是我的流式视频代码:

这是我的使用方法:

我认为我的问题在于 PTS 和 DTS。谁能帮我?

0 投票
4 回答
7443 浏览

c++ - FFMPEG 无法显示视频的持续时间

我正在尝试使用 ffmpeg 从视频文件中捕获帧,但我什至无法获得视频的持续时间。每次当我尝试访问它时,pFormatCtx->duration 我都会得到 0。我知道指针已初始化并包含正确的持续时间,因为如果我使用 av_dump_format(pFormatCtx, 0, videoName, 0);,那么我实际上会获得持续时间数据以及有关视频的其他信息。这是我使用时得到的av_dump_format(pFormatCtx, 0, videoName, 0);

我不明白为什么av_dump_format可以显示持续时间而我不能。我检查了函数定义,显示持续时间,函数也使用pFormatCtx->duration. 当我调用它们时,不仅仅是持续时间其他成员变量也没有显示正确的数据main.cpp

这是我的代码:

我不知道它是否有帮助,但我在 Ubuntu 上使用 QtCreator 并静态链接库。

0 投票
3 回答
5888 浏览

c++ - 创建 AVPacket 结构的副本

我想制作一个 AVPacket 的副本,以便以后可以在我喜欢的时候对其进行解码。

AVPacket 来自音频流。

av_dup_packet 似乎不起作用。

AVPacket 复制构造函数不起作用。

创建我自己的复制构造函数会导致内存损坏。

0 投票
1 回答
1982 浏览

audio - 使用 libav/ffmpeg 正确打开音频文件

我正在尝试使用 ffmpeg 解码来自各种文件格式的音频样本。因此,我根据本次讨论中的代码开始了一些实验:How to decode audio via FFmpeg in Android我使用最新的 FFMPEG 版本(1.0)并使用https://github.com/halfninja/android-ffmpeg-x264编译它

FFMPEG 使用 enable-decoder=mp1/mp2/mp3/ogg/vorbis/wav/aac/theora 编译,没有任何外部库(例如 libmp3lame、libtheora 等)

打开 mp3 和 wav 文件可以毫无问题地生成以下输出,例如 mp3:

音频格式:mp3

音频比特率:256121

流:0(总数:1)

音频编解码器:mp3

但是当我尝试打开一个 ogg 文件时,我得到了这个:

错误查找流信息:-1(流:1)

When I manually set audioStreamIndex=0 and comment out the return statement:

Error find stream information: -1 (Streams: 1)

audio format: mp3

audio bitrate: 0

stream: 0 (total: 1)

audio codec: mp3

For m4a (AAC) I get this:

audio format: mp3

audio bitrate: 288000

stream: 0 (total: 1)

audio codec: mp1

but later it fails in avcodec_decode_audio3.

I also tried to manually force a format without success:

Is there something wrong with the loading code which makes it only work with mp3 and wav and fails for other formats?

Regards,

0 投票
1 回答
639 浏览

visual-c++ - Windows 的 libavcodec 中的内存泄漏?

我正在为Windows使用 libavcodec,并且avformat_open_input()似乎有严重的内存泄漏。如果我打开 5,000 个视频,操作系统会报告应用程序退出时未释放的 2 GB RAM 消耗。这是代码:

上面的代码位于从 C# 调用的类库中。我正在使用托管 C++ 来调用 libavcodec 库。流程是 C# -> 托管 C++ -> libavcodec。我正在使用 DLL 和动态链接。这是一个单线程应用程序。正如预期的那样,当我使用线程时,泄漏会增加。

我尝试了以下方法:

  • 我已经尝试了几个 32 位版本并且内存泄漏是一致的。
  • 使用NULL而不是&dict.
  • avformat_open_input()使用相同的文件名调用5,000 多次,不会泄漏内存。
  • 使用组合avformat_alloc_context()avformat_free_context(). 我找不到释放内存的组合。
0 投票
0 回答
288 浏览

c - 如何在不接触ffmpeg的情况下将传入的帧写入文件?

我能够从 av_open_input_file 读取帧并使用另一个编解码器对其进行解码和重新编码并保存到文件中。

现在,我想要同样的东西,除了我不想解码或重新编码。我想在刚刚读取的帧上执行 av_interleaved_write_frame 到文件。为此,我需要设置 AVOutputFormat

AVOutputFormat *fmt; fmt = av_guess_format(NULL, 文件名, NULL);

但是,我不能提供文件名,因为它是一个远程流。那么,有没有办法从已经读取输入帧的当前 AVFormatContext 生成 AVOutputFormat ?所以我可以以正确的方式从它的任何部分(不一定从头开始)将相同的帧写入输出文件。

总结一下:我需要将刚刚读取的帧写入文件而不进行解码和重新编码。(我将再次打开该文件以便能够播放该文件)

有任何想法吗?

0 投票
0 回答
653 浏览

c# - FFMPEG avcodec_find_decoder(2) (CODEC_ID_MPEG2VIDEO) 总是返回不完整的 AVCodec?

我遇到了 FFMPEG (avcodec-54.dll) 的问题 1) 我写了一个 .NET 包装器。据我所知,它运作良好。2)我尝试解码一些东西......这就是问题所在:


没有抛出 EXC 并出现以下输出:


最让我困惑的是名字是正确的,但是id和type是错误的。在以前的版本中,如果 DLL 一切正常。这种行为是在新版本中提出的。任何猜测或调试提示?

0 投票
2 回答
13861 浏览

video - 任何人都可以帮助理解 AVFrame.linesize[] 吗?

我试图找出每个单元格的AVFrame.linesize[]含义,但我没有找到。

据我了解linesize[0]是宽度,linesize[1]是高度。

  1. 如果我是对的,其他单元格是什么意思?
  2. 为什么avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);只有 linesize[0] 具有值而其他单元格始终为 0?

更新

我认为 AVFrame.data[i] 和 AVFrame.linesize[i] 是行中特定颜色的数据和行的长度,对吗?

0 投票
1 回答
3920 浏览

video - 为什么从 avi 容器解码帧并将它们编码为 h264/mp​​4 不起作用?

我开始使用 ffmpeg,我想将 avi 文件转换为 mp4/h264 文件。我读过很多帖子,包括这个,但我找不到任何好的例子如何将帧保存到 mp4 文件。下面的代码是从 avi 文件解码帧并将其编码为 H264/mp​​4 文件的简化代码,但是当我保存帧时,无法播放 mp4 文件。我想我在编码方面做错了

如果您能告诉我出了什么问题以及如何解决,我将不胜感激。