batch-file - 使用 FFmpeg 批量嵌入专辑封面

标签 batch-file cmd ffmpeg

我想将文件夹中的所有 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.exeatomicparsley.exe用双引号括起来的完整限定文件名(驱动器 + 路径 + 名称 + 扩展名)。然后是 Windows 命令处理器 cmd.exe不需要使用环境变量 PATHEXT 搜索这两个可执行文件和 PATH在每次执行之前的循环中。

    关于batch-file - 使用 FFmpeg 批量嵌入专辑封面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900387/

    相关文章:

    python - 我的 .bat 文件在使用 `python` 后无法读取行

    java - 如何构建一个位于当前文件夹下一个目录的文件夹

    powershell - 如果由于 URL 无效/过期而导致 invoke-webrequest 失败,如何回显,否则继续在 Powershell CLI 中下载?

    将 mkv 转换为 mp4 时出现 ffmpeg 错误

    scripting - 如何编写批处理文件来定期删除文件夹和文件?

    tomcat - 通过批处理文件运行 ant 命令

    windows - 用读取文本文件的for循环替换多行批处理文件

    android - Android中的视频压缩

    ffmpeg - 将 MKV 转换为 MP4

    batch-file - 如何创建适用于程序文件和程序文件(x86)的批处理文件?