最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)為視頻添加水印

 更新時(shí)間:2023年01月09日 14:19:46   作者:Csharp小記  
這篇文章主要為大家詳細(xì)介紹了C#如何使用ffmpeg命令,分別實(shí)現(xiàn)給視頻添加圖片水印以及文字水印,文中的示例代講解詳細(xì),感興趣的可以了解一下

文章描述

以下主要還是使用到了ffmpeg命令,分別實(shí)現(xiàn)了給視頻添加圖片水印以及文字水印。

開發(fā)環(huán)境

.NET Framework版本:4.5

開發(fā)工具

Visual Studio 2013

實(shí)現(xiàn)代碼

 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>
        /// 按時(shí)間獲取某幀圖片
        /// </summary>
        /// <param name="videoPath">視頻路徑</param>
        /// <param name="outPath">輸出路徑</param>
        /// <param name="frameTime">時(shí)間(格式: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;
            }
        }

實(shí)現(xiàn)效果

代碼解析:著重介紹下添加文字水印的,由于很多時(shí)候我們需要添加的是中文,所以需要將字體包先放入到ffmepg的同級目錄,然后指定該字體。

到此這篇關(guān)于C#實(shí)現(xiàn)為視頻添加水印的文章就介紹到這了,更多相關(guān)C#視頻添加水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# DatagridView常用操作匯總

    C# DatagridView常用操作匯總

    這篇文章主要介紹了C# DatagridView常用操作匯總,羅列了一些常用的用法與技巧,需要的朋友可以參考下
    2014-07-07
  • 詳解C#中的定時(shí)器Timer類及其垃圾回收機(jī)制

    詳解C#中的定時(shí)器Timer類及其垃圾回收機(jī)制

    這篇文章主要介紹了C#中的定時(shí)器Timer類及其垃圾回收機(jī)制,講解了Timer相關(guān)的單線程異步工作,需要的朋友可以參考下
    2016-04-04
  • 分析C# Dictionary的實(shí)現(xiàn)原理

    分析C# Dictionary的實(shí)現(xiàn)原理

    對于C#中的Dictionary類相信大家都不陌生,這是一個(gè)Collection(集合)類型,可以通過Key/Value(鍵值對的形式來存放數(shù)據(jù);該類最大的優(yōu)點(diǎn)就是它查找元素的時(shí)間復(fù)雜度接近O(1)。那么什么樣的設(shè)計(jì)能使得Dictionary類實(shí)現(xiàn)O(1)的時(shí)間復(fù)雜度呢
    2021-06-06
  • C#中的Linq to Xml詳解

    C#中的Linq to Xml詳解

    這篇文章主要介紹了C#中的Linq to Xml詳解,本文給出轉(zhuǎn)換步驟以及大量實(shí)例,講解了生成xml、查詢并修改xml、監(jiān)聽xml事件、處理xml流等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • WinForm使用DataGridView實(shí)現(xiàn)類似Excel表格的查找替換功能

    WinForm使用DataGridView實(shí)現(xiàn)類似Excel表格的查找替換功能

    這篇文章主要介紹了WinForm使用DataGridView實(shí)現(xiàn)類似Excel表格的查找替換功能,現(xiàn)在小編通過本文給大家分享查找替換實(shí)現(xiàn)過程,需要的朋友可以參考下
    2021-07-07
  • C#使用Log4.net記錄日志文件

    C#使用Log4.net記錄日志文件

    這篇文章介紹了C#使用Log4.net記錄日志文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#五類運(yùn)算符使用表達(dá)式樹進(jìn)行操作

    C#五類運(yùn)算符使用表達(dá)式樹進(jìn)行操作

    這篇文章介紹了C#五類運(yùn)算符使用表達(dá)式樹進(jìn)行操作,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C#異常處理的技巧和方法

    C#異常處理的技巧和方法

    在本篇文章里小編給大家整理了關(guān)于C#異常處理的技巧和方法以及相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • C#調(diào)用WebService的方法步驟

    C#調(diào)用WebService的方法步驟

    在日常工作中,如果涉及到與第三方進(jìn)行接口對接,有的會(huì)使用WebService的方式,這篇文章主要講解在.NET?Framework中如何調(diào)用WebService,感興趣的小伙伴跟著小編一起來看看吧
    2025-03-03
  • c#打包文件解壓縮的實(shí)例

    c#打包文件解壓縮的實(shí)例

    下面小編就為大家分享一篇c#打包文件解壓縮的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11

最新評論

巨野县| 双峰县| 潼关县| 淮阳县| 库尔勒市| 澄江县| 航空| 元朗区| 克山县| 孟津县| 大洼县| 和静县| 伊通| 大城县| 永昌县| 伊宁县| 奈曼旗| 武山县| 沧源| 客服| 长沙县| 来凤县| 三明市| 兴海县| 盐源县| 兴安县| 苏尼特右旗| 堆龙德庆县| 萨嘎县| 自贡市| 且末县| 芦溪县| 西昌市| 凤城市| 屯昌县| 九龙城区| 济阳县| 壤塘县| 崇文区| 绩溪县| 隆安县|