You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg技术问询:将带双字幕流的H.264 MKV转码为H.265 MKV并保留双字幕流的方法

FFmpeg技术问询:将带双字幕流的H.264 MKV转码为H.265 MKV并保留双字幕流的方法

嘿,我来帮你搞定这个问题!

首先,你碰到的Subtitle encoding currently only possible from text to text or bitmap to bitmap错误,原因很清晰:你的字幕大概率是位图类型的字幕(比如蓝光里常见的PGS字幕),FFmpeg没办法直接对这类字幕做编码转换,只能原样复制它们的流——而你之前的命令没指定字幕的处理规则,FFmpeg默认会尝试编码,这就触发了错误。

另外,默认设置下“烧字幕”的情况,其实不是FFmpeg主动硬编码的,多半是你的输入文件里第一个字幕流被标记成了默认字幕,或者FFmpeg自动选择它做了硬字幕处理,但只要我们明确指定字幕流的处理方式,就能避免这个问题。

给你调整后的正确命令:

ffmpeg -i "xxx.mkv" -map 0:v -map 0:a? -map 0:s? -c:v hevc_nvenc -crf 26 -preset medium -rc vbr_hq -c:a aac -b:a 384k -c:s copy "output.mkv"

我拆解下关键修改点:

  • -map 0:v:明确指定要处理输入文件的视频流,避免FFmpeg自动选择时出岔子
  • -c:s copy:这是核心!告诉FFmpeg直接复制所有字幕流,不做任何编码转换,完美解决那个字幕错误
  • 其他参数保持你原来的视频(CUDA加速的H.265)、音频设置不变,完全满足你的转码需求

如果你想给字幕设置默认播放优先级(比如让第一个字幕默认加载),还可以再加个参数优化:

ffmpeg -i "xxx.mkv" -map 0:v -map 0:a? -map 0:s? -c:v hevc_nvenc -crf 26 -preset medium -rc vbr_hq -c:a aac -b:a 384k -c:s copy -disposition:s:0 default -disposition:s:1 none "output.mkv"

这个命令会把第一个字幕设为默认流,第二个设为非默认,播放器会自动优先加载第一个,同时两个字幕流都完整保留,不会被硬编码到视频里。

备注:内容来源于stack exchange,提问作者ShkYo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 09:04:33