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:0和v:1)分别指定编码参数和分辨率滤镜,让FFmpeg基于同一个输入流生成两个不同规格的视频流
另外给你个小建议:以后遇到流映射相关的问题,可以先跑ffmpeg -i /2160.mp4查看输入文件的流详情,确认视频、音频流的数量和标识,避免这类低级错误~
备注:内容来源于stack exchange,提问作者Дмитрий




