FFmpeg添加两行水印仅第一行可见问题求助
解决FFmpeg添加两行水印仅第一行可见的问题
在Node.js中使用FFmpeg为视频添加两行水印时,仅第一行水印可见,第二行无法正常显示。问题出在complexFilter的滤镜链路配置上:
原代码中两个drawtext滤镜均直接基于原始视频流[0:v]操作,但未正确串联处理流程,FFmpeg无法将两行水印叠加输出,导致仅第一行生效。
修复后的代码
ffmpeg() .input(tempLocalPath) .complexFilter([ // 第一行水印,输出到临时流[v1] `[0:v]drawtext=text='${watermarkTextLine1}':x=(w-tw)/2:y=(h-460):fontsize=24:fontcolor=white@0.5:fontfile=/Windows/Fonts/arial.ttf[v1]`, // 基于[v1]添加第二行水印,最终输出该流 `[v1]drawtext=text='${watermarkTextLine2}':x=(w-tw)/2:y=(h-200):fontsize=32:fontcolor=red:fontfile=/Windows/Fonts/arial.ttf` ]) .output( path.join(tempLocalDir, video_cid.replace(".mp4", "-") + "watermarked.mp4"), ) .on("end", function () { // Send the watermarked video as a response res.download( path.join( tempLocalDir, video_cid.replace(".mp4", "-") + "watermarked.mp4", ), "video.mp4", function (downloadError) { if (downloadError) { console.error("Error during download:", downloadError); } // Clean up: Delete the temporary local file fs.unlink(tempLocalPath, (unlinkError) => { if (unlinkError) { console.error( "Error deleting the temporary video file:", unlinkError, ); } }); }, ); }) .inputFormat("mp4") .run();
关键说明
- 第一个
drawtext滤镜处理完原始视频流后,通过[v1]命名输出临时流; - 第二个
drawtext滤镜基于[v1](已添加第一行水印的视频流)进行处理,实现两行水印的叠加; - 若第二行水印仍不显示,可检查
y=(h-200)的坐标是否超出视频范围(比如视频高度小于200时,y值为负,水印会被移出可视区域),可调整为固定值或相对比例(如y=h*0.8)。
内容的提问来源于stack exchange,提问作者Luka Koridze
相关产品推荐
相关产品推荐

