ALACとFLACはどちらもロスレスオーディオ形式であり、ある形式から別の形式に変換するときのファイルサイズは通常ほぼ同じです。私はしばしばffmpeg -i track.flac track.m4a
これら2つの形式の間を変換しますが、結果のALACファイルが元のファイルよりはるかに小さいことがわかりました。 MediaHuman Audio Converterなどのコンバータソフトウェアを使用すると、ALACのサイズはFLACと同じサイズに保たれるため、ffmpeg
信号がダウンサンプリングされるようにするフラグがいくつかありません。
答え1
わかりました。ここで質問するのは少し速いですが、後で参考にできるように答えは次のとおりです。
FLACとALAC間のロスレス変換の-acodec alac
ためにフラグを渡す必要があります。ffmpeg
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')"