我想将文件夹中的所有 Flac 转换为 ALAC m4a 并嵌入专辑封面
使用此代码,它将相同的 jpg 嵌入到每个 m4a 中,我怎样才能从每个 flac 中提取专辑封面,然后将其嵌入到相应的 m4a 中?
@echo off
for %%G in (*.flac) do ffmpeg -i "%%G" -map 0:v -codec copy cover.jpg
for %%F in (*.flac) do ffmpeg -i "%%F" -vn -acodec alac "%%~nF.m4a"
(FOR /F "tokens=*" %%E IN ('dir /b *.m4a') DO atomicparsley "%%E" --artwork cover.jpg --overWrite)
(del cover.jpg)
pause
一种解决方案是替换第二、第四和第五行中的
cover.jpg
,如下所示:
@echo off
for %%G in (*.flac) do ffmpeg -i "%%G" -map 0:v -codec copy "%%~nG.jpg"
for %%F in (*.flac) do ffmpeg -i "%%F" -vn -acodec alac "%%~nF.m4a"
for /F "eol=| delims=*" %%E in ('dir /b *.m4a 2^>nul') do atomicparsley "%%E" --artwork "%%~nE.jpg" --overWrite
del /Q "*.jpg"
pause
但更好的解决方案是仅使用一个 FOR 循环,而不是使用具有三个不同循环变量的三个 FOR 循环。
@echo off
for %%I in (*.flac) do (
ffmpeg.exe -i "%%I" -map 0:v -codec copy "%%~nI.jpg"
if exist "%%~nI.jpg" ffmpeg.exe -i "%%I" -vn -acodec alac "%%~nI.m4a"
if exist "%%~nI.ma4" atomicparsley.exe "%%I" --artwork "%%~nI.jpg" --overWrite
if exist "%%~nI.jpg" del "%%~nI.jpg"
)
pause
要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
del /?
echo /?
for /?
if /?
pause /?
使用这两个应用程序的每个人都应该阅读FFmpeg和AtomicParsley的文档,但我没有这样做,因为我不使用它们。
PS:最好指定
ffmpeg.exe
和 atomicparsley.exe
并用双引号括起来的完整限定文件名(驱动器 + 路径 + 名称 + 扩展名)。那么 Windows 命令处理器 cmd.exe
就不需要在每次执行之前在循环中使用环境变量 PATHEXT
和 PATH
来搜索这两个可执行文件。