魔域封印 发表于 2023-8-26 01:40

【原创】DSD音频转码脚本

本帖为https://bbs.pcbeta.com/viewthread-1977177-1-1.html之序章,原帖13、14楼https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1977177&page=1#pid54285200的精油贴了DSD,奈何macOS需要借助第三方播放器,且售价不菲,本着白嫖原则,索性写个脚本把DSD转码成macOS支持的格式。


脚本运行时会自动检测依赖软件ffmpeg,若无会调用homebrew自动安装,(梯子请自备,我在电诈重灾区自然不需要),转码位深和采样率默认16/44.1,可选24/48,只支持dff、dsf转wav和flac,(有其他需求跟帖留言,我酌情处理)其它格式我定义为无意义,本就是DSD,转mp3那是头被门夹了的行为,原计划用sox,因为处理pcm音频更细腻,奈何要调用dsd2pcm,懒病发作不想折腾,继续用ffmpeg,以下是脚本源码,自取不谢
#!/bin/bash

# 检查是否安装了 FFmpeg,如果未安装则尝试使用 Homebrew 安装
if ! command -v ffmpeg &> /dev/null; then
    read -p "FFmpeg 未安装,是否尝试使用 Homebrew 进行安装? (y/n): " install_ffmpeg

    if [ "$install_ffmpeg" == "y" ]; then
      echo "正在安装 FFmpeg,请稍候..."
      brew install ffmpeg
    else
      echo "未安装 FFmpeg,无法进行音频转换。"
      exit 1
    fi
fi

# 输入DSD文件所在目录
read -p "PCBEAT论坛首发,仅论坛交流使用,脚本调用ffmpeg为开源软件,DSD音源文件版权请酌情甄别。

请输入DSD文件所在目录: " input_directory

# 检查输入目录是否存在
if [ ! -d "$input_directory" ]; then
    echo "输入目录 '$input_directory' 不存在。"
    exit 1
fi

# 输入转码输出目录
read -p "请输入转码输出目录: " output_directory

# 检查输出目录是否存在,如果不存在则创建
if [ ! -d "$output_directory" ]; then
    mkdir -p "$output_directory"
fi

# 选择输出格式
read -p "请选择输出格式 (wav/flac): " output_format

# 检查输出格式是否合法
if [ "$output_format" != "wav" ] && [ "$output_format" != "flac" ]; then
    echo "无效的输出格式选择。"
    exit 1
fi

# 输入位深,如果没有输入则使用默认值
read -p "请选择位深 (16/24,默认 16): " bit_depth
if [ "$bit_depth" != "24" ]; then
    bit_depth="16"# 默认值为 16
fi

# 输入采样率,如果没有输入则使用默认值
read -p "请选择采样率 (44100/48000,默认 44100): " sample_rate
if [ "$sample_rate" != "48000" ]; then
    sample_rate="44100"# 默认值为 44100
fi

# 统计目录中总的 DSF 和 DFF 文件数量
total_audio_files=$(find "$input_directory" -type f \( -name "*.dsf" -o -name "*.dff" \) | wc -l)
converted_files=0

