我想将文件夹中的所有 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
但更好的解决方案是只使用一个 对于 循环而不是三个 对于 具有三个不同循环变量的循环。
@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
要了解使用的命令及其工作原理,请打开 command prompt窗口,在那里执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面。
del /?
echo /?
for /?
if /?
pause /?
FFmpeg的文档和 AtomicParsley使用这两个应用程序的每个人也应该阅读这两个应用程序,因为我不使用它们,所以我没有这样做。
PS:最好指定
ffmpeg.exe
和 atomicparsley.exe
用双引号括起来的完整限定文件名(驱动器 + 路径 + 名称 + 扩展名)。然后是 Windows 命令处理器 cmd.exe
不需要使用环境变量 PATHEXT
搜索这两个可执行文件和 PATH
在每次执行之前的循环中。
关于batch-file - 使用 FFmpeg 批量嵌入专辑封面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900387/