vs实现下ffmpeg 添加视频水印

vs实现ffmpeg 添加视频水印

1.下载ffmpeg.exe使用

链接: ffmpeg官网地址

2.字库所在路径

ffmpeg添加中文水印需要用到中文字库文件
电脑自带 C:\Windows\Fonts

3.代码调用
功能一,添加中文水印 videowm()
功能二,添加图片水印 Imagewm()
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
#define _MAX_DRIVE 50

//添加文字水印    ffmpeg路径设置绝对路径或者配置环境变量
//参数1 视频路径 参数2 水印文件txt或者字符串()
//simsun.ttc(相对路径) 字体文件(程序运行目录) alpha 透明度 fontsize 字体大小
void videowm(const char* filepath,const char* watermark)
{
    char video_date[512];
    //生成路径
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char fname[_MAX_FNAME];
    char ext[_MAX_EXT];
     _splitpath( filepath, drive, dir, fname, ext );

	
	char createfile[512];
	memset(createfile, 0, sizeof(createfile)); 
	sprintf(createfile,"%s%s%s%s%s",drive,dir,fname,"mk",ext);
	
	int i = 0;
	while(1)
	{
		FILE *fp;
		if((fp=fopen(createfile,"r"))!=NULL)
		{
			fclose(fp);
			i++;
			memset(createfile, 0, sizeof(createfile)); 
			sprintf(createfile,"%s%s%s%s%d%s",drive,dir,fname,"mk_",i,ext);//生成的文件名,防止重复
		}
		else
		{
			break;
		}
	}
    //txt文本判断
     _splitpath( watermark, drive, dir, fname, ext );
     if(strstr(ext,".txt"))
     {
         sprintf(video_date,"ffmpeg -i %s -vf \"drawtext=fontsize=20:fontfile=./simsun.ttc:textfile=%s:x=20:y=20:fontcolor=blue:alpha=0.5\" %s",filepath,watermark,createfile);
         system(video_date);
     }
     else
     {
         sprintf(video_date,"ffmpeg -i %s -vf drawtext=fontsize=20:fontfile=./simsun.ttc:text=%s:x=20:y=20:fontcolor=blue:alpha=0.5 %s",filepath,watermark,createfile);
         system(video_date);
     }
}

//添加图片水印
//参数1 视频路径 参数2 水印图片
//lut=a=val 透明度
void Imagewm(const char* filepath,const char* Imagemark)
{
    char Image_data[512];
    //生成路径
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char fname[_MAX_FNAME];
    char ext[_MAX_EXT];
     _splitpath( filepath, drive, dir, fname, ext );

	char createfile[512];
	memset(createfile, 0, sizeof(createfile)); 
	sprintf(createfile,"%s%s%s%s%s",drive,dir,fname,"mk",ext);

	int i = 0;
	while(1)
	{
		FILE *fp;
		if((fp=fopen(createfile,"r"))!=NULL)
		{
			fclose(fp);
			memset(createfile, 0, sizeof(createfile)); 
			i++;
			sprintf(createfile,"%s%s%s%s%d%s",drive,dir,fname,"mk_",i,ext);//生成的文件名,防止重复
		}
		else
		{
			break;
		}
	}
    sprintf(Image_data,"ffmpeg -i %s -vf \"movie=%s, scale=50:50, lut=a=val*0.5[watermark];[in][watermark] overlay=10:10[out]\" %s",filepath,Imagemark,createfile);
    system(Image_data);
}


int main()
{
	string filepath = "C://Users//123456//Desktop//12//1.mp4";//视频路径

    //水印文件路径为程序运行的相对路径
    //string watermark = "./12//1.png";
    string watermark = "./12//1.txt";
    //文字水印 也可以传字符串
    videowm(filepath.c_str(),watermark.c_str());
    
    //图片水印 
    //Imagewm(filepath.c_str(),watermark.c_str());
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值