成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
視頻水印是保護版權、標識視頻來源的重要技術。本文將詳細介紹如何使用C#和FFmpeg為視頻添加水印,并提供多種實現方式。

視頻水印是保護版權、標識視頻來源的重要技術。本文將詳細介紹如何使用C#和FFmpeg為視頻添加水印,并提供多種實現方式。

準備工作

環境依賴

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

安裝NuGet包

使用Package Manager Console安裝:

Install-Package Xabe.FFmpeg

基本水印實現

文字水印

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">水印文字內容</param>  
        public async Task AddTextWatermarkAsync(
            string inputVideo,
            string outputVideo,
            string watermarkText)
        {
            try
            {
                // 確保已設置 FFmpeg 執行文件路徑  
                FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");

                // 創建轉換  
                IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(inputVideo);

                // 配置轉換參數  
                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);

                // 執行轉換  
                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
            {
                // 設置 FFmpeg 路徑  
                FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");

                // 創建轉換配置  
                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);

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

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

                // 執行轉換  
                await conversion.Start();

                Console.WriteLine("水印添加成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"圖片水印添加失敗:{ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"內部錯誤:{ex.InnerException.Message}");
                }
                throw;
            }
        }
    }
}

如果需要調整水印位置,可以修改overlay參數:

  • 右上角: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: 水印高度

高級水印技巧

動態水印位置

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
            {
                // 設置 FFmpeg 路徑  
                FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");

                // 創建轉換配置  
                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);

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

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

                // 執行轉換  
                await conversion.Start();

                Console.WriteLine("水印添加成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"圖片水印添加失敗:{ex.Message}");
                if (ex.InnerException != null)
                {
                    Console.WriteLine($"內部錯誤:{ex.InnerException.Message}");
                }
                throw;
            }
        }


    }
}

圖片圖片

// 創建轉換配置  
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);

參數說明:

水印位置循環邏輯:

使用mod(t,8)將時間分成8秒一個循環,然后在這8秒內分配四個不同的位置

透明度控制

// 創建轉換配置  
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);

注意事項

  • 確保FFmpeg正確安裝
  • 處理大視頻文件時注意內存占用
  • 水印不應過度遮擋視頻內容

結論

通過C#和FFmpeg,我們可以靈活地為視頻添加各種類型的水印,保護內容并增加版權標識。

責任編輯:武曉燕 來源: 技術老小子
相關推薦

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#離線語音文字

2021-09-02 15:25:54

技術視頻摳圖

2024-12-12 08:50:30

開源多媒體框架

2009-11-24 15:43:17

PHP給圖片加水印

2025-02-08 10:58:07

2024-08-01 08:37:46

vue圖片性能

2024-03-19 08:35:30

Vue3添加水印維護版權標識

2023-12-26 08:00:00

微前端React

2025-02-24 00:10:00

2025-04-09 08:00:00

2016-09-06 21:09:35

Phpgd庫圖片水印

2009-12-07 15:41:51

PHP圖片加水印

2024-11-06 16:22:26

NetMQC#

2009-09-01 16:12:41

C#命名指南

2024-04-28 11:25:02

C#JSON

2022-05-13 09:36:06

Python水印命令

2022-03-28 14:08:02

Python數據清洗數據集
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频久久 | 亚洲一区二区免费视频 | 日韩精品1区2区3区 成人黄页在线观看 | 在线视频 亚洲 | 国产三级大片 | 91精品国产一区二区三区 | 伊人色综合久久天天五月婷 | 久久99精品久久久 | 成人免费淫片aa视频免费 | 精品国模一区二区三区欧美 | 99国产精品99久久久久久 | 日韩欧美国产电影 | 日韩视频在线一区 | 精品国产精品一区二区夜夜嗨 | 欧美亚洲高清 | 国产精品一区久久久 | 久久美女网 | 久久乐国产精品 | 午夜影视网 | 人人鲁人人莫人人爱精品 | 伊人春色在线 | 国产成人精品a视频一区www | 欧美一级特黄aaa大片在线观看 | 中文字幕第二十页 | 亚洲最大成人综合 | 欧美日韩在线一区二区 | 日韩成人一区 | 日韩在线中文字幕 | 天天操网 | 亚洲精品久久久久中文字幕二区 | 日韩不卡一二区 | 天天射网站 | 国产精品成人一区二区三区 | 久久精品欧美一区二区三区麻豆 | 亚洲天堂一区 | 一区精品国产欧美在线 | 日韩精品一区二区三区视频播放 | 亚洲成人黄色 | 亚洲精品一区二区三区在线 | 色偷偷888欧美精品久久久 | 91精品国产综合久久福利软件 |