You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FFmpeg生成DASH多码率流时映射错误问题求助

FFmpeg生成DASH多码率流时映射错误问题求助

嘿,我来帮你拆解这个问题哈!

首先纠正一下你的猜测:这个错误和音频流完全没关系,核心问题出在视频流的映射逻辑上。

看报错信息里的关键提示:

Stream map 'v:1' matches no streams.

意思是你命令里写的-map v:1,试图调用输入文件的第二个视频流,但你的输入文件/2160.mp4里只有1个视频流(默认标识是v:0),FFmpeg找不到对应的流,自然就报错了。

你想要生成多码率的DASH流,正确的思路应该是基于同一个输入视频流,编码出多个不同分辨率的输出流,而不是去映射不存在的输入流。下面是修正后的完整命令:

ffmpeg -i /2160.mp4 \
       -c:a libopus -b:a 128k -ar 48000 \
       # 第一个视频流:144p分辨率
       -c:v:0 libvpx-vp9 -pix_fmt yuv420p -g 240 -vf "scale=-2:144" \
       # 第二个视频流:240p分辨率
       -c:v:1 libvpx-vp9 -pix_fmt yuv420p -g 240 -vf "scale=-2:240" \
       -map 0:v -map 0:a \
       -init_seg_name "init-\$RepresentationID\$.\$ext\$" \
       -media_seg_name "chunk-\$RepresentationID\$-\$Number%05d\$.\$ext\$" \
       -dash_segment_type webm \
       -use_template 1 -use_timeline 1 -seg_duration 10 \
       -adaptation_sets "id=0,streams=v id=1,streams=a" \
       -f dash /x6/dash.mpd

关键调整点:

  • 去掉了错误的-map v:1,改用-map 0:v将输入的唯一视频流映射到所有输出视频轨道
  • 为每个输出视频轨道(v:0v:1)分别指定编码参数和分辨率滤镜,让FFmpeg基于同一个输入流生成两个不同规格的视频流

另外给你个小建议:以后遇到流映射相关的问题,可以先跑ffmpeg -i /2160.mp4查看输入文件的流详情,确认视频、音频流的数量和标识,避免这类低级错误~

备注:内容来源于stack exchange,提问作者Дмитрий

火山引擎 最新活动