# 遍历输入目录中的 DSF 和 DFF 文件
for audio_file in "$input_directory"/*.{dsf,dff}; do
    if [ -f "$audio_file" ]; then
      audio_filename=$(basename "$audio_file")
      output_filename="${audio_filename%.*}.$output_format"
      output_file="$output_directory/$output_filename"
      
      if [ "$output_format" == "wav" ]; then
            # 转换为 WAV 格式
            ffmpeg -i "$audio_file" -acodec pcm_s$bit_depth"le" -ar $sample_rate "$output_file"
      elif [ "$output_format" == "flac" ]; then
            # 转换为 FLAC 格式,注意这里使用了 "s32" 作为采样深度
            ffmpeg -i "$audio_file" -c:a flac -ar $sample_rate -sample_fmt s32 "$output_file"
      fi
      
      converted_files=$((converted_files + 1))
      percentage=$((converted_files * 100 / total_audio_files))
      
      echo "已转换 $audio_filename 为 $output_filename ($percentage% 完成)"
    fi
done

echo "转换完成"
音源在上贴14楼



hodori 发表于 2023-8-26 16:25

DSD直接Audirvana Plus播放不好吗?我是Mac外接USB解码器 Audirvana Plus播放。

九月麦田 发表于 2023-8-26 16:34

音频转码没有xld搞不定的,包括dsd,sacd

hodori 发表于 2023-8-27 08:20

hodori 发表于 2023-8-26 16:25 https://bbs.pcbeta.com/static/image/common/back.gif
DSD直接Audirvana Plus播放不好吗?我是Mac外接USB解码器 Audirvana Plus播放。

厉害,不喜欢折腾的路过 。 {:9_349:}

angodson 发表于 2023-8-27 08:26

直接放DSD不香吗???
为何要转换呢,放解码器直接通过USB放SACD吧---

魔域封印 发表于 2023-8-27 21:06

angodson 发表于 2023-8-27 08:26 https://bbs.pcbeta.com/static/image/common/back.gif
直接放DSD不香吗???
为何要转换呢,放解码器直接通过USB放SACD吧---

已说过,TNT版的app我绕道,人穷志短,用不了正版就走点弯路

搁浅065 发表于 2023-8-27 22:04

魔域封印 发表于 2023-8-27 21:06 https://bbs.pcbeta.com/static/image/common/back.gif
已说过,TNT版的app我绕道,人穷志短,用不了正版就走点弯路

TNT怎么你了{:5_270:},你不用正版macOS都配不上你说的这句话{:5_262:}

angodson 发表于 2023-8-28 07:06

魔域封印 发表于 2023-8-27 21:06 https://bbs.pcbeta.com/static/image/common/back.gif
已说过,TNT版的app我绕道,人穷志短,用不了正版就走点弯路

不是app的问题---
而是用解码器硬解SACD,不用通过软件转换成PCM等格式---

angodson 发表于 2023-8-28 07:38

dsd64已经大概等同176.4 kHz的采样,这脚本转换的采样好像有点低---
对dsd128的话,损失可能有点大---

魔域封印 发表于 2023-8-28 12:03

angodson 发表于 2023-8-28 07:06 https://bbs.pcbeta.com/static/image/common/back.gif
不是app的问题---
而是用解码器硬解SACD,不用通过软件转换成PCM等格式---

家里有数字转盘,但对于我这样带个笔电到处跑的人只能这样解决

魔域封印 发表于 2023-8-28 12:06

angodson 发表于 2023-8-28 07:38 https://bbs.pcbeta.com/static/image/common/back.gif
dsd64已经大概等同176.4 kHz的采样,这脚本转换的采样好像有点低---
对dsd128的话,损失可能有点大---

只设置了转成CD音质的参数,同源码流转出来尺寸感人,同时也没那么好的器材,随身就一MBP+耳机,凑合着听听而已

angodson 发表于 2023-8-28 19:23

魔域封印 发表于 2023-8-28 12:03 https://bbs.pcbeta.com/static/image/common/back.gif
家里有数字转盘,但对于我这样带个笔电到处跑的人只能这样解决

笔电的话,搞个歌德耳机比这转换提升的多---
个人浅见,望见谅---

markmfrog 发表于 2023-8-28 20:58

存了几个t的无损dsd啥的,但开得最多是apple music{:5_263:}

魔域封印 发表于 2023-8-28 23:36

angodson 发表于 2023-8-28 19:23 https://bbs.pcbeta.com/static/image/common/back.gif
笔电的话,搞个歌德耳机比这转换提升的多---
个人浅见,望见谅---

在不动任何硬件的前提下这个最优解,最近碰到的问题是度娘盘下的资源多半rar,本来macOS下一条命令能搞定的,但有些资源压缩包带密码,我琢磨下再写个一键解压的脚本,在不动用钞能力的情况下rar压缩包应该是多半数macOS用户的痛,脚本能解决的事都不是事

claotlaot 发表于 2023-8-29 00:04

claotlaot 发表于 2023-8-29 00:06

韩国免费的播放器,商店有,官网也能下
http://www.digipine.com

魔域封印 发表于 2023-8-29 00:14

claotlaot 发表于 2023-8-29 00:04 https://bbs.pcbeta.com/static/image/common/back.gif


感谢,按你提供的播放器名称,homebrew上搜索无果


939872740 发表于 2023-8-29 00:57

楼主,我发现利用FFmpeg进行转码,Macos同样能识别
ffmpeg -i input.dsf -c:a flac output.flac
这样100多mb的转出来有500多mb

魔域封印 发表于 2023-8-29 10:57

939872740 发表于 2023-8-29 00:57 https://bbs.pcbeta.com/static/image/common/back.gif
楼主,我发现利用FFmpeg进行转码,Macos同样能识别
ffmpeg -i input.dsf -c:a flac output.flac
这样100多 ...

不管dsf还是dff,理论上还是一种音频封装技术,它是最接近或等同于母带级音质的,封装也分有损封装和无损封装,常见的flac,苹果的alac就是无损封装,一个开源一个闭源,有损封装mp3,苹果的aac,转码既还原封装的过程,你上面的命令是给dsf直接卸妆并换了套外衣,转成wav等与扒光洗白白

claotlaot 发表于 2023-8-29 23:11

魔域封印 发表于 2023-8-29 00:14 https://bbs.pcbeta.com/static/image/common/back.gif
感谢,按你提供的播放器名称,homebrew上搜索无果

app商店和官网都有,你干嘛用brew装
页: [1]
查看完整版本: 【原创】DSD音频转码脚本