如何使用FFmpeg同时为视频硬烧录.ass字幕文件并添加水印
如何使用FFmpeg同时为视频硬烧录.ass字幕文件并添加水印
没问题,我来帮你把硬烧录字幕和添加水印的操作合并成一条FFmpeg命令,这样就能跳过HandBrake,一步完成啦!
完整命令示例
假设你的视频文件是video.mp4,字幕文件是subtitle.ass,水印图片是logo.png,最终输出文件为output.mp4,命令如下:
ffmpeg -i F:\ffmpeg\bin\video.mp4 -i F:\ffmpeg\bin\subtitle.ass -i F:\ffmpeg\bin\logo.png -filter_complex "[2]format=rgba,colorchannelmixer=aa=0.4,scale2ref=oh*mdar:ih*0.07[logo];[0:v]subtitles=F:\ffmpeg\bin\subtitle.ass[video_subbed];[video_subbed][logo]overlay=(main_w-overlay_w)-10:10" -c:a copy output.mp4
命令拆解说明
我把每个部分的作用给你拆解清楚,方便你理解和调整:
输入部分:
-i F:\ffmpeg\bin\video.mp4:指定要处理的源视频-i F:\ffmpeg\bin\subtitle.ass:指定要硬烧录的字幕文件(如果是.srt字幕,这个命令同样适用,不用改滤镜)-i F:\ffmpeg\bin\logo.png:指定水印图片文件
滤镜链部分(
filter_complex):
这部分是核心,我们把三个操作串联起来:处理水印:
[2]format=rgba,colorchannelmixer=aa=0.4,scale2ref=oh*mdar:ih*0.07[logo][2]:指代第三个输入(水印图片)format=rgba:将水印转为支持透明通道的格式,确保水印的透明区域正常显示colorchannelmixer=aa=0.4:设置水印的透明度为40%(你可以调整aa的值,0是完全透明,1是完全不透明)scale2ref=oh*mdar:ih*0.07:将水印缩放到视频高度的7%,同时保持水印的原始宽高比[logo]:把处理好的水印标记为logo,供后续滤镜使用
硬烧录字幕:
[0:v]subtitles=F:\ffmpeg\bin\subtitle.ass[video_subbed][0:v]:指代第一个输入的视频流subtitles=...:调用字幕滤镜,把指定的字幕硬烧录到视频上(这里要写全字幕文件的路径,和输入的字幕路径一致即可)[video_subbed]:把烧录好字幕的视频标记为video_subbed
叠加水印到带字幕的视频:
[video_subbed][logo]overlay=(main_w-overlay_w)-10:10[video_subbed][logo]:把带字幕的视频作为底层,处理好的水印作为上层overlay=(main_w-overlay_w)-10:10:设置水印的位置——右上角,距离右侧10像素、顶部10像素(和你原来单独加水印的位置完全一致)
其他参数:
-c:a copy:直接复制源视频的音频流,不需要重新编码,节省处理时间(如果你的音频需要重新编码,可以去掉这个参数,FFmpeg会自动用默认编码处理)
注意事项
如果你的文件路径包含空格,记得给路径加上引号,比如:
ffmpeg -i "F:\ffmpeg\bin\my video.mp4" -i "F:\ffmpeg\bin\my subtitle.ass" -i "F:\ffmpeg\bin\my logo.png" -filter_complex "[2]format=rgba,colorchannelmixer=aa=0.4,scale2ref=oh*mdar:ih*0.07[logo];[0:v]subtitles='F:\ffmpeg\bin\my subtitle.ass'[video_subbed];[video_subbed][logo]overlay=(main_w-overlay_w)-10:10" -c:a copy output.mp4
备注:内容来源于stack exchange,提问作者Candour
相关产品推荐
相关产品推荐

