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

如何使用编译支持NVIDIA GPU的FFmpeg将MKV转为HLS多码率流

问题根因
  • 解码参数位置错误:h264_cuvid是输入文件的解码器参数,必须放在-i input.mkv之前,你写在输入参数后会被识别为输出编码器参数,和后续的h264_nvenc编码器参数冲突
  • 滤镜未绑定输出流索引:全局-vf参数会被最后定义的缩放规则覆盖,需要像CPU参考命令一样,用-filter:v:0、-filter:v:1分别为不同输出流指定滤镜链
  • 冗余重复参数:重复定义了hls_time,会导致最后定义的数值覆盖前面的设置
修正后的命令
ffmpeg -c:v h264_cuvid -i input.mkv \
  -y -vsync 0 -c:v h264_nvenc -c:a copy \
  -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 \
  -filter:v:0 fade,hwupload_cuda,scale_npp=854:358 -b:v:0 1M -b:a:0 128k \
  -filter:v:1 fade,hwupload_cuda,scale_npp=1280:536 -b:v:1 3M -b:a:1 192k \
  -var_stream_map "v:0,a:0,name:480p v:1,a:1,name:720p" \
  -hls_time 3 -hls_list_size 0 -hls_flags independent_segments \
  -f hls -hls_playlist_type event -master_pl_name "master-pl.m3u8" output-%v.m3u8
关键改动说明
  1. 把解码器参数-c:v h264_cuvid移到了输入文件参数前,明确指定输入用NVIDIA硬件解码
  2. 把两个-map参数合并到同一行,明确声明需要输出2路视频+2路音频流
  3. 把原来的全局-vf替换为按流索引匹配的-filter:v:0、-filter:v:1,确保每路视频流使用对应的缩放规则
  4. 删掉了重复的hls_time 10参数,统一使用3秒分片配置

如果你的输入MKV是HEVC编码,把开头的h264_cuvid替换为hevc_cuvid即可。

内容的提问来源于stack exchange,提问作者Madiyor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:27:00