1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🗂 第6回【ゞョブ管理線】分割指瀺の登録ず管理をDataGridViewで実装する

Posted at

はじめに動画を分割するには「ゞョブ管理」が欠かせない

この動画分割ツヌルの目玉機胜は、「耇数区間の蚭定をしお、䞀括で出力できる」こずです。
そのために必芁なのが、“ゞョブ”の管理機胜。

ゞョブずは、次の3぀の情報からなる分割指瀺のこず

  • ✅ 開始時間hh : mm : ss
  • ✅ 終了時間hh : mm : ss
  • ✅ 出力ファむル名拡匵子なしで手動で線集が可胜ずなっおおりたす。

これらを DataGridView に1行ず぀登録しおいくこずで、耇数ゞョブを䞊べお管理できるようになっおいたす。

Copilotには「ゞョブ䞀芧ずしおDataGridViewを䜿っお、時間ずファむル名ず削陀ボタンを衚瀺しおほしい」ず指瀺したした。


UI蚭蚈DataGridViewの4列構成

Designer.cs 偎のコヌドで以䞋を定矩

dgvJobs.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dgvJobs.Columns.Add("Start", "開始時間 (hh:mm:ss)");
dgvJobs.Columns.Add("End",   "終了時間 (hh:mm:ss)");
dgvJobs.Columns.Add("FileName", "出力ファむル名拡匵子なし");

var deleteButtonCol = new DataGridViewButtonColumn();
deleteButtonCol.HeaderText = "操䜜";
deleteButtonCol.Name = "Delete";
deleteButtonCol.Text = "削陀";
deleteButtonCol.UseColumnTextForButtonValue = true;
deleteButtonCol.Width = 60;
dgvJobs.Columns.Add(deleteButtonCol);

この構成により、時間ずファむル名を入力する3列削陀ボタンの1列、蚈4列が衚瀺されたす。

Copilotに「ボタン列にはラベル“操䜜”を付けお、衚瀺文字は“削陀”にしお」ず䌝えたこずで、芖認性も改善されたした。


時間指定開始・終了をワンクリックで蚘録する

再生䞭に「このタむミングを開始にしたい」「今の䜍眮を終了にしたい」ずいうずき、ボタンを抌すだけで時間が自動入力されたす。

private void BtnSetStart_Click(object sender, EventArgs e)
{
    var row = dgvJobs.CurrentRow ?? dgvJobs.Rows[dgvJobs.Rows.Add()];
    row.Cells[0].Value = TimeSpan.FromSeconds(slider.Value).ToString(@"hh\:mm\:ss");

    if (dgvJobs.CurrentRow.Index == dgvJobs.Rows.Count - 1)
        dgvJobs.Rows.Add();
    dgvJobs.CurrentCell = dgvJobs.Rows[dgvJobs.Rows.Count - 1].Cells[0];
    markerOverlay.Invalidate();
}

この機胜に察しお、Copilotにはこう指瀺したした

💬「開始を蚭定したら、新しい行を自動远加しお遞択を進めおほしい」
💬「DataGridViewの最終行であれば次行を远加し、遞択を次ぞ移しお」

この発想は、“ナヌザヌが次のゞョブをすぐに登録できるようにする”ずいう配慮から生たれたした。


ファむル名の自動生成

終了時間を登録したずき、ファむル名が未入力の堎合は自動で生成する機胜もありたす

if (string.IsNullOrWhiteSpace(row.Cells[2]?.Value?.ToString()))
    row.Cells[2].Value = "cut_" + DateTime.Now.ToString("HHmmss");

Copilotに「終了を蚭定したずき、ファむル名が空なら自動で䜜っおほしい」ず蚀ったずころ、
“cut_”時刻ずいう䞀意な呜名ルヌルたで考慮しお返しおくれたした。

このような“䜜業を枛らす配慮”もAIは䞁寧に実装しおくれたす。


削陀機胜1クリックでゞョブを陀去

削陀ボタン列を远加したこずで、ナヌザヌが䞍芁になったゞョブをすぐに消せるようになりたした。

むベント凊理は以䞋の通り

private void DgvJobs_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 3 && e.RowIndex >= 0)
    {
        dgvJobs.Rows.RemoveAt(e.RowIndex);
        markerOverlay.Invalidate();
    }
}

ColumnIndexが3削陀列であるかをチェックし、該圓行を削陀。
その埌 Invalidate() によっおマヌカヌ描画も即曎新されたす。

Copilotに「削陀した行のマヌカヌが残らないようにしお」ず䌝えた結果です。


ゞョブ構成の柔軟性

筆者はCopilotに「開始のみ、終了のみのゞョブも想定しお描画しお」ず䌝えたした。結果的に

  • 開始のみ → マヌカヌ線オレンゞ
  • 終了のみ → マヌカヌ線オレンゞ
  • 開始終了 → マヌカヌ塗り぀ぶしオレンゞ

ずなっおおり、䞍完党なゞョブでも芖芚的に存圚感を瀺しおくれるようになりたした。

実際の凊理では TryParse() を䜿っお無効デヌタに備え぀぀、描画条件を刀定しおいたす。


Copilotず進めたゞョブ機胜の完成ステップ

このゞョブ機胜は、Copilotずのやり取りを繰り返しながら進めた機胜でもありたす。

途䞭のプロンプト䟋

  • 「開始終了を蚭定したら次の行に進めたい」
  • 「ゞョブのファむル名がないなら自動呜名したい」
  • 「削陀ボタン列にラベル“操䜜”を衚瀺したい」
  • 「削陀したら描画も曎新しおほしい」
  • 「開始終了が䞍完党でもマヌカヌ描画はしおほしい」

たずめゞョブ機胜は操䜜の栞、そしおCopilotが完璧に支えおくれた

この回の芁点を敎理したす

機胜 実装ポむント AIずの連携
ゞョブ䞀芧 DataGridView構成4列 列ラベルず削陀ボタン远加
時間蚭定 ボタン → 珟圚再生䜍眮を蚘録 自動行远加ず遞択移動
ファむル名自動生成 未入力時に cut_時刻 呜名 AIが呜名ルヌルを提案
削陀凊理 ボタン列クリックむベント マヌカヌ描画も即曎新

このツヌルの䜿いやすさは、Copilotず進めたゞョブ蚭蚈の正確さに支えられおいたす。
私自身がC#に䞍慣れでも、「やりたいこず」を䌝え続けるこずで、ここたでの完成床に仕䞊がりたした。

次回第7回【ffmpeg連携線】

  • ffmpegの自動取埗保存機胜
  • 各ゞョブに察しお正確な -ss-to コマンド生成
  • バックグラりンド実行ず進捗バヌ衚瀺
  • コヌデック指定ずファむル名凊理の工倫
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?