国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C# 使用FFmpeg為視頻添加水印的完整指南

開(kāi)發(fā) 前端
視頻水印是保護(hù)版權(quán)、標(biāo)識(shí)視頻來(lái)源的重要技術(shù)。本文將詳細(xì)介紹如何使用C#和FFmpeg為視頻添加水印,并提供多種實(shí)現(xiàn)方式。

視頻水印是保護(hù)版權(quán)、標(biāo)識(shí)視頻來(lái)源的重要技術(shù)。本文將詳細(xì)介紹如何使用C#和FFmpeg為視頻添加水印,并提供多種實(shí)現(xiàn)方式。

準(zhǔn)備工作

環(huán)境依賴

  • .NET Framework 4.7.2 或更高版本
  • FFmpeg(需要下載并配置系統(tǒng)環(huán)境變量)
  • NuGet包:Xabe.FFmpeg

安裝NuGet包

使用Package Manager Console安裝:

Install-Package Xabe.FFmpeg

基本水印實(shí)現(xiàn)

文字水印

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xabe.FFmpeg;

namespace App08
{
    public class VideoWatermarker
    {

        /// <summary>  
        /// 為視頻添加文字水印  
        /// </summary>  
        /// <param name="inputVideo">輸入視頻路徑</param>  
        /// <param name="outputVideo">輸出視頻路徑</param>  
        /// <param name="watermarkText">水印文字內(nèi)容</param>  
        public async Task AddTextWatermarkAsync(
            string inputVideo,
            string outputVideo,
            string watermarkText)
        {
            try
            {
                // 確保已設(shè)置 FFmpeg 執(zhí)行文件路徑  
                FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");

                // 創(chuàng)建轉(zhuǎn)換  
                IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(inputVideo);

                // 配置轉(zhuǎn)換參數(shù)  
                var conversion = FFmpeg.Conversions.New()
                    .AddStream(mediaInfo.VideoStreams)
                    .AddStream(mediaInfo.AudioStreams)
                    .AddParameter($"-vf \"drawtext=fontfile=msyh.ttc:" +
                        $"text='{watermarkText}':" +
                        "fontcolor=white:" +
                        "fontsize=24:" +
                        "box=1:" +
                        "boxcolor=black@0.5:" +
                        "boxborderw=5:" +
                        "x=(w-text_w)/2:" +
                        "y=(h-text_h)/2\"")
                    .SetOutput(outputVideo);

                // 執(zhí)行轉(zhuǎn)換  
                await conversion.Start();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"水印添加失?。簕ex.Message}");
                throw;
            }
        }
    }
}
static async Task Main(string[] args)
{
    VideoWatermarker watermarker = new VideoWatermarker();
    await watermarker.AddTextWatermarkAsync("D:\\Video\\1.mp4", "d:\\output.mp4", "IDIOSOFT");
}

圖片水印

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xabe.FFmpeg;

namespace App08
{
    public class ImageWatermarker
    {
        public async Task AddImageWatermarkAsync(
            string inputVideo,
            string outputVideo,
            string watermarkImage)
        {
            try
            {
                // 設(shè)置 FFmpeg 路徑  
                FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");

                // 創(chuàng)建轉(zhuǎn)換配置  
                IConversion conversion = FFmpeg.Conversions.New()
                    .AddParameter($"-i \"{inputVideo}\" -i \"{watermarkImage}\" " +
                                $"-filter_complex \"[0:v][1:v] overlay=W-w-10:10\" " +
                                $"-c:a copy")
                    .SetOutput(outputVideo);

                // 添加進(jìn)度報(bào)告  
                conversion.OnProgress += (sender, args) =>
                {
                    var percent = args.Percent;
                    Console.WriteLine($"處理進(jìn)度: {percent:F1}%");
                };

                // 添加完成處理程序  
                conversion.OnDataReceived += (sender, args) =>
                {
                    if (!string.IsNullOrEmpty(args.Data))
                    {
                        Console.WriteLine($"FFmpeg輸出: {args.Data}");
                    }
                };

                // 執(zhí)行轉(zhuǎn)換  
                await conversion.Start();

                Console.WriteLine("水印添加成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"圖片水印添加失?。簕ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"內(nèi)部錯(cuò)誤:{ex.InnerException.Message}");
                }
                throw;
            }
        }
    }
}

