欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C#如何實現(xiàn)分割視頻

 更新時間:2022年12月29日 08:58:01   作者:Csharp小記  
這篇文章主要為大家詳細介紹了C#如何實現(xiàn)將視頻文件分割成一幀幀圖片的方法,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下

文章描述

在前面兩篇寫完了對于GIF動態(tài)圖片的分割和合成,這一篇來寫下將視頻文件分割成一幀幀圖片的方法。

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

.NET Framework版本:4.5

開發(fā)工具

Visual Studio 2013

實現(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(5000);
                process.Kill();
            }
            catch { }
        }

        /// <summary>
        /// 分割視頻
        /// </summary>
        /// <param name="videoPath">視頻路徑</param>
        /// <param name="outPath">輸出圖片路徑</param>
        public static void Split(string videoPath, string outPath)
        {
            Run(string.Format(" -i {0}  -r 10 -y -f image2 -ss 00:00:01 {1}\\%d.jpg", videoPath, outPath));
        }

        /// <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));
        }
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;
                string outPath = Application.StartupPath + "\\cover.jpg";
                FFmpegUtil.GetFrame(ofd.FileName, outPath, "00:00:01");
                pictureBox1.Image = Image.FromFile(outPath);
            }
        }

        private void btn_split_Click(object sender, EventArgs e)
        {
            if(!File.Exists(axWindowsMediaPlayer1.URL)){
                MessageBox.Show("未選擇視頻");
                return;
            }
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.Description = "選擇存儲位置";
            fbd.ShowNewFolderButton = true;
           if (fbd.ShowDialog() == DialogResult.OK)
            {
                string[] files = Directory.GetFiles(fbd.SelectedPath);
                foreach (string file in files)
                {
                    File.Delete(file);
                }
                FFmpegUtil.Split(axWindowsMediaPlayer1.URL, fbd.SelectedPath);
                if (MessageBox.Show("視頻分割完成,是否打開文件夾?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    Process.Start(fbd.SelectedPath);
                }
            }

        }

實現(xiàn)效果

代碼解析:視頻分割技術(shù)主要是利用了FFMpeg來實現(xiàn)的,C#在這里其實只是一個調(diào)用者。這個在方法Run中可以看的出來,首先是需要將FFMpeg放到debug目錄下的,然后使用Process類來調(diào)用;這里有個問題需要注意下,就是調(diào)用后經(jīng)常會被卡住,沒辦法退出來,所以使用了WaitForExit(2000)來處理。并且在等待結(jié)束后將該進程給Kill掉了,這個方式可能不太規(guī)范,如有更好的方法,感謝指教。

調(diào)用的話就直接輸入命令就可以了,代碼中分別使用了以下兩條命令:

  • 獲取第一秒的圖片作為封面圖顯示到了圖片控件中
  • 將視頻分割成一張張圖片并保存到了文件夾中

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

相關(guān)文章

  • 如何在C#中使用注冊表

    如何在C#中使用注冊表

    這篇文章主要介紹了如何在C# 使用注冊表,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • Unity使用ScrollRect制作翻頁

    Unity使用ScrollRect制作翻頁

    這篇文章主要為大家詳細介紹了Unity使用ScrollRect制作翻頁,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 詳解C# List<T>的Contains,Exists,Any,Where性能對比

    詳解C# List<T>的Contains,Exists,Any,Where性能對比

    這篇文章主要介紹了詳解C# List<T>的Contains,Exists,Any,Where性能對比,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Unity Undo實現(xiàn)原理和使用方法詳解

    Unity Undo實現(xiàn)原理和使用方法詳解

    本文將詳細介紹Unity Undo實現(xiàn)原理和使用方法,并提供多個使用例子,幫助開發(fā)者更好地理解和應(yīng)用該功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • .NET Core開發(fā)之配置詳解

    .NET Core開發(fā)之配置詳解

    這篇文章給大家分享了.NET Core開發(fā)中相關(guān)配置的知識點內(nèi)容,有需要的朋友們可以參考下。
    2018-08-08
  • Unity實現(xiàn)畫線條功能

    Unity實現(xiàn)畫線條功能

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)畫線條功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C#利用控件拖拽技術(shù)制作拼圖游戲

    C#利用控件拖拽技術(shù)制作拼圖游戲

    這篇文章主要介紹了C#利用控件拖拽技術(shù)制作拼圖游戲的方法以及核心代碼,需要的朋友可以參考下
    2015-06-06
  • 在web.config和app.config文件中增加自定義配置節(jié)點的方法

    在web.config和app.config文件中增加自定義配置節(jié)點的方法

    本篇文章主要是對在web.config和app.config文件中增加自定義配置節(jié)點的方法進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#利用KPM算法解決字符串匹配問題詳解

    C#利用KPM算法解決字符串匹配問題詳解

    Knuth-Morris-Pratt 字符串查找算法,簡稱為 “KMP算法”,常用于在一個文本串S內(nèi)查找一個模式串P 的出現(xiàn)位置。本文將利用該算法解決字符串匹配問題,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • C#使用Linq to XML進行XPath查詢的代碼實現(xiàn)

    C#使用Linq to XML進行XPath查詢的代碼實現(xiàn)

    最近在用到HtmlAgliltyPack進行結(jié)點查詢時,發(fā)現(xiàn)這里選擇結(jié)點使用的是XPath,所以這里總結(jié)一下在C#中使用XPath查詢XML的方法,習(xí)慣了用Linq,這里也是用的Linq to xml的,需要的朋友可以參考下
    2024-08-08

最新評論