问题标签 [x264]
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 - 编译ffmpeg:如何强制它链接到特定的libx264?
我正在尝试编译最新版本的 ffmpeg(在 CentOS 5.3 中)。我首先下载了最新版本的 libx264,编译--enable-static
并安装在/usr/local/
. 但是,当我编译 ffmpeg 时,我收到以下错误消息:
在网上搜索,我发现如果 ffmpeg 正在选择旧版本的 libx264,我确实有(在 中/usr/lib
)并且无法卸载,因为其他软件依赖它,所以会发生这种情况。那么问题是:如何强制 ffmpeg 链接到我想要的 libx264?上一次我必须这样做(诚然是一年前)我也有 2 个版本的 libx264,我不记得必须做任何特别的事情。有没有我忘记的配置开关?
.net - 从 x264vfw 过滤器获取输出数据
我需要从 x264 编码器获取 H264 流并制作某种直播流媒体服务器。客户端将连接到服务器,然后通过 rtsp 接收视频。如何从 x264vfw 输出引脚获取数据?以什么方式更好地做到这一点?
video-encoding - 带有 mbtree 选项的 libx264 2 pass 编码,第一次通过失败
我正在开发一个使用 libx264 的应用程序。在进行 2 遍编码时,如果启用了 mbtree 选项,则第 1 遍似乎不会将任何内容放入 stats 文件中:
当我为第二遍执行 x264_encoder_open() 时,我收到失败消息:
所以它似乎在第一次通过时失败了。如果我关闭 mbtree,2pass 工作正常。只要关闭mbtree,我就可以使用预设或调整参数运行它。什么参数(见上面的列表)可能使 mbtree 在第一次通过时失败?
video-streaming - x264 速率控制
我们在视频会议项目中使用 x264 编码器,我们有基本的流视频工作,但是,我们无法理解各种速率控制设置如何确定最终比特率。我们设置以下参数:
如果我们只设置 params.rc.i_bitrate 参数,编码器似乎大大超过了比特率。如果我们设置 i_vbv_max_bitrate 和 i_vbv_buffer_size 参数,我们会看到一个比特率达到峰值(有时超过) i_vbv_max_bitrate 设置。显然,严格控制比特率对于视频会议很重要,但文档有点不透明。还有其他人使用 x264 进行视频会议吗?你是如何设置编码器的?任何帮助表示赞赏,在此先感谢。
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 的速度捕获。有人可以帮忙判断是否可以使用任何选项来提高帧速率。我需要无损编码,但我愿意增加一些文件大小。
提前致谢。
ffmpeg - 如何针对多个比特率输出文件优化 ffmpeg w/x264
目标是创建多个输出文件,这些输出文件仅在比特率上与单个源文件不同。记录在案的解决方案有效,但效率低下。我发现最有效的解决方案没有记录在我能看到的任何地方。我将其发布在这里以供审查,并询问其他人是否知道可以进行的其他优化。
每个比特率的视频质量很重要,因此我们在 2-Pass 模式下运行,预设为“中等”
VIDEO_OPTIONS_P2 = -vcodec libx264 -preset medium -profile:v main -g 72 -keyint_min 24 -vf scale=720:-1,crop=720:400
第一种方法是在并行过程中对它们进行编码
明显的低效率是源文件的读取、解码、缩放和裁剪对于每个进程都是相同的。我们怎样才能做到这一点,然后将结果提供给编码器?
希望是在单个 ffmpeg 命令中生成所有编码将优化重复步骤。
然而,编码时间几乎与之前的多进程方法相同。这使我相信所有步骤都再次重复执行。
为了强制 ffmpeg 只读取、解码和缩放一次,我将这些步骤放在一个 ffmpeg 进程中,并将结果通过管道传送到另一个执行编码的 ffmpeg 进程中。这将整体处理时间缩短了 15%-20%。
有没有人看到这样做的潜在问题,或者知道更好的方法?
ffmpeg - 如何对多个比特率输出文件使用 ffmpeg / x264 2-Pass 编码
在对多个输出文件执行 2-Pass 编码时,我收到了错误
我的设置是执行一次第一遍,然后进行多次第二遍编码,以使用相同的第一遍结果输出具有不同目标比特率的文件。
此序列导致上面列出的错误。我通过代码检查发现的是 ffmpeg/x264 为每个第二遍编码路径寻找一组不同的第一遍文件。第一个编码路径使用最初创建的文件集
第二个编码路径需要具有名称的第一遍文件
第三个编码路径需要名字以 ffmpeg2pass-4* 等开头的 first-pass 文件。
我的解决方案是在运行第二遍命令之前使用每次通过所需的新名称创建指向最初创建的文件集的软链接。
这似乎有效,因为它产生了我需要的输出编码。但是,我不知道这种方法是否合法。通过使用一个比特率(700k)的第一遍输出作为其他比特率的第二遍编码的输入,我是否获得了次优的编码结果?
opengl - 使用 opengl 和 x264 更快地编码实时 3D 图形
我正在开发一个系统,该系统将压缩视频从 3d 图形发送到客户端,这些图形在渲染后立即在服务器中完成。我已经让代码工作了,但我觉得它可能会更快(而且它已经是系统中的瓶颈)
这是我正在做的事情:
首先我抓住帧缓冲区
然后我翻转帧缓冲区,因为 swsScale(我用于色彩空间转换)有一个奇怪的错误,它在我转换时垂直翻转图像。我是提前翻的,没什么花哨的。
然后我将其转换为 YUV420p
然后我几乎只是调用 x264 编码器。我已经在使用 zerolatency 预设。
我的猜测是应该有一种更快的方法来做到这一点。捕获帧并将其转换为 YUV420p。最好在 GPU 中将其转换为 YUV420p,然后再将其复制到系统内存中,希望有一种无需翻转即可进行颜色转换的方法。
如果没有更好的方法,至少这个问题可以帮助尝试这样做的人,像我一样做。
video - 是否可以在 x264 中强制 I_PCM 模式?
对于使用 x264 压缩的视频中的某些 I 帧,我需要在所有块中使用 I_PCM 模式。我知道这些帧会占用大量空间,但要求它们尽可能忠实于源,并使它们的编码/解码速度非常快(I_PCM 应该是超快速且无损的)。有没有办法强制 x264 以编程方式执行此操作。我正在使用 libx264 来执行此操作,但我还没有找到在给定帧内指定自定义宏块类型的方法。如果不支持,那么修改库有多难,我应该先在哪里看?