如果需要調(diào)整水印位置,可以修改overlay參數(shù):

  • 右上角:overlay=W-w-10:10
  • 左下角:overlay=10:H-h-10
  • 右下角:overlay=W-w-10:H-h-10
  • 居中:overlay=(W-w)/2:(H-h)/2

其中:

  • W: 視頻寬度
  • H: 視頻高度
  • w: 水印寬度
  • h: 水印高度

高級(jí)水印技巧

動(dòng)態(tài)水印位置

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xabe.FFmpeg;

namespace App08
{
    public class ImageWatermarker
    {
        public async Task AddImageWatermarkAsync(
            string inputVideo,
            string outputVideo,
            string watermarkImage)
        {
            try
            {
                // 設(shè)置 FFmpeg 路徑  
                FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");

                // 創(chuàng)建轉(zhuǎn)換配置  
                IConversion conversion = FFmpeg.Conversions.New()
                    .AddParameter($"-i \"{inputVideo}\" -i \"{watermarkImage}\" " +  // Added input video parameter  
                                "-filter_complex \"" +
                                "[0:v][1:v]overlay='if(gte(t,2),main_w-overlay_w-10,10):" +
                                "if(gte(t,2),main_h-overlay_h-10,10)'" +
                                "\" -codec:a copy")
                    .SetOutput(outputVideo);

                // 添加進(jìn)度報(bào)告  
                conversion.OnProgress += (sender, args) =>
                {
                    var percent = args.Percent;
                    Console.WriteLine($"處理進(jìn)度: {percent:F1}%");
                };

                // 添加完成處理程序  
                conversion.OnDataReceived += (sender, args) =>
                {
                    if (!string.IsNullOrEmpty(args.Data))
                    {
                        Console.WriteLine($"FFmpeg輸出: {args.Data}");
                    }
                };

                // 執(zhí)行轉(zhuǎn)換  
                await conversion.Start();

                Console.WriteLine("水印添加成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"圖片水印添加失?。簕ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"內(nèi)部錯(cuò)誤:{ex.InnerException.Message}");
                }
                throw;
            }
        }


    }
}

圖片圖片

// 創(chuàng)建轉(zhuǎn)換配置  
IConversion conversion = FFmpeg.Conversions.New()
    .AddParameter($"-i \"{inputVideo}\" -i \"{watermarkImage}\" " +
                "-filter_complex \"" +
                "[0:v][1:v]overlay=" +
                "'if(lt(mod(t,8),2),10," +                           // 0-2秒:左上角  
                "if(lt(mod(t,8),4),main_w-overlay_w-10," +          // 2-4秒:右上角  
                "if(lt(mod(t,8),6),10," +                           // 4-6秒:左下角  
                "main_w-overlay_w-10))):" +                         // 6-8秒:右下角  
                "if(lt(mod(t,8),2),10," +                           // 0-2秒:左上角  
                "if(lt(mod(t,8),4),10," +                           // 2-4秒:右上角  
                "if(lt(mod(t,8),6),main_h-overlay_h-10," +          // 4-6秒:左下角  
                "main_h-overlay_h-10)))'" +                         // 6-8秒:右下角  
                "\" -codec:a copy")
    .SetOutput(outputVideo);

參數(shù)說(shuō)明:

水印位置循環(huán)邏輯:

使用mod(t,8)將時(shí)間分成8秒一個(gè)循環(huán),然后在這8秒內(nèi)分配四個(gè)不同的位置

透明度控制

// 創(chuàng)建轉(zhuǎn)換配置  
IConversion conversion = FFmpeg.Conversions.New()
    .AddParameter($"-i \"{inputVideo}\" -i {watermarkImage} " +
    "-filter_complex \"" +
    "[1:v]format=rgba,colorchannelmixer=aa=0.5[watermark];" +
    "[0:v][watermark]overlay=10:10" +
    "\" -codec:a copy")
    .SetOutput(outputVideo);

