我想要立即道歉,因为我根本不熟悉如何使用 ffmpeg,并且在无数次尝试为我的视频添加 PNG 图像水印失败后,我希望有人能够以我的方式提供一些帮助。
我知道 ffmpeg 是一个基于 Linux 的应用程序,但我希望在 Windows 7 64 位中实现它。
我正在使用据说非常过时的预设,但它适合我的需要,而且在编码实践方面我是一个习惯的动物。
以下是我希望实现的目标:
- 将 FLV 批量编码为 MP4,保留原始文件名。
- 在视频的右下角用 PNG 图像为所有视频文件添加水印。
- 在指定的截止时间自动分割文件并保留原始文件名,只需在文件名末尾添加 -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.mp4
、output-001.mp4
、output-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
显示。