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
:標準の出力形式
csv
:CSV形式
備考:クラス
サンプルとしてクラス化したものです。
余談
C#やffprobeのパラメータなど初めてのことが多くてなかなか思い通りにはなりませんでした。
特にffprobeのパラメータはあまり理解出来ていません。
それから出力形式で他にJSONとXMLがあって本当はこの形式を使いたかったのですが力不足のためにあきらめました。
また今度勉強して挑戦してみたいと思います。
開発環境 テスト環境
Windows10 Pro(64bit)
ffmpeg(Build: ffmpeg-20180404-53688b6-win64-static)
VisualStadio Community 2017
使用言語:C#