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

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

 更新時間:2022年12月29日 08:58:01   作者:Csharp小記  
這篇文章主要為大家詳細介紹了C#如何實現(xiàn)將視頻文件分割成一幀幀圖片的方法,文中的示例代碼講解詳細,對我們學習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)效果

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

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

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

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

相關文章

  • WinForm繪制圓角的方法

    WinForm繪制圓角的方法

    這篇文章主要介紹了WinForm繪制圓角的方法,涉及C#中GraphicsPath模塊的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 解析C#設計模式編程中備忘錄模式的運用

    解析C#設計模式編程中備忘錄模式的運用

    這篇文章主要介紹了C#設計模式編程中備忘錄模式的運用,備忘錄模式用來保存與對象有關的數(shù)據(jù)用以在將來對對象進行復原,需要的朋友可以參考下
    2016-02-02
  • C#調用百度翻譯API實現(xiàn)一個翻譯功能

    C#調用百度翻譯API實現(xiàn)一個翻譯功能

    一直喜歡用Google Translate API進行在線翻譯,但是服務越來越慢這篇文章,所以只能換一個了,主要給大家介紹了關于C#調用百度翻譯API實現(xiàn)一個翻譯功能的相關資料,需要的朋友可以參考下
    2021-06-06
  • WPF應用啟動慢的問題解決

    WPF應用啟動慢的問題解決

    今天碰到一個奇怪的現(xiàn)象,在某些機器上,進行了系統(tǒng)還原后,WPF應用打開較慢,約有35s。本文先記錄下該問題的解決方案,應用啟動性能官方文檔中有說明,還有搜到的其它方案沒來得及測試,如NGEN update
    2021-05-05
  • asp.net新聞列表生成靜態(tài)頁之批量和單頁生成

    asp.net新聞列表生成靜態(tài)頁之批量和單頁生成

    web程序的高訪問量、大數(shù)據(jù)量、高效的用戶體驗度,使靜態(tài)頁技術在越來越多的網(wǎng)站上發(fā)揮作用。這篇文章主要介紹asp.net新聞列表生成靜態(tài)頁之批量和單頁生成,有需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)Excel與DataTable的數(shù)據(jù)互轉的代碼示例

    C#實現(xiàn)Excel與DataTable的數(shù)據(jù)互轉的代碼示例

    在.NET框架中,使用C#進行Excel數(shù)據(jù)與DataTable之間的轉換是數(shù)據(jù)分析、報表生成、數(shù)據(jù)遷移等操作中的常見需求,這一過程涉及到將Excel文件中的數(shù)據(jù)讀取并加載至DataTable中,本文將介紹如何通過C#語言實現(xiàn)Excel數(shù)據(jù)與DataTable之間的高效轉換,需要的朋友可以參考下
    2024-11-11
  • 詳解如何使用BenchmarkDotNet對.NET代碼進行性能基準測試

    詳解如何使用BenchmarkDotNet對.NET代碼進行性能基準測試

    BenchmarkDotNet是一個基于.NET開源、功能全面、易于使用的性能基準測試框架,這篇文章就來和小編一起學習一下如何使用BenchmarkDotNet對.NET代碼進行性能基準測試吧
    2024-12-12
  • c# Task任務的取消方式

    c# Task任務的取消方式

    文章介紹了如何在C#中使用CancellationTokenSource和CancellationToken來取消任務,通過Task.Run方法和CancellationToken參數(shù),可以控制任務的執(zhí)行,并在需要時取消它們,文章還討論了CancellationToken參數(shù)的重要性
    2024-12-12
  • C#中嵌入SQLite數(shù)據(jù)庫的簡單方法

    C#中嵌入SQLite數(shù)據(jù)庫的簡單方法

    本文給大家介紹的是C#中嵌入SQLite數(shù)據(jù)庫的簡單方法,十分的方便也很實用,有需要的小伙伴可以參考下。
    2015-06-06
  • C#中的那些常用加密算法

    C#中的那些常用加密算法

    本文主要講解一下C#常用的那些加密算法,包括MD5加密、SHA1加密、Base64加密、Des加密、RSA加密等,需要的朋友可以參考下
    2020-11-11

最新評論

沈丘县| 垫江县| 呼伦贝尔市| 宝清县| 台山市| 临洮县| 赣榆县| 田林县| 西昌市| 临颍县| 阳春市| 弥渡县| 台山市| 连山| 龙陵县| 永寿县| 得荣县| 丰城市| 清河县| 临桂县| 马边| 册亨县| 青田县| 毕节市| 灵丘县| 平阴县| 金门县| 平阳县| 宁武县| 建湖县| 澳门| 柯坪县| 鲜城| 高尔夫| 渭源县| 启东市| 株洲市| 宜兴市| 莆田市| 安泽县| 额尔古纳市|