おぎの部屋

気になることを徒然に...備忘録にも...

動画ファイルの再生時間取得 C# ffmpeg

mp4やflv形式の動画ファイルの再生時間の取得を行いたいと思いつき
C#の勉強がてらプログラムでの取得を目指しました。
ネットやサンプルなどいろいろとさがしてみた結果
C#では
Shell32
ffmpeg
の二つの方法がみつかりました。

最初はShell32で試しましたがmp4形式はうまくいったもののflv形式では取得できなかったため、
ffmpegを使って作成しました。
※実際に再生時間の取得にはffprove.exeを使います。

VisualStadio Community 2017のC#にて作成しました。

ソースファイル

実行結果

Test:Decimal point valid
 PRINT_FORMAT=DEFAULT Test
  Video File Duretion(mp4) = 0:00:36.478544
  Video File Duretion(flv) = 0:00:36.478544
 PRINT_FORMAT=CSV
  Video File Duretion(mp4) = 0:00:36.478544
  Video File Duretion(flv) = 0:00:36.478544

Test:Decimal point invalid
 PRINT_FORMAT=DEFAULT Test
  Video File Duretion(mp4) = 0:00:36
  Video File Duretion(flv) = 0:00:36
 PRINT_FORMAT=CSV
  Video File Duretion(mp4) = 0:00:36
  Video File Duretion(flv) = 0:00:36

press any key...

解説

ソースファイルでは、mp4とflv形式の動画ファイルを使ってテストを行っています。
小数点以下まで取得するかはパラメータで切り替えています。
出力形式は色々ありますが、今回は以下の出力形式毎にメソッドを使ってテストをしています。
[出力形式 -of-print_format]
default:標準の出力形式
csvCSV形式

備考:クラス

サンプルとしてクラス化したものです。

余談

C#やffprobeのパラメータなど初めてのことが多くてなかなか思い通りにはなりませんでした。
特にffprobeのパラメータはあまり理解出来ていません。
それから出力形式で他にJSONXMLがあって本当はこの形式を使いたかったのですが力不足のためにあきらめました。
また今度勉強して挑戦してみたいと思います。


開発環境 テスト環境

Windows10 Pro(64bit)
ffmpeg(Build: ffmpeg-20180404-53688b6-win64-static)
VisualStadio Community 2017
使用言語:C#


ogidesu2k18.hatenablog.com

ogidesu2k18.hatenablog.com