Batch file 将徽标批量覆盖到视频文件目录

Batch file 将徽标批量覆盖到视频文件目录,batch-file,video,ffmpeg,Batch File,Video,Ffmpeg,我在windows 8中使用此命令将徽标(mywatermark.png,400x200)覆盖到视频文件: ffmpeg -i E:\source\video01.mp4 -i E:\logo\mywatermark.png -filter_complex "[1:v]scale=100:50 [ovrl], [0:v][ovrl ]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" -map 0:a -codec:v libx264 -pr

我在windows 8中使用此命令将徽标(mywatermark.png,400x200)覆盖到视频文件:

ffmpeg -i E:\source\video01.mp4 -i E:\logo\mywatermark.png -filter_complex "[1:v]scale=100:50 [ovrl], [0:v][ovrl
]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" -map 0:a -codec:v libx264 -preset veryfast -crf 18 -codec:a copy E:\output\video01.mp4
正如你所见,我首先将我的徽标重新缩放到100:50像素,然后将其覆盖到右下角。 这对我有用

我的问题是:

如何在同一目录中的所有视频中重复此操作,向所有视频添加相同的徽标?

我想把输出的视频文件和原来的一样保存在不同的文件夹中。但是,不要忘记,我的源视频文件具有不同的质量和分辨率。 如何在命令行中添加一个参数,以便根据视频文件分辨率按比例缩放徽标

我担心,如果我不这样做,标志将在一个文件小,在另一个更大。
非常感谢

我如何在同一目录中的所有视频中重复此操作,并在所有视频中添加相同的徽标

Windows命令行处理器-
cmd.exe
-为提供命令,用于对目录中的所有文件执行命令

@echo off
for %%I in ("E:\source\*.mp4") do ffmpeg.exe -i "%%I" -i E:\logo\mywatermark.png -filter_complex "[1:v]scale=100:50 [ovrl], [0:v][ovrl]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" -map 0:a -codec:v libx264 -preset veryfast -crf 18 -codec:a copy "E:\output\%%~nI.mp4"
在命令提示窗口中运行/?或
的帮助以在多个显示页面上输出此命令的帮助。由于的命令帮助很长,建议将输出帮助重定向到文本文件中,并使用记事本或任何其他文本编辑器读取该文件

for /? >"%USERPROFILE%\Desktop\Help_FOR.txt"
Notepad "%USERPROFILE%\Desktop\Help_FOR.txt"
在上述批处理代码中,
%%I
替换为当前带有完整路径的*.mp4文件名,
%%nI
替换为当前带有路径和文件扩展名的*.mp4文件名

我如何在同一目录中的所有视频中重复此操作,并在所有视频中添加相同的徽标

Windows命令行处理器-
cmd.exe
-为提供命令,用于对目录中的所有文件执行命令

@echo off
for %%I in ("E:\source\*.mp4") do ffmpeg.exe -i "%%I" -i E:\logo\mywatermark.png -filter_complex "[1:v]scale=100:50 [ovrl], [0:v][ovrl]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" -map 0:a -codec:v libx264 -preset veryfast -crf 18 -codec:a copy "E:\output\%%~nI.mp4"
在命令提示窗口中运行/?
的帮助以在多个显示页面上输出此命令的帮助。由于的命令帮助很长,建议将输出帮助重定向到文本文件中,并使用记事本或任何其他文本编辑器读取该文件

for /? >"%USERPROFILE%\Desktop\Help_FOR.txt"
Notepad "%USERPROFILE%\Desktop\Help_FOR.txt"

在上面的批处理代码中,
%%I
替换为当前*.mp4文件的完整路径名,
%%nI
替换为当前*.mp4文件的名称,不带路径,不带文件扩展名。

正如@LordNeckbeard评论的那样,您可以使用
scale2ref
过滤器按比例缩放水印,如下所示

ffmpeg -i E:\source\video01.mp4 -loop 1 -i E:\logo\mywatermark.png \
-filter_complex "[1:v][0:v]scale2ref=iw/8:-1[ovrl][0v]; \
[0v][ovrl]overlay=W-w-10:H-h-10[watermark]" \
-map "[watermark]" -map 0:a \
-codec:v libx264 -preset veryfast -crf 18 -c:a copy E:\output\video01.mp4

iw/8
指定将水印的宽度和高度缩放为基础视频宽度和高度的1/8。
scale2ref
过滤器具有与
scale
过滤器相同的可用选项。

正如@LordNeckbeard所评论的,您可以使用
scale2ref
过滤器按比例缩放水印,如下所示

ffmpeg -i E:\source\video01.mp4 -loop 1 -i E:\logo\mywatermark.png \
-filter_complex "[1:v][0:v]scale2ref=iw/8:-1[ovrl][0v]; \
[0v][ovrl]overlay=W-w-10:H-h-10[watermark]" \
-map "[watermark]" -map 0:a \
-codec:v libx264 -preset veryfast -crf 18 -c:a copy E:\output\video01.mp4

iw/8
指定将水印的宽度和高度缩放为基础视频宽度和高度的1/8。
scale2ref
过滤器具有与
scale
过滤器相同的可用选项。

@Mofi请您将其作为一个工作示例写下来作为答案。plz@Mofi请你把它写下来作为一个答案,一个有效的例子。我已经纠正了我的命令-我忘记了一个输出板。现在应该可以工作了。我已经更正了我的命令-我忘记了一个输出板。现在应该可以工作了。