问题标签 [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.
video - 在不重新编码的情况下将帧从 mp4 文件复制到 mp4 时,什么会改变 fps?
我尝试将视频从 in.mp4 复制到 out.mp4 而不重新编码。我在这里使用pogorskiy 建议的代码示例。复制过程成功,但视频播放速度非常快。我用MediaInfo检查了这两个文件的 fps 。“in.mp4”的 fps 是 25 fps,“out.mp4” 是533fps。我不明白如果我从构造将 fps 更改为 533 是什么?outStream
inStream
我希望我正确地解释了自己。
audio - 将较大的音频文件编码为 .mpg 时,av_write_frame 失败
我正在将实时渲染的视频数据和现有的 .wav 文件编码为 mpg 文件。
为此,我首先编写所有音频帧,然后是来自渲染引擎的视频帧。对于较小的 .wav 文件(< 25 秒),一切正常。但是,一旦我使用更长的 .wav 文件,av_write_frame(在写入音频帧时)在写入大约 100 帧后就会返回 -1。它永远不是失败的同一帧,也永远不是最后一帧。我测试过的任何播放器都可以完美播放所有测试文件。
我正在关注复用示例(或多或少)。
这是我编写音频帧的函数:
所以“写入音频帧时出错。结果:-1”是我在一些帧之后总是得到的。
这是我的 get_audio_frame 函数:
最后,这是我编写所有音频帧的循环(不要担心 .wav 标头,我在该循环之前跳过了它):
如您所见,我正在输出数据包中的几乎所有内容并检查是否存在任何可能的错误。除了 av_write_frame 在我编码较长的音频文件一段时间后失败之外,一切似乎都很好。我正在跟踪的所有数据包值对于所有帧都是 100% 相同的(显然,数据指针除外)。此外,如前所述,对于较短的 fp_sound_input 文件,相同的过程可以完美地工作。avcodec_encode_audio2() 和 avcodec_fill_audio_frame() 也永远不会失败。
我用于编码的编解码器是 CODEC_ID_MPEG2VIDEO(视频)和 CODEC_ID_MP2(音频)。.wav 文件保存在 PCM 16 LE 中(都使用完全相同的编码)。
这里有什么问题?
visual-c++ - 使用 libavcodec 编码视频帧
我是视频编码的新手,我有一个简单的任务要为我自己的项目做。
基本上,我在内存中有一定数量的原始 RGB 帧,它们可以通过指针轻松访问。我想使用 libavcoded 对它们进行编码。初始化很好,但我真的不明白我应该如何将这些帧信息提供给编解码器。我应该使用 avpicture_fill 函数吗?您能否对我有所了解,最好举一些例子。我正在使用 MSVC++ 环境。
非常感谢。
ffmpeg - 像 CODEC_FLAG2_BPYRAMID 这样的 ffmpeg 标志在哪里?
我正在开发将 VS2010 与 ffmpeg 一起使用,并尝试了此处的代码。但是VS说它找不到
CODEC_FLAG2_BPYRAMID+CODEC_FLAG2_MIXED_REFS+CODEC_FLAG2_WPRED+CODEC_FLAG2_8X8DCT+CODEC_FLAG2_FASTPSKIP; // flags2=+bpyramid+mixed_refs+wpred+dct8x8+fastpskip
X264_PART_I8X8+X264_PART_I4X4+X264_PART_P8X8+X264_PART_B8X8
avCodecContext.crf
它们位于哪里?
c++ - 在 mp4 容器中保存视频时 FPS 太高
当我从 avi 文件解码帧然后在 x264 中解码它们并保存到 mp4 文件时,输出文件的 fps 始终为 12,800。因此文件播放速度非常快。但是,当我将编码的 h264 帧保存为 avi 格式而不是 mp4 时,fps 就是我想要的 - 25。
可能是什么问题呢?
这是我在VS2010中编写的代码:
ffmpeg - libavcodec 如何解码音频帧?
这是我使用 ffmpeg 的 libav* 解码音频流的过程
[videofile]-->(读取音频包)--> [pkts queue]-->(解码器)-->扬声器的样本缓冲区
出于某种原因,我需要在解码器之后插入一个缓冲区
[videofile]--> (读取音频包)--> [pkts queue] --> (decoder)--> [samples buffer] --> 说话者的样本缓冲区
中的音频样本samples buffer
是 LPCM 16 位。为了保存音频的 pts,sample buffer
我保存了第一个样本的 pts。通过这种方式,我可以计算缓冲区中任何样本的 pts。
问题是只有当音频流包含连续的音频样本时计算才是正确的。ffmpeg 的解码音频帧是否总是包含连续的样本?
c++ - 如何使用 avcodec 从 OpenCV::Mat 类型的 jpeg 图像创建视频?
我有彩色 jpegOpenCV::Mat
类型的图像,并使用avcodec
. 我得到的视频是颠倒的,黑白的,每一帧的每一行都移动了,我得到了对角线。这种输出的原因可能是什么?按照此链接观看我使用 avcodec 获得的视频。我正在使用acpicture_fill
函数avFrame
从cv::Mat
框架创建!
PS 每个 cv::Mat cvFrame 的宽度 = 810,高度 = 610,步长 = 2432 我注意到 avFrame(由 acpicture_fill 填充)linesize[0]=2430
我尝试手动设置avFrame->linesizep0]=2432
而不是 2430,但它仍然没有帮助。
======== 代码 ========================================== =================
更新
正如@Alex 建议的那样,我用下面的代码更改了第 1-4 行
我现在得到的视频(这里)几乎是完美的。它不是颠倒的,不是黑白的,但似乎缺少一个 RGB 组件。每个棕色/红色都变成蓝色(在原始图像中应该是相反的)。可能是什么问题呢?rescaling( sws_scale
) to AV_PIX_FMT_YUV420P
format 会导致这种情况吗?
video - libavcodec 获取视频时长和帧率
我有一个视频编码,.3gp
h.264
我希望在 C 中获得它的帧速率和持续时间。这是我在打开文件并找到合适的编解码器后使用的代码:
这是输出:
从文档中,我了解到持续时间是“duration/time_base”,它给了我6594490 / 180000 = 36.6
. 我的视频文件的持续时间是6 seconds
,我不知道这个因素6
来自哪里。
此外,帧速率似乎完全关闭。
目前很难找到帮助,因为很多教程都使用了不推荐使用的方法,并且文档没有给出示例。
任何帮助,将不胜感激。
谢谢
编辑: 感谢下面的评论,我设法打印了以下内容
我还设法找到了一个帧的时间戳msec
:
这返回给我的东西大概是33fps
(我期望的30
)。但我不知道如何检索持续时间。文档说“流的持续时间,以AV_TIME_BASE
小数秒为单位”但是6594490 * 0.000006 = 39.5
- 正确的持续时间是6.3
秒)。确切的 fps 也是30
,但不确定如何从0.000006
上述30
数字中得到)
谢谢
ffmpeg - ffmpeg升级后解码器崩溃
最近我将 ffmpeg 从 0.9 升级到 1.0(在 Win7x64 和 iOS 上测试),现在是avcodec_decode_video2
seagfaults。长话短说:每次视频尺寸发生变化时都会发生崩溃(例如,从 320x240 变为 160x120,反之亦然)。
我从一些专有来源接收 mpeg4 视频流并像这样解码它:
同样,在我升级到 1.0 之前,上述所有操作都完美无缺。现在每次框架尺寸发生变化时 -avcodec_decode_video2
崩溃。请注意,我没有在 AVCodecContext 中分配宽度/高度 - 无论是在开始时,还是在流更改时 - 这可能是原因吗?
我会很感激任何想法!
更新:设置 ctx_.width 和 ctx_.height 没有帮助。
Update2:就在崩溃之前,我收到以下日志消息:
mpeg4,第 24 级:“找到 2 个未释放的缓冲区!”。级别 8:“断言 i < avci->buffer_count 在 libavcodec/utils.c:603 失败”
Update3升级到 1.1.2 修复了这个崩溃。解码器能够再次处理动态的尺寸变化。
php - 如何使用 avconv 将图像转换为视频
我想从我使用以下代码的图像创建视频
但是当我尝试播放输出视频时,它显示流不包含数据