问题标签 [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 投票
1 回答
18721 浏览

ffmpeg - 如何使用 avconv 将 MP4 文件转换为 MPEG?

我有一些 MP4 格式的视频文件,我想将它们转换为 MPEG 格式的文件。

我尝试转换:

但我收到以下错误

我的命令中缺少什么?

0 投票
3 回答
12036 浏览

linker - Libav 链接错误:未定义的引用

这是我的问题:

  • 我从源代码(版本 1.2)构建了 ffmpeg,libav* 库位于 /usr/local/lib 中,它们是静态的
  • 我正在编译一个 ns3 (www.nsnam.org) 模块,所以我对链接器的唯一控制是通过 env 变量 LINKFLAGS
  • 在源代码中,标头位于“extern C”块中,因此它不是通常的 g++ 名称修饰
  • 我设置 LINKFLAGS="-I/usr/local/include/libavformat -I/usr/local/include/libavcodec -I/usr/local/include/libavutil -L/usr/local/lib -lavformat -lavcodec -lavutil" ,并且链接器似乎找不到我调用的任何 libav* 函数(我得到很多“未定义的引用”,然后是“collect2:错误:ld 返回状态 1”

谁能帮我?谢谢...

编辑:这里有一些未定义的参考消息:

edit2:这是我在“构建失败”后收到的消息:

0 投票
1 回答
2507 浏览

audio - Avconv:选择德国流不是最高质量的流

我正在将一些输入流从我的 DVB S2 卡转换为 RTMP。

切换到最近的 avconv 和 x264 后一切正常 :)

我唯一不知道的是,如何选择正确的音频流?

源有时最多有 6 个音轨。Avconv 会自动选择比特率最高的那个。但是我想选择“ger”之一:

以下是 ARTE 德语/法语电视频道的流媒体,例如:

libav Docs 真的没那么有用。现在谁做正确的语法?

编辑:我找到了 -map 选项: http: //ffmpeg.org/trac/ffmpeg/wiki/How%20to%20use%20-map%20option但不可能按名称映射?仅通过索引?

也许我需要使用 avprobe 来找到“ger”的正确流索引。

0 投票
2 回答
3855 浏览

c++ - 如何在 C++ 中使用 libav 设置 x264 基线配置文件

我正在编写一个小工具,它将视频转换为原始 h264 文件。这些文件稍后将由 SIP 电话播放。我有以下代码:

当我执行这个程序时,我从 libx264 得到以下输出:

为什么这仍然是主要配置文件,尽管我已将其明确设置为基线?

此外,如果有人可以添加一些注释,哪种 h264 设置对 SIP 电话有用,我会非常酷。非常感谢!

0 投票
1 回答
6653 浏览

cuda - Cuda ffmpeg 上的视频解码器

我开始实现 custum 视频解码器,该解码器利用 cuda HW 解码器生成 YUV 帧以供下一步对其进行编码。

如何填写“CUVIDPICPARAMS”结构?可能吗?

我的算法是:

对于获取视频流数据包,我使用 ffmpeg-dev libs avcodec、avformat ...

我的步骤:

1)打开输入文件:

2)获取视频流属性:

3)获取视频流:

4)获取CUDA设备并初始化它:

5)初始化视频CUDA解码器并设置创建参数:

6)将帧数据读入AVpacket

现在我需要在 CUDA 视频解码器上解码帧包,理论上是:

但在我需要填写 CUVIDPICPARAMS 之前

CUVIDPICPARAMS picParams;//=新的 CUVIDPICPARAMS; memset(&picParams, 0, sizeof(CUVIDPICPARAMS));

0 投票
1 回答
2110 浏览

ffmpeg - 如何使用 libav ffmpeg 从 h264 视频中获取 sps 结构

对于我的硬件解码器,我需要了解有关视频编解码器(如 h264)的其他编解码器规范?如何使用 libav ffmpeg 提取低级编解码器信息?

我需要的数据: https ://www.ffmpeg.org/doxygen/2.7/structSPS.html

0 投票
1 回答
413 浏览

android - Ffmpeg-Build:构建期间出错

