예제 #1
0
        public void 正常系_0秒から10秒分だけトリミングして保存()
        {
            FfmpegWrapper.Ffmpeg ffmpeg = new Ffmpeg();

            string appdir = AppDomain.CurrentDomain.BaseDirectory;

            string InputFilePath  = Path.Combine(appdir, "test.wmv");
            string OutputFilePath = Path.Combine(appdir, Ffmpeg.SubFileName(InputFilePath, 2));

            int start    = 0;
            int duration = 5;

            ffmpeg.Triming(InputFilePath, OutputFilePath, start, duration);

            Assert.IsTrue(File.Exists(InputFilePath));
            Assert.IsTrue(File.Exists(OutputFilePath));
        }
예제 #2
0
        //****************************************************//

        /// <summary>
        /// (非同期) トリミング処理
        /// </summary>
        /// <param name="TargetFilePath"></param>
        /// <param name="duration"></param>
        /// <returns></returns>
        public void RunTriming(string TargetFilePath, int duration, bool OverwriteFlg)
        {
            string InputFilePath  = TargetFilePath;
            int    total_duration = ffmpeg.GetVideoDuration(TargetFilePath);

            // 例外処理
            if (duration > total_duration)
            {
                WriteConsole("ファイルの時間が指定した切り取り時間よりも短いです。", FontColors.RED);
                return;
            }

            // Make Sub dir
            string SubDir = Path.Combine(Path.GetDirectoryName(InputFilePath), Path.GetFileNameWithoutExtension(InputFilePath));

            Directory.CreateDirectory(SubDir);

            // 切り出す動画の数
            int N = Convert.ToInt32(Math.Ceiling((double)total_duration / duration));

            for (int i = 1; i <= N; i++)
            {
                // キャンセル処理
                if (this.Cancel == true)
                {
                    WriteConsole($"[CANCEL] サブジョブが、キャンセルされました", FontColors.RED);
                    this.Cancel = false;
                    return;
                }

                // プログレスバーの表示
                string QuesProgressBar = "";
                for (int j = 1; j <= (N - i); j++)
                {
                    QuesProgressBar += "|";
                }
                WriteConsole($"[TRIMING] {QuesProgressBar}", FontColors.GREEN);

                // 入出力の設定
                string _OutFilePath   = Ffmpeg.SubFileName(InputFilePath, i);
                string _OutFileName   = Path.GetFileName(_OutFilePath);
                string NewOutFilePath = Path.Combine(SubDir, _OutFileName);
                int    start          = (i - 1) * duration;
                WriteConsole($"[TRIMING] Start:{start}s, Duration:{duration}s, Total:{total_duration}s");


                // 出力ファイルの有無
                if (File.Exists(NewOutFilePath))
                {
                    // 出力ファイルがある場合
                    if (OverwriteFlg)
                    {
                        // 上書きします
                        ffmpeg.Triming(InputFilePath, NewOutFilePath, start, duration);
                    }
                    else
                    {
                        // ファイルが存在しており, 上書きしない
                        WriteConsole($"[TRIMING] ファイルが存在します. 上書きしません.");
                    }
                }
                else
                {
                    // ない場合 新しく作ります
                    ffmpeg.Triming(InputFilePath, NewOutFilePath, start, duration);
                }
            }
        }