Ffmpeg - восклицательный знак останавливает водяной знак - PullRequest
0 голосов
/ 26 августа 2018

Я использую приведенный ниже код для автоматического добавления водяных знаков для видео в папке:

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 голосов
/ 26 августа 2018
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 и непосредственно используйте полученное значение.

...