注意事項(xiàng)

  • 確保FFmpeg正確安裝
  • 處理大視頻文件時(shí)注意內(nèi)存占用
  • 水印不應(yīng)過(guò)度遮擋視頻內(nèi)容

結(jié)論

通過(guò)C#和FFmpeg,我們可以靈活地為視頻添加各種類(lèi)型的水印,保護(hù)內(nèi)容并增加版權(quán)標(biāo)識(shí)。

責(zé)任編輯:武曉燕 來(lái)源: 技術(shù)老小子
相關(guān)推薦

2009-08-12 17:19:51

ASP.NET圖片加水

2022-05-04 18:26:25

PDF水印Python

2023-09-27 12:11:08

Python水印Pillow

2024-11-29 07:45:38

C#離線語(yǔ)音文字

2021-09-02 15:25:54

技術(shù)視頻摳圖

2024-12-12 08:50:30

開(kāi)源多媒體框架

2009-11-24 15:43:17

PHP給圖片加水印

2024-08-01 08:37:46

vue圖片性能

2025-02-08 10:58:07

2024-03-19 08:35:30

Vue3添加水印維護(hù)版權(quán)標(biāo)識(shí)

2023-12-26 08:00:00

微前端React

2025-04-09 08:00:00

2025-02-24 00:10:00

2009-12-07 15:41:51

PHP圖片加水印

2016-09-06 21:09:35

Phpgd庫(kù)圖片水印

2024-11-06 16:22:26

NetMQC#

2022-05-13 09:36:06

Python水印命令

2009-09-01 16:12:41

C#命名指南

2024-04-28 11:25:02

C#JSON庫(kù)

2021-04-22 11:27:24

Python命令水印
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