我正在构建 ffmpeg 并卡在一个不寻常的地方。在 libavutil 我们有 float_dsp.h 和 float_dsp.c 文件。在这些文件中,有一个方法声明,它是:

在构建和编译此文件时,我收到此错误并且不知道该怎么做。我认为问题出在其他地方,但又完全不知道。错误是

任何想要帮助的人都请向前迈出一步,因为我在几周内还没有真正得到 ffmpeg 的任何支持。

问候

0 投票
1 回答
387 浏览

ffmpeg - 可以在使用 libavcodec 解码期间裁剪帧大小吗?

我按照 Dranger 的教程使用 libav 和 FFMPEG 显示视频。http://dranger.com/ffmpeg/

avcodec_decode_video2 似乎是视频解码过程中最慢的部分。我偶尔会同时解码两个视频,但只并排显示每个视频的一半。换句话说,每个视频的一半将在屏幕外。为了加快解码速度,有没有办法只解码一帧的一部分?

0 投票
3 回答
7505 浏览

ffmpeg - 如何使用 libavformat 连接 2 个具有相同编解码器的视频文件(重新混合)?

我已经从 CDN 下载了 flv 格式的视频(视频 H264 和音频 AAC),并将它们重新合成为 MP4 格式。但是视频受长度限制。所以我已经分几个部分下载了每个视频:从起点开始,在第 1 点,在第 2 点(通过在 url 中使用 seek 参数)。每个点的开始时间都比前一个点的结束时间早一点。
使用av_read_framei 扫描所有部分,发现相交的数据包不仅具有相同的大小和顺序,而且它们的 dts/pts 彼此偏移恒定值。因此,要将开始视频与从点 1 开始的视频连接起来,我必须执行以下操作:
1. 在输出文件中创建输出标头
2. 从开始视频中复制所有不相交的数据包。
3. 从点 1 开始的视频中复制所有不相交的数据包,并通过将其移动常量来更改 dts 值

如何使用 libav(不是 ffmpeg)来完成所有这些工作?我阅读了如何在不使用其他 libav 库的情况下使用 libavformat。但libav它不起作用,因为没有avformat_alloc_output_context2. libav对于像我这样的新手来说,源avconv.c代码太复杂了,无法隔离与流复制操作相关的部分。
有人可以给我举个例子:
- 打开input_file1input_file2(仅当程序与通用教程中的标准不同时才需要)
- 打开并写入具有相同容器格式和相同视频和音频格式的output_file
标头 - 将数据包从input_file1写入output_file直到数据包,例如pos == XXX
- 将数据包从input_file2写入output_file,通过常量值更改它们的 dts(或任何需要)
- 写入正确trailer

计算我之前制作的 dts 中的时间偏移。

0 投票
1 回答
393 浏览

ffmpeg - 使用 ffms2(ffmegsource) 进行音频解码

我正在使用 ffms2(ffmpegsource) 一个围绕 libav 的包装器来从文件中获取视频和音频帧。视频解码工作正常。但是我在音频解码方面遇到了一些问题。FFMS2 提供了一个简单的函数FFMS_GetAudio(FFMS_AudioSource *A, void *Buf, int64_t Start, int64_t Count, FFMS_ErrorInfo *ErrorInfo);api 来获取解码后的缓冲区。解码后的数据在用户提供的缓冲区中返回。

对于单通道,数据的解释是直接的,数据字节从用户缓冲区的第一个位置开始。然而,当涉及到两个通道时,根据 FFMS_GetAudioProperties 返回的样本格式,解码的数据有两种可能是平面的或交错的。在我的例子中,样本格式总是平面的,这意味着解码的数据将在两个独立的数据平面数据[0]和数据[1]中。这就是 libav/ffmpeg 和 portaudio 所解释的,它们认为平面数据位于两个单独的数据平面中。

但是 FFMS_GetAudio 只从用户那里获取单个缓冲区。所以我可以假设平面数据 data[0] = buf, data[1] = buf + offset,其中 offset 是 FFMS_GetAudio 返回的缓冲区长度的一半。

FFMS 没有为这种解释提供任何好的文件。如果有人能提供更多有关这方面的信息,那将是很大的帮助。