Ffmpeg - 感叹号停止水印

Ffmpeg - Exclamation Point Stopping Watermark

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

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

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

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

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 内并直接使用检索到的值。