在Windows中为ffmpeg MP4编码过程添加水印?

在Windows中为ffmpeg MP4编码过程添加水印?

我想要立即道歉,因为我根本不熟悉如何使用 ffmpeg,并且在无数次尝试为我的视频添加 PNG 图像水印失败后,我希望有人能够以我的方式提供一些帮助。

我知道 ffmpeg 是一个基于 Linux 的应用程序,但我希望在 Windows 7 64 位中实现它。

我正在使用据说非常过时的预设,但它适合我的需要,而且在编码实践方面我是一个习惯的动物。

以下是我希望实现的目标:

  1. 将 FLV 批量编码为 MP4,保留原始文件名。
  2. 在视频的右下角用 PNG 图像为所有视频文件添加水印。
  3. 在指定的截止时间自动分割文件并保留原始文件名,只需在文件名末尾添加 -00,-01 等内容。

以下是我目前使用的预设。在 GUI 中,我通常坚持使用 15/16 的 CRF,这使我的总体输出约为原始文件大小的 56%。

coder=1
flags=+loop
cmp=+chroma
partitions=-parti8x8-parti4x4-partp8x8-partb8x8
me_method=dia
subq=2
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=2
qcomp=0.6
qmin=10
qmax=51
qdiff=4
bf=3
refs=1
directpred=3
trellis=0
flags2=+bpyramid-mixed_refs+wpred-dct8x8+fastpskip
wpredp=2
rc_lookahead=50

非常感谢您的帮助,并且由于在编码方面没有任何技术背景,我再次对我的无知表示歉意。

答案1

一些建议

我知道 ffmpeg 是一个基于 Linux 的应用程序,但我希望在 Windows 7 64 位中实现它。

ffmpeg适用于 Windows、OS X、Linux 和其他平台。请参阅FFmpeg 下载页面上有多个选项。

您的第一步应该是下载最新版本的ffmpeg。建议定期获取最新版本,因为FFmpeg 开发非常活跃并利用已修复的错误。Windows 的每日构建版本可在Zeranoe FFmpeg 构建

我正在使用据说非常过时的预设,但它适合我的需要,而且在编码实践方面我是一个习惯的动物。

您没有理由使用旧的、不受支持的预设,该预设可能使用旧的、不受支持的选项。只需改用-preset veryfast:它基本上与您的旧的、不受支持的预设非常相似。ffmpeg不再使用 x264 的“模拟”预设的文本文件类型,而是直接访问它们。

添加水印

纳汉尼

使用overlay视频滤镜

ffmpeg -i input.flv -i logo.png -filter_complex \
"[0:v][1:v]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" \
-map 0:a -codec:v libx264 -preset veryfast -crf 18 -codec:a copy \
output.mp4
  • 过滤图:[0:v][1:v]overlay=W-w-10:H-h-10[watermark]

    • [0:v]是一个流说明符,指的是第一个输入的视频流( )input.flv[1:v]指的是第二个输入的视频流(logo.png)。

    • W-w-10正在放置X轴,指的是主输入的宽度 ( W) 和覆盖输入的宽度 ( w)。H-h-10类似,但对于轴。此示例将徽标放置在右下角,内边距为 10 像素。请参阅overlay视频过滤器文档了解更多信息。

    • [watermark]是输出链接标签。有些人会忽略这一点,但我更喜欢明确标记我的输出以消除歧义。

  • -crf 18通常被认为大致“视觉无损”,所以我假设该值对您来说就足够了。如果不够,则降低该值直到达到可接受的质量。然后使用您有耐心的最慢预设。请参阅FFmpeg 和 x264 编码指南-crf欲了解有关和 的更多信息-preset

  • -codec:a copy将要流复制音频。如果你的播放器不喜欢我假设的 MP3 音频,那么可以使用类似的-codec:a aac -strict experimental -b:a 128k。请参阅FFmpeg 和 AAC 编码指南了解更多信息。

分割视频

使用segment复用器

ffmpeg -i input.flv -i logo.png -filter_complex \
"[0:v][1:v]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" \
-map 0:a -codec:v libx264 -preset veryfast -crf 18 -codec:a copy \
-f segment -segment_time 20 -segment_list out.csv output.mp4

片段持续时间约为 20 秒,输出将命名为output-000.mp4output-001.mp4output-002.mp4等。请参阅segment多路复用器文档以获取更多详细信息和示例。

批量编码

Linux

使用 Bash “for 循环”:

$ mkdir outputdir
$ for file in *.flv; do ffmpeg -i "$file" -i logo.png -filter_complex \
"[0:v][1:v]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" \
-map 0:a -codec:v libx264 -preset veryfast -crf 18 -codec:a copy \
-f segment -segment_time 20 -segment_list outputdir/out.csv \
outputdir/"${file%.flv}-%03d.mp4"; done

视窗

for %%a in ("*.flv") do ffmpeg -i "%%a" -i logo.png -filter_complex "[0:v][1:v]overlay=W-w-10:H-h-10[watermark]" -map "[watermark]" -map 0:a -codec:v libx264 -preset veryfast -crf 18 -codec:a copy -f segment -segment_time 20 -segment_list "outputfolder\out.csv" "outputfolder\%%~na-%%03d.mp4"
pause

您可以将其转储到文本编辑器中并命名watermark.bat,然后双击执行。在 Windows 资源管理器中,您可能需要显示隐藏的系统文件才能watermark.bat显示。

相关内容