问题标签 [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.
ffmpeg - 如何使用 avconv 将 MP4 文件转换为 MPEG?
我有一些 MP4 格式的视频文件,我想将它们转换为 MPEG 格式的文件。
我尝试转换:
但我收到以下错误
我的命令中缺少什么?
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:这是我在“构建失败”后收到的消息:
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”的正确流索引。
c++ - 如何在 C++ 中使用 libav 设置 x264 基线配置文件
我正在编写一个小工具,它将视频转换为原始 h264 文件。这些文件稍后将由 SIP 电话播放。我有以下代码:
当我执行这个程序时,我从 libx264 得到以下输出:
为什么这仍然是主要配置文件,尽管我已将其明确设置为基线?
此外,如果有人可以添加一些注释,哪种 h264 设置对 SIP 电话有用,我会非常酷。非常感谢!
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));
ffmpeg - 如何使用 libav ffmpeg 从 h264 视频中获取 sps 结构
对于我的硬件解码器,我需要了解有关视频编解码器(如 h264)的其他编解码器规范?如何使用 libav ffmpeg 提取低级编解码器信息?
android - Ffmpeg-Build:构建期间出错
我正在构建 ffmpeg 并卡在一个不寻常的地方。在 libavutil 我们有 float_dsp.h 和 float_dsp.c 文件。在这些文件中,有一个方法声明,它是:
在构建和编译此文件时,我收到此错误并且不知道该怎么做。我认为问题出在其他地方,但又完全不知道。错误是
任何想要帮助的人都请向前迈出一步,因为我在几周内还没有真正得到 ffmpeg 的任何支持。
问候
ffmpeg - 可以在使用 libavcodec 解码期间裁剪帧大小吗?
我按照 Dranger 的教程使用 libav 和 FFMPEG 显示视频。http://dranger.com/ffmpeg/
avcodec_decode_video2 似乎是视频解码过程中最慢的部分。我偶尔会同时解码两个视频,但只并排显示每个视频的一半。换句话说,每个视频的一半将在屏幕外。为了加快解码速度,有没有办法只解码一帧的一部分?
ffmpeg - 如何使用 libavformat 连接 2 个具有相同编解码器的视频文件(重新混合)?
我已经从 CDN 下载了 flv 格式的视频(视频 H264 和音频 AAC),并将它们重新合成为 MP4 格式。但是视频受长度限制。所以我已经分几个部分下载了每个视频:从起点开始,在第 1 点,在第 2 点(通过在 url 中使用 seek 参数)。每个点的开始时间都比前一个点的结束时间早一点。
使用av_read_frame
i 扫描所有部分,发现相交的数据包不仅具有相同的大小和顺序,而且它们的 dts/pts 彼此偏移恒定值。因此,要将开始视频与从点 1 开始的视频连接起来,我必须执行以下操作:
1. 在输出文件中创建输出标头
2. 从开始视频中复制所有不相交的数据包。
3. 从点 1 开始的视频中复制所有不相交的数据包,并通过将其移动常量来更改 dts 值
如何使用 libav(不是 ffmpeg)来完成所有这些工作?我阅读了如何在不使用其他 libav 库的情况下使用 libavformat。但libav
它不起作用,因为没有avformat_alloc_output_context2
. libav
对于像我这样的新手来说,源avconv.c
代码太复杂了,无法隔离与流复制操作相关的部分。
有人可以给我举个例子:
- 打开input_file1和input_file2(仅当程序与通用教程中的标准不同时才需要)
- 打开并写入具有相同容器格式和相同视频和音频格式的output_file
标头
- 将数据包从input_file1写入output_file直到数据包,例如pos == XXX
- 将数据包从input_file2写入output_file,通过常量值更改它们的 dts(或任何需要)
- 写入正确trailer
计算我之前制作的 dts 中的时间偏移。
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 没有为这种解释提供任何好的文件。如果有人能提供更多有关这方面的信息,那将是很大的帮助。