使用FFmpeg生成VOD Web-Dash清单时VP9/VP8编码报错的问题求助
解决FFmpeg生成WebM DASH清单时的错误
咱们一步步拆解你遇到的问题,从日志和命令里能找到几个核心问题:
1. 核心错误来源:命令参数语法错误
你在命令行测试时犯了一个关键错误——把输出文件路径my_manifest.mpd写到了-adaptation_sets的引号参数里,这导致FFmpeg完全没识别到输出文件,所以日志最后才会提示:
At least one output file must be specified
同时,-adaptation_sets的格式也有问题:参数里的逗号后不能加空格,多个adaptation set之间要用分号;分隔,而不是空格。
2. VP9视频流的像素格式未被正确探测
日志里反复出现:
Could not find codec parameters for stream 0 (Video: vp9, none(tv, bt709, progressive), 854x480): unspecified pixel format
这说明FFmpeg读取输入WebM文件时,没能获取到VP9视频的像素格式信息。原因可能是你的输入文件元数据缺失,或者FFmpeg默认的探测数据量不够。
修正后的解决方案
第一步:修正FFmpeg命令语法
先给你正确的命令行版本,你可以先在终端测试:
ffmpeg -analyzeduration 100M -probesize 100M -f webm_dash_manifest -i 480p.webm -f webm_dash_manifest -i 720p.webm -f webm_dash_manifest -i audio.webm -c copy -map 0 -map 1 -map 2 -adaptation_sets "id=0,streams=0,1;id=1,streams=2" -f webm_dash_manifest my_manifest.mpd
第二步:对应修正Python调用代码
把参数调整成正确的格式,同时加上探测参数:
subprocess.call([ FFMPEG_PATH, "-analyzeduration", "100M", # 增加探测时长,确保FFmpeg能读取足够元数据 "-probesize", "100M", # 增加探测数据量 "-f", "webm_dash_manifest", "-i", 480p_path, "-f", "webm_dash_manifest", "-i", 720p_path, "-f", "webm_dash_manifest", "-i", audio_path, "-c", "copy", "-map", "0", "-map", "1", "-map", "2", "-adaptation_sets", "id=0,streams=0,1;id=1,streams=2", # 修正格式,用分号分隔不同适配集 "-f", "webm_dash_manifest", dash_path # 输出路径单独放在命令最后,不要嵌套在其他参数里 ])
第三步:从根源避免问题(可选)
如果后续重新编码VP9视频,建议明确指定像素格式,这样生成的WebM文件会自带完整的元数据,就不用再调整探测参数了:
# 编码480p VP9视频时加上-pix_fmt yuv420p ffmpeg -i input.mp4 -c:v libvpx-vp9 -pix_fmt yuv420p -s 854x480 480p.webm
这些调整应该能解决你遇到的Operation not permitted和参数错误问题,先试试命令行版本确认可行,再替换到Python代码里。
内容的提问来源于stack exchange,提问作者Danny
相关产品推荐
相关产品推荐

