问题标签 [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 回答
179 浏览

ffmpeg - 如何使用 FFMPEG 获取视频的 _current_ 持续时间?(不是元数据)

我尝试了 ffmpeg -i myfile,而 myfile 已部分下载。FFMPEG 给了我整个文件的持续时间,而不是下载的部分。我可以用 FFMPEG 或其他工具看到这个吗?

回答:

使用 MediaInfo。

0 投票
1 回答
3291 浏览

ffmpeg - Libavcodec:解码 H.264 流时如何判断访问单元结束

我正在通过 RTP 接收 H.264 视频并使用 libavcodec 对其进行解码。在将 NAL 单元从 RTP 数据包中解包到 avcodec 之前(包括重新组装分段单元)。

我试图展示有效的解码帧速率。我曾经记录成功解码视频通话后的时间,其中 *got_picture_ptr 为非零。到目前为止,这很有效,因为我只得到每帧有一个切片的视频。但是现在我收到了视频,其中 I 和 P 帧分别由 2 个 NAL 单元组成,分别为 5 和 1 类型。现在,当我输入帧的任一切片时,decode_video 返回它得到一张图片,并且 pAVFrame->coded_picture_number 从每个切片中增加。

如何可靠地找到视频帧/图片/访问单元的开头或结尾?

我已经从流中转储了一些 NAL 单元,并通过 h264bitstream 中的 h264_analyze 运行它们。

h264_analyze 在 4 个 NAL 单元上的输出

两个 I 切片都显示 frame_num = 0。接下来的 2 个(未显示)有 frame_num = 1。

0 投票
3 回答
2919 浏览

ffmpeg - 在编码时强制自定义 H.264 帧内(关键帧)?

我有一个视频序列,我想在播放时跳到特定的帧(我的播放器是在 iOS 中使用 AVPlayer 实现的,但这是偶然的)。由于这些帧将以不可预测的间隔下降,因此我无法使用大多数视频编码器中存在的标准“每 N 帧/秒关键帧”功能。但是,我确实提前知道目标帧。

为了尽可能有效地跳过此操作,我需要在编码时强制目标帧为 i 帧。理想情况下,在某种 GUI 中,它可以让我擦到一个帧,将其标记为关键帧,然后(重新)编码我的视频。

如果没有这样的工具,我觉得这可能可以通过使用 libavcodec 滚动自定义编码器来完成,但如果 GUI 不可用,我宁愿使用更高级别(最好是可编写脚本的)工具来完成这项工作不可能。这是ffmpeg或mencoder可以完成的任务吗?

有没有人有这样做的技术?此外,由于我对 h.264 编解码器有一些基本的无知,这完全有可能是一项不可能完成的任务。如果是这样,请让我正确。

0 投票
1 回答
2291 浏览

ffmpeg - 如何创建解码器的完整副本?

我正在为 mpeg4 视频流的自定义实现编写视频解码器(使用 FFMPEG/AVCodec)。这个视频流的特点是它可以分成许多“子”流,创建许多基于同一父级的 P 帧。我试图解码的视频流实际上是一种“视频树”。像这样的东西:

我已经编写了一个基本解码器,当我决定遵循一条路径时它工作得很好,问题是当我尝试遵循视​​频树中的多个路径时。在这一点上,我需要“分叉”我的解码器来跟踪两个不同的视频流。拆分不仅可能发生在关键帧之后,甚至可能发生在 P 帧之后,因此我需要复制 AVCodecContext (我使用avcodec_copy_context),但它似乎是从干净状态创建新解码器.. 它似乎忽略了以前的视频状态,因此解码后的 P 帧被“应用”到一个空的视频帧。可能使用复制上下文avcodec_copy_context是不够的......有什么建议吗?如何复制解码器的上下文和完整状态?或者,有没有其他方法可以使用引用解码我的流?谢谢!

0 投票
2 回答
12726 浏览

android - 在 Android 上使用 OpenMAX (IL?) 进行音频/视频解码

许多运行 Android 的较新硬件平台,特别是 NVIDIA 的 Tegra 2,都支持 OpenMAX 进行媒体加速。如果没有这种支持,今天的设备实际上不可能解码 720p 视频,但 Android 上支持的解复用器数量非常少。我能找到的唯一公共 API 是通过 Android SDK 中的MediaPlayer类。然而,在 Android 源代码树中有多个位置与OpenMAX相关的花絮。

在我的设备(Samsung Galaxy Tab 10.1)上,我可以通过 /system/lib 中的大量 OpenMAX 库访问硬件解码器,将我的视频应用程序与这些库连接会很棒。谁能告诉我有关实现由 OpenMAX 提供支持的解码器的信息?我从 Khronos 找到了文档,但没有任何示例代码或教程。我已经完成了解复用甚至软件解码(通过 libavcodec/libavformat),我只想放入钩子以启用硬件编码。我在这里还假设有必要直接链接到设备上可用的链接,这使得它在便携性方面相当乏味,但它确实有效。

或者,我对任何人都知道的有关访问 Tegra 2 设备上可用的视频解码的私有 API 的任何事情感兴趣。特别是如果有一个像 NVIDIA 为桌面 linux 发行版实现的vdpau接口,因为有很多可用的 - 但我无法找到表明支持的共享库。

0 投票
1 回答
1724 浏览

c - 使用 ffmpeg 解码 TCP 流

我正在编写的 Android 应用程序中使用 Ffmpeg 库。我已经编写了代码来打开一个本地文件并使用 avformat_open_input() 对其进行解码。但是我需要使用 Ffmpeg 通过 TCP 读取视频流。我在 Ffmpeg 中发现了一些东西,例如 libavcodec/tcp.h,但我无法确定如何将 TCP 流实际打开到解码器中。

任何建议将不胜感激。

0 投票
2 回答
5787 浏览

ffmpeg - 基于 RTSP 的 MJPEG 流式传输

我正在通过 RTSP 从 IP 摄像机捕获 JPEG 图像。我使用 live555 + libavcodec 流式传输和解码 MJPEG 图像。该流在图像分辨率 2048 x 1920 下工作正常。但是当我将图像宽度增加到 2048 以上时,我得到一个宽度非常小的条形矩形图像(即 544x1920)。图像被正确捕获并保存在相机上。仅当我通过 RTSP 将图像流式传输到 PC 时才会出现此问题。高分辨率 MJPEG 的 RTP 中是否有任何有效负载限制?

0 投票
1 回答
2531 浏览

c - 使用 libavcodec 保存 H.264 编码图像

我从 IP 摄像机获取 H.264 图像,并希望保存编码图像(不解码)。为此,我正在使用ffmpeg (libavformat/output-example.c)中的 output-example.c。为了保存原始 H.264 图像,我执行以下操作:

其中ulAddr是指向图像的地址指针,out_size 是图像大小。我不想将图像保存到媒体视频文件,而是保存单个图像。save_image 函数仅使用基本的fopenfwrite函数来保存图像。如果我解码帧然后保存,一切正常。但我在保存编码帧时遇到问题。编码的帧以非常小的尺寸保存,然后无法解码。有什么问题吗?我将非常感谢这方面的任何帮助。

0 投票
4 回答
7326 浏览

c - 如何关闭 libavformat 错误消息

默认情况下,libavformat 将错误消息写入,例如stderr

Estimating duration from bitrate, this may be inaccurate

我怎样才能关闭它?或者更好的是,将它传递给我自己整洁的日志记录功能?

编辑:将 stderr 重定向到其他地方是不可接受的,因为我需要它用于其他日志记录目的,我只希望 libavformat 不写入它。

0 投票
1 回答
1470 浏览

installation - cinelerra:加载共享库时出错:libavcodec.so.52 slackware

确实,尝试安装 cinelerra 需要几天的时间,并且不再知道还能做什么 eh 搜索了论坛,我已经向 cinelerra 列表发送了电子邮件,但仍然无法解决任何问题提前谢谢

只是对使用cinelerra感兴趣 我有slackware 13.37 下载TXZ

说它安装正确放:

我收到以下错误: