服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现为视频添加水印

C#实现为视频添加水印

2023-02-28 13:57Csharp小记 C#

这篇文章主要为大家详细介绍了C#如何使用ffmpeg命令,分别实现给视频添加图片水印以及文字水印,文中的示例代讲解详细,感兴趣的可以了解一下

文章描述

以下主要还是使用到了ffmpeg命令,分别实现了给视频添加图片水印以及文字水印。

C#实现为视频添加水印

 

开发环境

.NET Framework版本:4.5

 

开发工具

Visual Studio 2013

 

实现代码

 public static void Run(string cmd)
      {
          try
          {
              string ffmpeg = AppDomain.CurrentDomain.BaseDirectory + "ffmpeg.exe";
              ProcessStartInfo startInfo = new ProcessStartInfo(ffmpeg);
              startInfo.UseShellExecute = false;
              startInfo.CreateNoWindow = true;
              startInfo.WindowStyle = ProcessWindowStyle.Hidden;
              startInfo.Arguments = cmd;
              Process process = Process.Start(startInfo);
              process.WaitForExit(3000);
              process.Kill();
          }
          catch { }
      }
/// <summary>
      /// 按时间获取某帧图片
      /// </summary>
      /// <param name="videoPath">视频路径</param>
      /// <param name="outPath">输出路径</param>
      /// <param name="frameTime">时间(格式:00:00:01)</param>
      public static void GetFrame(string videoPath, string outPath, string frameTime)
      {
          Run(string.Format("-ss 00:00:01 -i {1} {2}", frameTime, videoPath, outPath));
      }

      /// <summary>
      /// 批量添加图片水印
      /// </summary>
      /// <param name="videoPath"></param>
      /// <param name="outPath"></param>
      /// <param name="listImg"></param>
      public static void AddImageMark(string videoPath, string outPath, List<ImgMark> listImg)
      {
          string imgs = "", postions = "";
          foreach (ImgMark mark in listImg)
          {
              imgs += " -i " + mark.ImgPath;
              postions += "overlay=" + mark.Postion.X + ":" + mark.Postion.Y+",";
          }
          postions = postions.Remove(postions.Length - 1);
          Run(string.Format("-i {0}{1} -filter_complex \"{2}\" {3}", videoPath, imgs, postions, outPath));
      }

      /// <summary>
      /// 添加文字水印
      /// </summary>
      /// <param name="videoPath">视频路径</param>
      /// <param name="outPath">输出路径</param>
      /// <param name="textMark">水印属性</param>
      public static void AddTextMark(string videoPath, string outPath, TextMark textMark)
      {
          Run(string.Format(" -i {0}  -vf \"drawtext=fontfile={1}: text='{2}':x={3}:y={4}:fontsize={5}:fontcolor={6}\" {7}", videoPath, textMark.FontFile, textMark.Text, textMark.X, textMark.Y, textMark.FontSize, textMark.FontColor.Name.ToLower(), outPath));
          //@"%{localtime\:%Y\-%m\-%d %H-%M-%S}"
      }
 private void btn_select_Click(object sender, EventArgs e)
      {
          OpenFileDialog ofd = new OpenFileDialog();
          ofd.Filter = "视频|*.mp4;*.avi";
          ofd.Title = "请选择视频文件";
          ofd.InitialDirectory = Application.StartupPath;
          if (ofd.ShowDialog() == DialogResult.OK)
          {
              axWindowsMediaPlayer1.URL = ofd.FileName;
          }
      }

      private void btn_text_Click(object sender, EventArgs e)
      {
          if (!File.Exists(axWindowsMediaPlayer1.URL))
          {
              MessageBox.Show("未选择视频");
              return;
          }
          SaveFileDialog sfd = new SaveFileDialog();
          sfd.Filter = "视频|*.mp4";
          sfd.AddExtension = true;
          if (sfd.ShowDialog() == DialogResult.OK)
          {
              TextMark mark = new TextMark
              {
                  Text = "这里是水印",
                  FontColor = Color.Red,
                  FontFile = "simsun.ttc",
                  FontSize = 100,
                  X = 80,
                  Y = 60
              };
              FFmpegUtil.AddTextMark(axWindowsMediaPlayer1.URL, sfd.FileName, mark);
              axWindowsMediaPlayer2.URL = sfd.FileName;
          }
      }

      private void btn_img_Click(object sender, EventArgs e)
      {
          if (!File.Exists(axWindowsMediaPlayer1.URL))
          {
              MessageBox.Show("未选择视频");
              return;
          }
          SaveFileDialog sfd = new SaveFileDialog();
          sfd.Filter = "视频|*.mp4";
          sfd.AddExtension = true;
          if (sfd.ShowDialog() == DialogResult.OK)
          {
              FFmpegUtil.AddImageMark(axWindowsMediaPlayer1.URL, sfd.FileName, new List<ImgMark>{
                  new ImgMark {
                  ImgPath=@"C:\Users\Zero\Desktop\a\\1.png",                   Postion=new Point(60,60)},
                  new ImgMark {ImgPath=@"C:\Users\Zero\Desktop\a\\1.png",             Postion=new Point(60,200)}});
              axWindowsMediaPlayer2.URL = sfd.FileName;
          }
      }

 

