使用 FFmpeg 批量嵌入专辑封面

问题描述 投票:0回答:1

我想将文件夹中的所有 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
batch-file cmd ffmpeg
1个回答
1
投票

一种解决方案是替换第二、第四和第五行中的

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 /?

使用这两个应用程序的每个人都应该阅读FFmpegAtomicParsley的文档,但我没有这样做,因为我不使用它们。

PS:最好指定

ffmpeg.exe
atomicparsley.exe
并用双引号括起来的完整限定文件名(驱动器 + 路径 + 名称 + 扩展名)。那么 Windows 命令处理器
cmd.exe
就不需要在每次执行之前在循环中使用环境变量
PATHEXT
PATH
来搜索这两个可执行文件。

© www.soinside.com 2019 - 2024. All rights reserved.