Ffmpeg-感叹号停止水印

时间:2018-08-25 21:44:02

标签: batch-file ffmpeg watermark ffprobe

我正在使用以下代码自动为文件夹中的视频加水印:

for %%a in ("C:\Users\Work\Desktop\Redo\*.mp4") do (
   for /F "delims=" %%I in ('ffprobe -v quiet -show_entries stream^=width -of csv^=p^=0:s^=x %%a') do set "codec=%%I"
   ffmpeg -i logo.png -y -v quiet -vf scale=!codec!*0.25:-1 scaled.png
   ffmpeg -i "%%a" -vf "movie=scaled.png [watermark]; [in][watermark] overlay=10:main_h-overlay_h [out]" "C:\Users\Work\Desktop\Redo Done\%%~na.mp4"
)

某些视频无法加水印,并在下面显示类似错误:

C:\Users\Work\Desktop\Redo\Arcade_h-overlay_h [out]: No such file or directory

我发现所有带有感叹号(!)的视频都可以这样做。

如何使这些视频在标题中带有感叹号的水印?

1 个答案:

答案 0 :(得分:1)

setlocal disabledelayedexpansion
for %%a in ("C:\Users\Work\Desktop\Redo\*.mp4") do (
    for /F "delims=" %%I in ('
        ffprobe -v quiet -show_entries stream^=width -of csv^=p^=0:s^=x "%%a"
    ') do (
        ffmpeg -i logo.png -y -v quiet -vf scale=%%I*0.25:-1 scaled.png
        ffmpeg -i "%%a" -vf "movie=scaled.png [watermark]; [in][watermark] overlay=10:main_h-overlay_h [out]" "C:\Users\Work\Desktop\Redo Done\%%~na.mp4"
    )
)

在延迟扩展处于活动状态时,扩展for可替换参数时,感叹号将丢失。由于您仅使用延迟扩展来获取codec值,因此无需这样做,就不需要它。变量内部的值已经可以作为for的可替换参数使用,因此,只需将ffmpeg命令放在第二个for内,然后直接使用检索到的值即可。