我正在使用以下代码自动为文件夹中的视频加水印:
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
我发现所有带有感叹号(!)的视频都可以这样做。
如何使这些视频在标题中带有感叹号的水印?
答案 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
内,然后直接使用检索到的值即可。