问题标签 [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.
c++ - 在 C/C++ 中将 libavcodec 与 linux 一起使用时出错
问题: AVFormatContext::nb_streams 价值太小。我的 C++ 代码(错误处理、包含等省略以减少列表):
跑步:
但是“avplay”程序运行良好。
libavcodec - 使用 libavcodec 的 mpeg1 编码性能低下
我正在使用 mpeg1 编解码器来创建我的高清和标清内容的代理视频。Mpeg1 分辨率和比特率是;高清视频代理:704x576 4.5 Mbit 标清视频代理:352x288 1.5 Mbit
我的视频参数是这样的;如何获得更多性能来更改任何参数...
此致,
encoding - ffmpeg API h264 编码的视频不能在所有平台上播放
编辑:在以前的版本中,我使用了一个非常古老的 ffmpeg API。我现在使用最新的库。问题只是略有变化,从“主要”变为“高”。
我正在使用 ffmpeg C API 在 C++ 中创建 mp4 视频。
我希望生成的视频具有“约束基线”配置文件,以便生成的视频可以在尽可能多的平台上播放,尤其是移动设备,但我每次都得到“高”配置文件,即使我对编解码器进行了硬编码profile 为FF_PROFILE_H264_CONSTRAINED_BASELINE。因此,该视频无法在我们所有的测试平台上播放。
这就是“ffprobe video.mp4 -show_streams”讲述我的视频流的内容:
这是我用来添加视频流的功能。来自 ptr-> 的所有值都是从外部定义的,这些值是否必须是特定值才能获得正确的配置文件?:
附加信息:
作为参考视频,我使用 Mozilla 提供的 gizmo.mp4 作为在每个平台/浏览器上播放的示例。它绝对具有“受约束的基线”配置文件,并且绝对适用于我们所有的测试智能手机。你可以在这里下载。我们自己制作的视频并不适用于所有平台,我相信这是因为个人资料。
在创建 mp4 之后,我还使用qt-faststart.exe将标题移动到文件的开头,因为这不能直接在 C++ 中以一种好的方式完成。这可能是问题吗?
显然,我做错了什么,但我不知道它可能是什么。我会感谢每一个提示;)
encoding - sws_scale 在较小的 x264 mp4 编码中搞砸了最后一个像素行
我正在将 PIX_FMT_ARGB 格式的图片混合到 mp4 视频中。
一切都很好,除了输出图像的最后一个像素行被搞砸了,在大多数情况下最后一行是完全黑色的,有时还有其他颜色,它似乎在某种程度上取决于它运行的机器。
我绝对确定错误必须在 sws_scale 中,因为我在缩放之前和之后保存图像。输入图像没有错误,但是在 sws_scale() 之后我保存了 yuv 图像并且错误很明显。
这是一个例子:
原来的
Yuvfile(在 sws_scale 之后)
在 Yuvfile 的底部,您将看到黑色行。
这就是我进行缩放的方式(在官方 ffmpeg 示例之后,或多或少):
我还尝试了许多不同的 SWS_ 标志,但都产生了相同的结果。
这可能是 sws_scale 中的错误还是我做错了什么?我正在使用最新版本的 ffmpeg 库。
ffmpeg - 使用 ffmpeg 库提取文本字幕
我正在编写一个使用 ffmpeg 的 libav* 库的 C 程序,并使用Dranger 的教程,我可以正确解码音频和视频。目前,我正在尝试提取字幕。我实际上并不想按时解码它们并在视频上显示它们,而是实际上将字幕文本从容器中提取出来。
例如,在 cli 上,
会把屁股文件还给我。(出于某种原因, srts 只返回文本。)
我试过弄乱 AVSubtitle、avcodec_decode_subtitle2 等,但他们逐行返回字幕。我想要 srts 中的时间码、ass 中的标头信息等。我想要的是混合到容器中的整个字幕文本文件。
android - 使用 FFMPEG 从视频中更快地提取缩略图/图像?
我正在使用此命令从视频中提取一系列图像,以将它们表示为视频的视觉时间范围。
ffmpeg -i inputfile.mp4 -r 1 -t 12 image-%d.jpeg
我的大部分视频都是 mp4 格式。我能够成功提取图像,但提取时间太长。
有什么办法可以减少图像提取的时间吗?
编辑:我需要 60 秒才能从以 MP4 格式编码的 15 秒长视频中获取 8 个缩略图,我正在我的Galaxy Nexus(Android 手机)上执行此操作有什么方法可以提高操作速度,理想情况下我想要它小于~10secs。
libavcodec - sws_scale 的替代方案
我正在使用 libavcodec 使用 x264 对捕获的 Windows 屏幕进行编码。由于输入是 RGB,我将其转换为 YUV 以使其与 x264 兼容。我正在使用 sws_scale 函数。我的问题是这个功能是否有任何替代品,因为在我的情况下我不需要进行任何缩放。此外,如果有人可以阐明此功能的工作流程,那将很有用。
PS:我假设 x264 仅在 YUV 颜色空间中运行。如果这个假设不正确,请同样通知我。
提前致谢。
ffmpeg - 如何获取 DVD 中的标题和章节信息?
我发现了很多关于使用 ffmpeg 创建 DVD 菜单的问题,但我没有找到任何关于以编程方式访问 DVD 结构信息的问题。当我使用 libav(或 FFmpeg)库时,我可以打开 DVD 映像(iso 文件)并访问视频、音频和字幕流。但我找不到任何 API。
我可以使用 VLC 播放器(以及 libvlc 库)播放视频并找到信息。但我需要以编程方式对音频和字幕流进行一些处理。我不想使用 SmartRipper 之类的工具拆分 VOB,然后才进行处理。
libav(ffmpeg) 是否包含任何用于处理 DVD 菜单的 API?如果不是,您能否推荐任何其他可用于以一帧(样本,AVPacket)精度获取有关标题(章节)开始和结束时间的信息的库?
我听说过 libdvdnav 库,但我不知道它是否适合我。我是 libav 和 DVD 格式内部的新手。
x264 - 加速 x264 编码(使用 libavcodec 的 C++ 代码)
我正在尝试捕获 Windows 屏幕(连续屏幕截图)并将它们编码为 x264。为此,我正在使用 libavcodec 提供的 avcodec_encode_video2 函数。但是,这需要大量时间。编码单个帧的时间在 25 – 1800 毫秒之间波动。
我尝试了在屏幕上录制视频的 1080p 和 720p。
这些是我正在使用的设置。这是在具有 4 GB RAM 的 Windows 7、win32 版本构建上测试的。
bit_rate = 2000, width = 1920, height = 1080 qmin = 0, qmax = 0, max_b_frames = 0, frame_rate = 25, pixel_format = YUV 4:4:4。其余设置是默认设置,使用 avcodec_get_context_defaults3() 获取。
一组 250 帧中 20 帧(连续且随机选择)的样本数据(以毫秒为单位)。{ 121, 106, 289, 126, 211, 30, 181, 58, 213, 34, 245, 50, 56, 364, 247, 171, 254, 83, 82, 229 }
对于应用程序,它必须至少以 15 fps 的速度捕获。有人可以帮忙判断是否可以使用任何选项来提高帧速率。我需要无损编码,但我愿意增加一些文件大小。
提前致谢。