批量ffmpeg并压缩文件

时间:2015-06-16 15:36:06

标签: batch-file ffmpeg

我正在使用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

2 个答案:

答案 0 :(得分:1)

你几乎就在那里,在现有的

周围创建一个新的FOR循环

这样每个png,

它会迭代所有mp4,在新目录中创建叠加层

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

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\*"
)

答案 1 :(得分:1)

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

@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

打开命令提示符窗口并在那里运行:

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

这样可以显示已使用命令的帮助。