使用VAAPI硬件加速为定格动画视频烧录字幕失败求助
解决VAAPI硬件加速下ASS字幕滤镜的FFmpeg错误
看起来你踩了VAAPI硬件加速和ASS字幕滤镜兼容的坑——核心问题是ASS滤镜目前没办法直接处理VAAPI显存里的硬件帧,你原来的滤镜链试图全程在显存内完成所有操作,这就导致了hwmap滤镜抛出格式不支持的错误。
修正后的命令
直接替换你的滤镜链部分,调整后的完整命令如下:
ffmpeg \ -y \ -hwaccel vaapi \ -hwaccel_device /dev/dri/renderD128 \ -hwaccel_output_format vaapi \ -f concat \ -i input.txt \ -vf 'hwmap=mode=read+write+direct,format=nv12,hwdownload,format=yuv420p,ass=subtitles.ass,hwupload,format=nv12,hwmap' \ -c:v h264_vaapi \ ~/amianthe.mp4
为什么这么改?
我给你拆解下关键的调整点:
hwdownload,format=yuv420p:把VAAPI显存里的硬件帧下载到CPU内存,转换成ASS滤镜能识别处理的软件格式(yuv420p是通用的软件帧格式)- 先跑
ass=subtitles.ass:字幕渲染必须在CPU里完成,因为ASS滤镜还不支持硬件加速的帧输入 hwupload,format=nv12:把加完字幕的软件帧重新上传回VAAPI显存,转成编码需要的nv12格式- 最后的
hwmap保证编码环节能直接调用显存里的帧,不浪费硬件加速的优势
额外的小建议
- 考虑升级FFmpeg到5.x或更高版本:你当前用的4.1.4是2019年的旧版本,新版对VAAPI的兼容性和功能支持都提升了不少,说不定能简化滤镜链
- 如果字幕特效不复杂,也可以先把字幕批量加到每张图片里(用FFmpeg单独处理每张图),再用concat合并,这样全程都能保持纯硬件加速,但操作会稍微繁琐一点
内容的提问来源于stack exchange,提问作者Belinde
相关产品推荐
相关产品推荐

