批处理ffmpeg并压缩文件

Batch ffmpeg and compress the files

我正在使用 ffmpeg 进行一系列转换,我需要在其中为内容添加水印。我正在使用 运行 ffmpeg 应用程序的批处理文件,但我想自动执行所有这些操作。

for %%a in ("*.mp4*") do ffmpeg -i "%%a" -i logo.png -filter_complex overlay "newfiles\%%~na.mp4"
pause

源视频文件:

video_a.mp4
video_b.mp4
video_c.mp4

源图像文件:

logo_x.png
logo_y.png
logo_z.png
logo_u.png

对于每个徽标 PNG 图像,应对所有 MP4 视频文件执行 ffmpeg
输出应写入名为 output_folder_ + 徽标图像名称的新文件夹,例如 output_folder_logo_x.

一旦完成像 logo_x 输出视频这样的整个文件夹的转换,应将生成的文件压缩成 RAR 存档,并使用最佳压缩方式将其压缩到像 c:/users/admin/documents/dropbox 这样的保管箱文件夹中。

这样我就可以自动完成所有的转换和上传过程。

最后我会在我的 dropbox/megaSync 文件夹中:

output_folder_logo_x.rar
output_folder_logo_y.rar
output_folder_logo_z.rar
output_folder_logo_u.rar

更新代码:

@echo off
setlocal EnableDelayedExpansion
for %%g in ("*.png*") do (
    echo %%~ng
    md folder_prefix_%%~ng
    for %%b in ("*.mp4*") do (
        %%~ng
        ffmpeg -i "%%b" -i %%g -filter_complex overlay "folder_prefix_%%~ng\%%~nb.mp4"
    )
)
pause

你就快完成了,围绕你现有的 FOR 创建一个新的 FOR 循环

因此对于每个 png,

它将遍历所有 mp4,在新目录中创建叠加层

最后将所有生成的文件 rar 在一起

for %%a in (*.png) do (
  md "out%%~na"
  for %%b in (*.mp4) do (
    ffmpeg -i "%%a" -i "%%b" -filter_complex overlay "out%%~na\%%b"
  )
  call :dorar "out%%~na.rar" "out%%~na\*"
)

这是我对批处理代码的建议:

@echo off
setlocal EnableDelayedExpansion

set "FolderBaseName=output_folder"
set "BaseOutputFolder=%TEMP%\%FolderBaseName%"
set "DropBoxFolder=%USERPROFILE%\documents\dropbox\megaSync"
md "%DropBoxFolder%" 2>nul

for %%I in (logo_*.png) do (
    set "OutputFolder=%BaseOutputFolder%_%%~nI"
    md "!OutputFolder!" 2>nul
    for %%J in (*.mp4*) do (
        ffmpeg.exe -i "%%~fJ" -i "%%~fI" -filter_complex overlay "!OutputFolder!\%%~nJ.mp4"
    )
    %ProgramFiles%\WinRAR\Rar.exe a -cfg- -ep1 -inul -m5 "%DropBoxFolder%\%FolderBaseName%_%%~nI" "!OutputFolder!\*"
    rd /S /Q "!OutputFolder!"
)

endlocal

打开命令提示符 window 和 运行:

  • for /?
  • set /?
  • md /?
  • rd /?

这会导致显示所用命令的帮助。