![使用ffmpeg批量将flac转换为ogg](https://linux22.com/image/227721/%E4%BD%BF%E7%94%A8ffmpeg%E6%89%B9%E9%87%8F%E5%B0%86flac%E8%BD%AC%E6%8D%A2%E4%B8%BAogg.png)
我正在尝试将此命令转换为将整个目录从 flac 转换为 ogg 的命令:
ffmpeg -i musicfile.flac musicfile.ogg
我已经阅读了手册页。但老实说,这有点超出我的理解范围。我不想使用声音转换器(或任何图形用户界面程序)。所以我转向你们。
我用的是opensuse tumbleweed。而我用的fish
,不是bash
。一切都是最新的。
正是我想要的,是将 flac 文件夹转换为单独的 ogg 文件夹。当然,质量就像q5一样。假设我将 hi.flac 文件放入~/flac/hi folder
,我希望它输出到 ogg 文件夹中,保留文件文件夹结构和名称。~/ogg/hi folder
。
这可能吗?还是我要求太多了?
我一直在使用flac2all
,它的功能与我刚才描述的完全一样,只是它变得越来越慢。所以我想看看使用该ffmpeg
命令是否更快。我搜索了一下,有人发布了一个小的 bash 脚本,但它对我不起作用。再次如此。我转向你们。
谢谢阅读。
答案1
也许是这样的:
apt install parallel
find /music -type d | xargs -i mkdir -p "/out_music/{}"
find /music -type f -name "*.flac" | parallel -j8 ffmpeg -i '{}' -ar 44100 -vn -codec:a libvorbis -qscale:a 7 -y '/out_music/{}.oga'
这将创建名称类似的文件.flac.oga
,但就我个人而言,它从未给我带来任何问题。
答案2
我喜欢佩奇的方法,尽管我自己会采取不同的做法:您指定您的外壳是不是bash,所以我假设您不会介意使用不同的 shell 来执行您的 shell;zsh
。我打赌fish
也可以用于此目的,但我几乎没有使用fish
.
#!/usr/bin/zsh
targetfolder="$1" # save argument to this shell script in
# variable $targetfolder
for infile in **/*.flac ; do
# ^ ^ ^^
# | | |
# \-------------------- we have a loop variable $infile…
# \------------- which we set to a new value from the following list:
# \--------- recursively (**) list all files ending in .flac (*.flac)
mkdir -p "${targetfolder}/${infile:h}"
# ^ ^ ^ ^----^^
# | | | | |
# | | | | /
# | | | | |
# \------------------------------------ make a new directory
# | | | |
# \----------------------------- making necessary parent directories on the way,
# | | ignoring all errors
# | | |
# \------------------------ expands to the argument passed to this script
# | |
# \------- expands to the current found file name,
# | but modified:
# |
# \-- removes the trailing path component, i.e.
# gets the directory containing the file
ffmpeg -i "${infile}" "${targetfolder}/${infile%.flac}.ogg"
# ^----^
# |
# remove the trailing ".flac" from the file name --/
done
或者,简而言之,删除所有评论:
#!/usr/bin/zsh
targetfolder="$1"
for infile in **/*.flac ; do
mkdir -p "${targetfolder}/${infile:h}"
ffmpeg -i "${infile}" "${targetfolder}/${infile%.flac}.ogg"
done
您可以通过将其保存到某个文件来使用该脚本,例如massconvert.zsh
;运行chmod 755 /path/to/massconvert.zsh
使其可执行,然后在包含 flac 集合的文件夹中运行它:
cd /home/utemost/flacs
/path/to/massconvert.zsh /home/utemost/oggs
就是这样!