我目前正在编写一个小脚本,可以动态地将MP4转换为Opus音频并将其发送到golang中的Discord。最初我的脚本会在通过stdin下载到ffmpeg时传递MP4,然后将stdout传递给Opus编码器,然后传递给Discord(与this完全相同)。在学习了我可以用Opus构建ffmpeg之后,我想删掉我以前的opus编码器并将ffmpeg的输出直接传递给Discord。
上一页,我的ffmpeg命令看起来像这样(使用第二个opus编码器)
ffmpeg -i - -f s16le -ar 48000 -ac 2 pipe:1
现在,没有编码器,让ffmpeg完成所有工作,这就是我到目前为止所提出的。
ffmpeg -i - -f s16le -ar 48000 -ac 2 -acodec libopus -b:a 192k -vbr on -compression_level 10 pipe:1
然而,使用此命令,Discord的服务器不接受音频,这意味着我怀疑opus音频不会从另一端出来。没有错误输出。我是否对ffmpeg做了一些可能导致此问题的错误?
答案 0 :(得分:2)
尝试
ffmpeg -i - -sample_fmt s16 -ar 48000 -ac 2 -acodec libopus -b:a 192k -vbr on -compression_level 10 -f opus pipe:1
您不能使用-f s16le
,因为它指定了未压缩的输出格式(特定样本类型),而您需要某个编解码器的压缩数据流。相反,您可以使用sample_fmt
和-f opus