1

尝试为 .dsf(DSD 音频)文件创建一个简单的命令行播放器,并输出到支持高达 24 位 192 kHz 采样率的 alsa 设备。以下命令几乎可以正常工作,并且可以播放曲目。检查下面的粗体文本,dsf 输入文件被转换为 24 位/192 kHz,但输出随后被截断为 16 位 192 kHz(pcm_s16le,即 16 位小端)。

ffmpeg -i '01 - Sweet Georgia Brown.dsf' -f alsa hw:0,0

显示 ffmpeg 横幅和歌曲元数据(标签)后,结果如下,粗体是我的重点:

持续时间:00:05:14.83,开始:0.000000,比特率:9234 kb/s Stream #0:0:音频:flac,192000 Hz,立体声,s32(24 位)
流映射:Stream #0:0 -> #0 :0 (flac (native) -> pcm_s16le (native))
按 [q] 停止,[?] 寻求帮助
输出 #0,alsa,到 'hw:0,0':

由于我可以使用另一个播放器(foobar2000)以全分辨率播放此曲目和许多其他曲目,因此编码器中似乎可能有一个选项,它是 FFmpeg 的一部分:Lavf57.83.100 我在任何 FFmpeg 文档中都找不到有帮助的信息. 尝试在 FFplay 中查找选项,甚至使用其他 FFmpeg 选项进行猜测,例如此示例。
ffmpeg -sample_fmt s24 -i '01 - Sweet Georgia Brown.dsf' -f alsa hw:0,0 ***** 相同的结果。

我被困住了。有什么建议么?

环境:Linux Mint 19.2,64 位,华硕 Xonar STXii 声卡。

4

1 回答 1

0

每种输出格式或设备都为其接受的每种媒体类型注册了一个默认编码器。ALSA 接受音频,其默认编码器是 16 位签名 PCM。

您可以通过指定一个来更改编码器。

ffmpeg -i '01 - Sweet Georgia Brown.dsf' -c:a pcm_s24le -f alsa hw:0,0
于 2019-12-23T05:13:16.993 回答