ffmpeg不用filter添加水印

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dancing_night/article/details/80816268

1、流程介绍

openInput->openPic->InitOutput->readFrame->decode->operateAvframe->encode->writeFile->end

2、核心代码

核心代码为处理AVFrame如下:

for(int j = 0; j < m_markH; j++)
		{
			if ((m_y + j) < m_beMarkH)
			{
				for(int i = 0; i < m_markW; i++)
				{
					if ((m_x + i) < m_beMarkW)
					{
						if (0 == m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 3])
						{
							continue;
						}

						unsigned char A = /*(((float)m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 3) + 3]) / 255.0) * */
							m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 3];

						float logoAlpha = A / 255.0;
						logoAlpha = logoAlpha * m_alpha;


						unsigned char R = 
							m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 0];
						unsigned char G = 
							m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 1];;
						unsigned char B = 
							m_markFrame->data[0][(j) * m_markFrame->linesize[0] + (i * 4) + 2];
						

						tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 0] = 
							tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 0] * (1- logoAlpha) + 
							R * logoAlpha;

						tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 1] = 
							tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 1] * (1- logoAlpha) + 
							G * logoAlpha;

						tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 2] = 
							tmpMixFrame->data[0][(m_y + j) * tmpMixFrame->linesize[0] + (m_x + i) * 3 + 2] * (1- logoAlpha) + 
							B * logoAlpha;
					}
				}
			}
		}

3、工程下载

工程地址

猜你喜欢

转载自blog.csdn.net/dancing_night/article/details/80816268