用法

用法

ALAC 和 FLAC 都是无损音频格式,从一种格式转换为另一种格式时,文件通常具有大致相同的大小。我经常ffmpeg -i track.flac track.m4a在这两种格式之间进行转换,但我注意到生成的 ALAC 文件比原始文件小得多。当使用像 MediaHuman Audio Converter 这样的转换器软件时,ALAC 的大小将保持与 FLAC 相同的大小,所以我想我在这里丢失了一些导致ffmpeg信号下采样的标志。

答案1

好吧,我可能有点快在这里问,但为了将来参考,这里是答案:

应将标志传递-acodec alacffmpegFLAC 和 ALAC 之间的无损转换:

ffmpeg -i track.flac -acodec alac track.m4a

答案2

并用于转换整个目录......

用法

pushd './Music/Some Album [flac]'
bash flac-to-alac.sh 

flac-to-alac.sh:

#!/usr/bin/env bash
my_bin="$(dirname $0)/flac-to-alac-ffmpeg.sh"
find . -type f -name '*.flac' -exec "$my_bin" {} \;

flac-to-alac-ffmpeg.sh:

#!/usr/bin/env bash
set -e # fail if there's any error
set -u

my_file=$1
my_new="$(echo $(dirname "$my_file")/$(basename "$my_file" .flac).m4a)"
echo "$my_file"
ffmpeg -y -v 0 -i "$my_file" -acodec alac "$my_new"
# only gets here if the conversion didn't fail
#rm "$my_file"

选择:

我以为我可以让它在单个命令中工作,但它不会转义特殊字符,例如[.

看起来很有希望......

#!/usr/bin/env bash
set -e # exit immediately on error
set -u # error if a variable is misspelled

while read -r my_file; do
  # ./foo/bar.flac => ./foo/bar.m4a
  my_new="$(dirname "$my_file")/$(basename "$my_file" .flac).m4a"

  ffmpeg -i "$my_file" -acodec alac "$my_new"

  # safe because of set -e, but still do a test run
  #rm "$my_file"
done <<< "$(find . -type f -name '*.flac')"

相关内容