Encoding (FFmpeg)从给定的官方FFmpeg示例将VP9 Vaapi编码为.mp4或.webm容器
我正在尝试实现vp9硬件加速编码过程。我遵循了ffmpeg Official github的示例() 但给出的示例仅将.yuv文件保存到.h264文件,我希望将帧保存到.mp4或.webm容器中。具有质量控制能力等 我不是从文件中读取帧,而是从实时提要中收集帧。当从live feed获得完整的5秒帧时,使用vp9_vaapi将这些帧编码为5秒.mp4文件 我可以将live feed中的所有5秒帧保存到.mp4或.webm文件中,但无法正确播放(更准确地说:继续加载,然后打开) 官方网站示例的结果如下: cpu编码的vp9.mp4文件结果: 编辑: 结果Encoding (FFmpeg)从给定的官方FFmpeg示例将VP9 Vaapi编码为.mp4或.webm容器,encoding,ffmpeg,mp4,hardware-acceleration,vaapi,Encoding,Ffmpeg,Mp4,Hardware Acceleration,Vaapi,我正在尝试实现vp9硬件加速编码过程。我遵循了ffmpeg Official github的示例() 但给出的示例仅将.yuv文件保存到.h264文件,我希望将帧保存到.mp4或.webm容器中。具有质量控制能力等 我不是从文件中读取帧,而是从实时提要中收集帧。当从live feed获得完整的5秒帧时,使用vp9_vaapi将这些帧编码为5秒.mp4文件 我可以将live feed中的所有5秒帧保存到.mp4或.webm文件中,但无法正确播放(更准确地说:继续加载,然后打开) 官方网站示例的结果
您需要直接使用FFmpeg,如果在
vp9\u vaapi
编码器中启用B帧,您可以选择在同一命令行中添加和
示例:
ffmpeg-threads 4-vaapi_设备/dev/dri/render128\
-hwaccel vaapi-hwaccel_输出_格式vaapi\
-我http://server:port \
-c:v vp9_vaapi-全球质量50-高炉1\
-bsf:vp9_原始_重新排序,vp9_超帧\
-f段-段时间5-段格式选项movflags=+快速启动输出%03d.mp4
根据需要调整输入和输出路径/URL
此命令的作用:
它将通过创建5秒长的mp4段。
请参阅movflags=+faststart
的用法,以及如何通过上面的-segment\u format\u options
标志将其作为格式选项传递给底层mp4复用器
分段长度可能不精确为5秒,因为每个分段都从一个关键帧开始(切割)
但是,我不建议在该编码器中启用B帧,因为这些比特流过滤器具有其他不希望的效果,例如和。这在生产环境中是不可取的。这就是为什么下面的脚本没有启用该选项,相反,我们直接在编码器选项中定义一个设置速率控制模式
如果需要利用VAAPI的1:N编码,请使用以下代码段:
逐行扫描\u vaapi
过滤器:ffmpeg-logleveldebug-threads 4\
-初始化硬件设备vaapi=va:/dev/dri/render128-hwaccel vaapi\
-hwaccel_设备va-过滤器_hw_设备va\
-hwaccel_输出_格式vaapi\
-我http://server:port' \
-过滤复合物“[0:v]去隔行,分离=3[n0][n1][n2]\
[n0]标度=1152:648[v0]\
[n1]比例尺=848:480[v1];
[n2]比例_vaapi=640:360[v2]”\
-b:v:0 2250k-最大速率:v:0 2250k-尺寸:v:0 360k-c:v:0 vp9_vaapi-g:v:0 50-r:v:0 25-rc_模式:v:0 2\
-b:v:11750K-最大速率:v:11750K-尺寸:v:1280K-c:v:1VP9_vaapi-g:v:150R:v:125RC_模式:v:12\
-b:v:2 1000k-最大速率:v:2 1000k-尺寸:v:2 160k-c:v:2 vp9_vaapi-g:v:2 50-r:v:2 25-rc_模式:v:2 2 2\
-c:a aac-b:a 128k-ar 48000-ac 2\
-标志-全局标题-f T形三通-使用fifo 1\
-映射“[v0]”-映射“[v1]”-映射“[v2]”-映射0:a\
“[select=\'v:0,a\':f=段:段\时间=5:段\格式\选项=movflags=+faststart]$output\路径0/输出%03d.mp4”\
[选择=\'v:1,a\':f=段:段\u时间=5:段\u格式\u选项=movflags=+faststart]$output\u path1/output%03d.mp4 |\
[选择=\'v:2,a\':f=段:段\u时间=5:段\u格式\u选项=movflags=+faststart]$output\u路径2/输出%03d.mp4”
ffmpeg-logleveldebug-threads 4\
-初始化硬件设备vaapi=va:/dev/dri/render128-hwaccel vaapi\
-hwaccel_设备va-过滤器hw_设备va-hwaccel_输出格式vaapi\
-我http://server:port' \
-过滤复合物“[0:v]分裂=3[n0][n1][n2]\
[n0]标度=1152:648[v0]\
[n1]比例尺=848:480[v1];
[n2]比例_vaapi=640:360[v2]”\
-b:v:0 2250k-最大速率:v:0 2250k-尺寸:v:0 2250k-c:v:0 vp9_vaapi-g:v:0 50-r:v:0 25-rc_模式:v:0 2\
-b:v:11750K-最大速率:v:11750K-尺寸:v:11750K-c:v:1VP9_vaapi-g:v:150R:v:125RC_模式:v:12\
-b:v:2 1000k-最大速率:v:2 1000k-尺寸:v:2 1000k-c:v:2 vp9_vaapi-g:v:2 50-r:v:2 25-rc_模式:v:2 2\
-c:a aac-b:a 128k-ar 48000-ac 2\
-标志-全局标题-f T形三通-使用fifo 1\
-映射“[v0]”-映射“[v1]”-映射“[v2]”-映射0:a\
“[select=\'v:0,a\':f=段:段\时间=5:段\格式\选项=movflags=+faststart]$output\路径0/输出%03d.mp4”\
[选择=\'v:1,a\':f=段:段\u时间=5:段\u格式\u选项=movflags=+faststart]$output\u path1/output%03d.mp4 |\
[选择=\'v:2,a\':f=段:段\u时间=5:段\u格式\u选项=movflags=+faststart]$output\u路径2/输出%03d.mp4”
VP9QSV
编码器包装器,但存在以下已知限制(目前):
(a) 。您必须启用low_power mode
,因为iHD
驱动程序目前只显示VDENC解码路径
(b) 。MSDK不支持编码选项1和额外数据
(c) 。默认情况下,IVF头将插入MSDK中,但FFmpeg不需要该头,并且在默认情况下保持禁用状态
请参见以下示例:
vpp\u qsv
过滤器:ffmpeg-nosdin-y-fflags+genpts\
-初始化硬件设备vaapi=va:/dev/dri/render128,驱动程序=iHD\
-过滤器硬件设备va-hwaccel vaapi-hwaccel输出格式vaapi
-线程4-vsync 1-异步1\
-我http://server:port' \
-过滤复杂“[0:v]hwmap=deriver\u device=qsv,format=qsv,vpp\u qsv=deinterlace=2:async\u depth=4,拆分[n0][n1][n2]\
[n0]vpp_qsv=w=1152:h=648:async_depth=4[v0]\
[n1]vpp_qsv=w=848:h=480:async_depth=4[v1];
[n2]vpp_qsv=w=640:h=36