使用ffmpeg从FLAC到ALAC的无损音频转换


13

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


ffmpeg通常需要-acodec任何目的地的,以确保您正确进行对话。有很多使用的前端,ffmpeg但我注意到很多前端都不包含ALAC作为输出选项。
素食主义者狂热者

Answers:


23

好的,我可能在这里问得很快,但是为了将来参考,这里是答案:

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

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


6
要解释这里发生的情况:.m4a是MP4文件格式的Apple变体。当输出到mp4或时m4a,FFmpeg和大多数其他软件将默认为AAC编码器,因此-acodec需要express 选项。
Gyan

2
一些FLAC文件包含专辑封面缩略图。您可以添加-vcodec copy这些文件,以将其包括在新的ALAC文件中。
肖恩

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

2
这是我用来转换的for i in *.flac; do echo $i; ffmpeg -i "$i" -y -v 0 -vcodec copy -acodec alac "${i%.flac}".m4a && rm -f "$i"; done
Paul Lindner

@PaulLindner对于单个目录,这似乎是一个完美的选择,无需递归。
CoolAJ86
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.