我在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像素,然后将其重叠到右下角。 这对我有用。
我的问题是:
如何对同一目录中的所有视频重复此操作,为所有视频添加相同的徽标?
我想保存与原始文件相同的输出视频文件,当然在不同的文件夹中。但是,不要忘记我的源视频文件具有不同的质量和分辨率。
如何在命令行中添加参数以按比例缩放与视频文件分辨率相关的徽标?
我担心,如果我不这样做,徽标将在一个文件中较小而在另一个文件中较大。
非常感谢
答案 0 :(得分:1)
如何对同一目录中的所有视频重复此操作,为所有视频添加相同的徽标?
Windows命令行处理器 - cmd.exe
- 提供命令 FOR ,用于对目录中的所有文件执行命令。
@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 /?
或help for
中运行,可在多个显示页面上输出此命令的帮助。由于命令 FOR 的帮助很长,建议将输出帮助重定向到文本文件,并使用记事本或任何其他文本编辑器读取文件。
for /? >"%USERPROFILE%\Desktop\Help_FOR.txt"
Notepad "%USERPROFILE%\Desktop\Help_FOR.txt"
在上面的批处理代码%%I
被当前* .mp4文件的名称替换为完整路径,而%%~nI
仅具有当前* .mp4文件的名称,没有路径且没有文件扩展名。
答案 1 :(得分:1)
正如@LordNeckbeard评论的那样,您可以使用public static int sum(final int[] target, final int[] source, int index) {
if (index >= source.length - 1)
return source[index];
return target[index] = source[index] + sum(target, source, index + 1);
}
public static int[] reverseCulmulative(final int[] array) {
final int[] target = array.clone();
sum(target, array, 0);
return target;
}
过滤器按比例缩放水印,就像这样
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
指定水印的宽度和高度缩放为基本视频宽度和高度的1/8。 iw/8
过滤器具有与scale2ref
过滤器相同的选项。