GStreamer导出MP3文件时长无法被播放器正常识别问题求助
修复GStreamer转MP3后的时长错误问题
你的问题核心是MP3文件的时长元数据未正确写入,导致播放器计算时长出错。-e参数仅保证管线正常收尾,无法解决元数据层面的问题,试试下面几个方案:
方案1:改用恒定比特率(CBR)编码
VBR模式下播放器依赖文件末尾的XING头计算时长,但流式输入时GStreamer无法提前获取总时长,导致头信息缺失。改用CBR后,播放器可通过文件大小和比特率直接算出时长,无需依赖头信息:
gst-launch-1.0 -e souphttpsrc location="$(yt-dlp --format "worst[ext=mp4]" --get-url some_url)" ! decodebin ! audioconvert ! lamemp3enc cbr=true bitrate=128 ! filesink location=./test.mp3
bitrate参数可按需调整,比如192、256等。
方案2:添加ID3v2标签复用器
通过id3v2mux把解码得到的时长信息写入ID3v2标签,让播放器直接读取标签内的时长数据:
gst-launch-1.0 -e souphttpsrc location="$(yt-dlp --format "worst[ext=mp4]" --get-url some_url)" ! decodebin ! audioconvert ! lamemp3enc ! id3v2mux ! filesink location=./test.mp3
方案3:先下载本地再转码
流式输入时GStreamer无法提前获取完整媒体的时长,先把视频下载到本地再处理,lamemp3enc就能正确生成VBR头:
# 先下载视频 yt-dlp --format "worst[ext=mp4]" -o temp.mp4 some_url # 再转码成MP3 gst-launch-1.0 -e filesrc location=temp.mp4 ! decodebin ! audioconvert ! lamemp3enc ! filesink location=./test.mp3
内容的提问来源于stack exchange,提问作者Add MeFast
相关产品推荐
相关产品推荐