大色综合视频网站在线播放| 蜜臀va亚洲va欧美va天堂| 伊人久久亚洲美女图片| 国产亚洲视频在线| 欧美综合在线播放| 91精品一区二区三区综合| 日韩欧美国产一区在线观看| 久久亚洲中文字幕无码| 97久久精品人搡人人玩| 成人一级福利| √…a在线天堂一区| 国产精品五区| 天天色综合成人网| a美女胸又www黄视频久久| 日韩av影视综合网| 成人区精品一区二区| 成人国产一区| 国外色69视频在线观看| 国产网站在线| 亚洲福利视频免费观看| a级片免费在线观看| 久久久久九九视频| 国产深夜男女无套内射| 国产一区二区三区亚洲| 国产精品美女在线播放| 国产精品3区| 久久夜精品va视频免费观看| 免费一级欧美片在线观看网站| 欧美片第1页综合| 久草福利在线| 一区二区免费看| 一级毛片免费视频| 一本色道久久加勒比精品 | 国产精品嫩草影院av蜜臀| 第四色婷婷基地| 一区二区三区四区在线免费观看| 在线观看视频色潮| 欧美电影影音先锋| 少妇淫片在线影院| 欧美日韩成人在线播放| 无码日韩精品一区二区免费| 国产深夜精品福利| 亚洲伊人观看| 久久久久免费看黄a片app| 中文字幕一区二区三| 国产尤物视频在线| 亚洲人成绝费网站色www| 日韩精品一区二区三区免费视频| 26uuu日韩精品一区二区| 亚洲欧美综合| 久久久国产一区二区| www.久久草.com| 欧美精品一区二区三区久久久| 亚洲电影观看| 日韩欧美黄色影院| 伊人久久av导航| 国产亚洲亚洲| 国自产拍偷拍精品啪啪一区二区| 日韩高清不卡一区| 99久久国产宗和精品1上映| 亚洲综合999| 日本阿v视频在线观看| 国产精品久久毛片a| 视频国产在线观看| www.一区二区.com| 91国在线观看| 日韩亚洲一区二区| 青青草成人在线观看| 欧美三级一级片| 99精品国产在热久久| 亚洲精品永久免费| 都市激情亚洲欧美| 爽爽爽爽爽爽爽成人免费观看| 日本老太婆做爰视频| 一区二区三区视频在线观看| yourporn在线观看视频| 色阁综合伊人av| 久久中文字幕av| 91免费版看片| 欧美午夜电影在线| 天堂久久一区| 欧美日韩国产精品一卡| 亚洲色图都市小说| 鲁鲁在线中文| 91视频88av| 亚洲一区二区三区无吗| 欧美 日韩 国产一区| 老**午夜毛片一区二区三区| 国产精国产精品| 国产精品午夜在线| 99久久精品一区二区成人| 欧美影视一区在线| 日韩在线伦理| 国产欧美精品va在线观看| 成人av网在线| 免费黄色在线看| 欧美性视频在线| 国产福利一区二区| 午夜伦理在线| 欧美一区三区三区高中清蜜桃| 狠狠色丁香婷婷综合久久片| 欧美色图另类| 亚州精品天堂中文字幕| 国产成人小视频| 女人天堂av在线播放| 波多野结衣精品久久| 亚洲欧美成人一区二区三区| 国产精品**亚洲精品| 小泽玛利亚av在线| 日韩欧美国产三级| 亚洲国产裸拍裸体视频在线观看乱了中文| 超碰色偷偷男人的天堂| 日韩性xxxx爱| 国产精品 欧美精品| 污污网站在线看| 国产在线精品一区二区中文| 偷偷要91色婷婷| 国产精品嫩模av在线| 国产精品v日韩精品v在线观看| 日韩亚洲欧美成人| 高清shemale亚洲人妖| 国产精品伦理| 吴梦梦av在线| 精品欧美久久久| 久久午夜视频| 手机在线免费观看av| 日本一区精品| 欧美一区二区三区影视| 最新日韩在线| av在线免费网站| 色一情一乱一伦一区二区三欧美| 56国语精品自产拍在线观看| 韩国亚洲精品| 成年人视频网站在线| 好看的日韩精品| 69堂国产成人免费视频| 日本v片在线高清不卡在线观看| 超碰中文在线| 日本一本中文字幕| 九九热视频这里只有精品| 国产精品久久久久久久久果冻传媒| 噜噜噜天天躁狠狠躁夜夜精品| av手机在线看| 亚洲一区二区三区在线视频 | 成人中心免费视频| 五月综合激情网| 婷婷成人基地| 在线观看av的网站| 亚洲国产欧美不卡在线观看| 精品亚洲男同gayvideo网站| 成人一区二区视频| 国产美女撒尿一区二区| 伊人网在线视频| 免费一区二区三区| 一区二区国产精品视频| 中国色在线观看另类| 国产精品久久久久一区二区三区厕所 | 欧美性生活影院| 亚洲综合激情| 日本免费一区二区三区四区| 日韩福利视频在线| 国产精品极品美女在线观看免费| 色哟哟国产精品| 久久99精品久久久久| 在线播放成人| 蜜臀在线观看| 欧美精彩一区二区三区| 亚洲人成网站色ww在线| 欧美国产日韩精品免费观看| 欧美在线免费| 写真福利精品福利在线观看| 好紧好硬好湿我太爽了| 看高清中日韩色视频| 国产一区二区三区视频免费| 亚洲另类在线一区| 日韩中文字幕麻豆| 国产精品成人自拍| 国产原厂视频在线观看| 久青草视频在线播放| 全黄性性激高免费视频| 91日本在线视频| 日韩中文字幕一区二区| 免费国产成人看片在线| 亚洲蜜桃在线| 性欧美视频videos6一9| 一区二区三区欧美| 久久99久久99精品免观看粉嫩 | 91在线精品视频| 亚洲精品国产精品自产a区红杏吧| 国产性色一区二区| 欧美阿v一级看视频| 成人在线黄色| 免费xxxxx网站中文字幕| 国产日韩二区| 欧美极品少妇与黑人| 日韩欧美你懂的| 亚洲人成精品久久久久| 麻豆91精品91久久久的内涵| 久久a爱视频| 成人av观看|