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

如何用FFmpeg将MP4转带字幕的HLS?命令报错需指定输出文件

将MP4加字幕转HLS(m3u8)的FFmpeg命令错误修复

错误原因

你碰到的必须指定至少一个输出文件报错,核心问题是-var_stream_map参数写法错误——你把输出文件名stream_%v.m3u8直接拼在参数值后面,FFmpeg会把这部分当成参数的一部分,而非合法的输出文件路径,导致程序找不到输出目标。

另外你的命令还有几个冗余/冲突问题:

  • 重复指定-c:s webvtt,只需一次即可
  • 重复执行字幕流的-map指令,会导致字幕流被多次映射,引发混乱
  • 全局-c copy和后续的-c:v libx264、-c:a aac冲突,虽然后者会覆盖前者,但写法不够规范

修正后的命令

ffmpeg -i video.mp4 -i subtitle0.vtt -i subtitle1.vtt \
  -c:v libx264 -crf 22 -preset fast \
  -filter:v:0 scale=480:360 -maxrate:v:0 600k \
  -c:a aac -ar 48000 -b:a:0 500k \
  -c:s webvtt \
  -map 0:v -map 0:a -map 1 -map 2 \
  -metadata:s:s:0 language=heb -metadata:s:s:0 handler_name=Hebrew -metadata:s:s:0 title=Hebrew \
  -metadata:s:s:1 language=eng -metadata:s:s:1 handler_name=English -metadata:s:s:1 title=English \
  -var_stream_map "v:0,a:0" \
  -f hls -hls_time 3 -hls_flags independent_segments \
  -hls_segment_filename res/data%06d.ts \
  -hls_list_size 10 -threads 0 \
  -master_pl_name livestream.m3u8 \
  -y livestream-%v.m3u8

关键调整说明

  1. 修复-var_stream_map格式:用引号包裹参数值(避免空格干扰),输出文件名单独放在命令末尾,让FFmpeg正确识别输出目标
  2. 移除冗余指令:删掉重复的-c:s webvtt和重复的字幕-map操作
  3. 调整编码参数顺序:先指定视频、音频的编码参数,再处理字幕,避免全局复制和编码指令冲突
  4. 修正字幕流索引:字幕流索引从0开始(前面已映射视频、音频,后续两个字幕流分别对应s:s:0和s:s:1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:35:24