Python调用ffmpeg转ogg为wav时如何添加pcm_s16le编解码器标签0x0001
问题原因
你当前代码中指定输出格式为s16le,这是无封装的原始PCM裸流,本身不存在容器头结构,自然不会携带WAV格式对应的编解码器标签。而直接执行ffmpeg -i sample.ogg sample.wav时,ffmpeg会自动使用wav容器封装输出内容,写入的标准WAV头中就包含你看到的([1][0][0][0] / 0x0001)编解码器标识。
修改方案
只需要将输出格式从s16le改为wav即可,修改后代码如下:
import subprocess import ffmpeg args = ( ffmpeg .input('pipe:') .output('pipe:', format='wav', acodec='pcm_s16le') .get_args() ) # 新增stderr配置避免ffmpeg日志输出干扰结果 p = subprocess.Popen(['ffmpeg'] + args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) wav = p.communicate(input=bindata)[0]
修改后输出的就是带完整WAV头的标准字节流,元数据中会正常显示对应的编解码器标签,全程也不会写入硬盘文件。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