实现效果

C#实现为视频添加水印

C#实现为视频添加水印

代码解析:着重介绍下添加文字水印的,由于很多时候我们需要添加的是中文,所以需要将字体包先放入到ffmepg的同级目录,然后指定该字体。

到此这篇关于C#实现为视频添加水印的文章就介绍到这了,更多相关C#视频添加水印内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://mp.weixin.qq.com/s/g6Rx7mnIK4rhJxmZS3gX5A

延伸 · 阅读

精彩推荐
  • C#C#中#define后面只加一个参数的解释

    C#中#define后面只加一个参数的解释

    今天小编就为大家分享一篇关于C#中#define后面只加一个参数的解释,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    passtome7972022-07-20
  • C#Unity实现移动物体到鼠标点击位置

    Unity实现移动物体到鼠标点击位置

    这篇文章主要为大家详细介绍了Unity实现移动物体到鼠标点击位置,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    XxM_J6332022-10-08
  • C#Unity Shader实现描边OutLine效果

    Unity Shader实现描边OutLine效果

    这篇文章主要为大家详细介绍了Unity Shader实现描边OutLine效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    elegentbeauty7072022-08-20
  • C#C#表达式树讲解

    C#表达式树讲解

    本文详细讲解了C#表达式树的创建、生成和使用,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    痴者工良4602022-12-16
  • C#DataGridView自定义单元格表示值、Error图标显示的方法介绍

    DataGridView自定义单元格表示值、Error图标显示的方法介绍

    这篇文章介绍了DataGridView自定义单元格表示值、Error图标显示的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起...

    .NET开发菜鸟9102023-02-15
  • C#如何使用C#中的Lazy的使用方法

    如何使用C#中的Lazy的使用方法

    这篇文章主要介绍了如何使用C#中的Lazy的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    一线码农7472022-10-29
  • C#vscode设置Fira_Code字体及改变编辑器字体、背景颜色的代码详解

    vscode设置Fira_Code字体及改变编辑器字体、背景颜色的代码详解

    这篇文章主要介绍了vscode设置Fira_Code字体及改变编辑器字体、背景颜色,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借...

    CodeJasmine7182022-10-07
  • C#C#集合遍历时删除和增加元素的方法

    C#集合遍历时删除和增加元素的方法

    这篇文章主要介绍了C#集合遍历时删除和增加元素的方法,结合实例形式分析了C#针对集合元素的遍历、添加与删除等操作实现方法与注意事项,需要的朋友可...

    codingsilence8742021-11-29