Ffmpeg

使用 ffmpeg 從 FLAC 到 ALAC 的無損音頻轉換

  • June 9, 2019

ALAC 和 FLAC 都是無損音頻格式,當從一種格式轉換為另一種格式時,文件的大小通常或多或少相同。我曾經ffmpeg -i track.flac track.m4a在這兩種格式之間進行轉換,但我注意到生成的 ALAC 文件比原始文件小得多。當使用像 MediaHuman Audio Converter 這樣的轉換器軟體時,ALAC 的大小將與 FLAC 的大小保持一致,所以我想我在這裡遺漏了一些導致ffmpeg信號下採樣的標誌。

好的,我可能有點快在這裡問,但為了將來參考,這裡是答案:

應該將標誌傳遞-acodec alacffmpegFLAC 和 ALAC 之間的無損轉換:

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

而對於轉換整個目錄…

用法

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')"

引用自:https://unix.stackexchange.com/questions/415477