cvlc转码保存电台流时采样率异常降低且音质卡顿的问题排查求助
大家好,我现在遇到一个头疼的问题:我想在Ubuntu 20.04的无头服务器上,用cvlc转码并保存某电台的mpeg4audio流,最终输出mp3格式,要尽量接近原流的音质,但结果总是不对。
我目前用的命令是:
/usr/bin/cvlc --sout "#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100,scodec=none}:std{access=file,mux=mp3,dst=test/test-1-${DATE}.mp3}" https://evanov.leanstream.co/CIDCFM?args=web_01
运行后得到的输出如下:
VLC media player 3.0.9.2 Vetinari (revision 3.0.9.2-0-gd4c1aefe4d)
[000055baea0d4c30] main interface error: no suitable interface module
[000055bae9ff6290] main libvlc error: interface "globalhotkeys,none" initialization failed
[000055baea0d4c30] dummy interface: using the dummy interface module...
[00007fea54003740] dummy mux: Open
[00007fea543453e0] mpeg4audio demux packetizer: AAC channels: 1 samplerate: 22050
奇怪的是,我在Windows上用VLC GUI直接播放这个流时,看到的是2声道AAC、44100采样率,音质完全正常;但不管是用上面的cvlc命令转码,还是用VLC GUI的转换向导导出文件,得到的结果都是22050采样率,还伴随奇怪的音频卡顿。
后来我补充测试发现:Windows上用VLC的“录制”功能直接保存的mp4文件是正常的——音频编码是mp4a(MPEG AAC Audio),参数为44100Hz、32位采样,还带AAC SBR扩展;而用cvlc命令生成的mp3只有我指定的比特率,没有SBR扩展。我对比过两者的参数(左侧是无转码的原始录制文件,右侧是cvlc转码后的文件),差异很明显,推测问题和SBR有关。
目前我发现用下面的命令录制OGG文件是正常的,音质没问题,最坏情况我可以先录OGG再后期转码,但还是想解决实时转码成mp3的问题:
cvlc --sout "#standard{access=file,mux=ogg,dst=test2.ogg}" https://evanov.leanstream.co/CIDCFM
想请教大家:我的cvlc命令是不是哪里写错了?或者有没有其他合适的命令行工具,可以实现实时转存这个流为mp3、且音质接近原流的需求?
备注:内容来源于stack exchange,提问作者ComputerLocus

