質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • C#

    7105questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C# 動画ファイル時間取得方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,806

cotopii

score 5

前提・実現したいこと

一度質問しましたが、解決する前に解決済にしてしまった為、もう一度質問致します。
ドラッグアンドドロップしてきた動画ファイルの再生時間を取得したいです。 
再生中の秒数ではなく、その動画の最大の秒数です。 
ドラッグアンドドロップはできますが、動画の時間取得の仕方が分かりません。 
00:00.00 少数以下の秒数まで取得したいです。 
お手数ですが、分かる方教えて頂けますでしょうか。

前回教えて頂いたサイト

こちらのサイトを参考にすると良いと教えて頂きました。
http://stackoverflow.com/questions/38474590/getting-the-length-of-video-using-ffmpeg-ffprobe-is-not-working?answertab=active#tab-top

試したこと

Shell32を使用すると秒数の取得が出来ましたが、少数以下が取得出来ないので×
ffmpegを導入しましたが、ffmpegからビジュアルスタジオに秒数の取得方法が不明
ffmpegではなくても良いので、何とか秒数を取得したい

補足情報(言語/FW/ツール等のバージョンなど)

ビジュアルスタジオ2015 C# windows Form アプリケーション

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hikochang

    2017/01/26 17:40

    対応したいフォーマットなど記載下さい

    キャンセル

回答 1

checkベストアンサー

+1

解決済みにされたC# 動画ファイルの時間取得のturbgraphics200さんの回答とおりで、
http://stackoverflow.com/questions/38474590/#answer-38494527
このJitender Kumarさんの回答にあるprivate static void GetVideoDuration()がそのまま使用できると思うのですが・・・

「そのまま使用できる」は語弊がありますね。
msを削除しているので削除内容にすると、durationに文字列でms含めた時間が入っていると思います。

string duration = proc.StandardOutput.ReadToEnd().Replace("\r\n", "");
// not Remove the milliseconds
// duration = duration.Substring(0, duration.LastIndexOf("."));

string duration = proc.StandardOutput.ReadToEnd().Replace("\r\n", "");
// not Remove the milliseconds
// duration = duration.Substring(0, duration.LastIndexOf("."));

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/26 18:29

    有難うございます、試してみます。

    キャンセル

  • 2017/01/27 16:11

    試してみたところ、小数点第1までは取れていましたが、小数点第2までは取れませんでした。
    例01:23.45 → 83.40000
    出来れば83.45000と取得したいのですが、分かりませんでしょうか…。

    キャンセル

  • 2017/01/27 16:19

    コマンドプロンプトで
    ffprobe.exe c:\temp\test.mp4
    とした場合の出力でduration の値はどうなってるでしょうか?
    基本的にffmpegのffprobe.exe を実行した結果から取得しているだけなので、コマンドプロンプトから実行した際に83.40000と表示されているのであれば、ffmpeg(ffprobe.exe)ではできないという結論になります。

    キャンセル

  • 2017/01/27 16:40

    コマンドプロンプトから実行した場合は正しい値が表示されていました。

    キャンセル

  • 2017/01/27 16:43

    現在のコードです。
    string cmd = string.Format("-v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 {0}", moviename);
    Process proc = new Process();
    proc.StartInfo.FileName = "ffprobe.exe";
    proc.StartInfo.Arguments = cmd;
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.RedirectStandardOutput = true;
    proc.StartInfo.RedirectStandardError = true;
    proc.StartInfo.UseShellExecute = false;

    if (!proc.Start())
    {
    Console.WriteLine("Error starting");
    return;
    }
    string duration = proc.StandardOutput.ReadToEnd().Replace("\r\n", "");
    proc.WaitForExit();
    proc.Close();

    キャンセル

  • 2017/01/27 17:11

    ffprobe.exe --hide_banner -show_entries format=duration c:\temp\test.mp4
    の場合はどうでしょうか?

    これで83.45000などと小数第2位以下までひょうじされるなら
    string cmd = string.Format("-v error -select_streams v:0 -show_entries stream=duration -of default=noprint_wrappers=1:nokey=1 {0}", moviename);



    string cmd = string.Format("-hide_banner -show_entries format=duration {0}", moviename);

    としてしまい、

    後は無理やり durationの値をこんな感じで抜き出すとか。
    (すみません、コード実行検証してないので間違いがあるかも。)

    string result = proc.StandardOutput.ReadToEnd().Replace("\r\n", " ");
    string tmp = result.Substring(result.IndexOf("duration=") + "duration=".Length);
    string duration =tmp.Substring(0,tmp.IndexOf(" ")-1);

    キャンセル

  • 2017/01/27 17:35

    ffprobeのバージョンはいくつでしょうか。私の所有するffprobeはversion 3.1.4およびversion N-81285-gc1bfeda複数ありますが、両方ともにduration = "0:00:13.797167" と取得されます。

    キャンセル

  • 2017/01/27 17:39

    おおお!
    小数第2以下まで取得することが出来ました!
    本当に有難うございました。

    キャンセル

  • 2017/01/27 17:45 編集

    turbgraphics200さん、ffmpeg(ffprobe)のバージョンによる挙動の差異も考えられますね。(cotopiiさんの使用されているバージョンのバグ?)
    cotopiiさん、正攻法を取るならffmpeg(ffprobe)のバージョンを替えてdurationのみ取得のほうがいいと思うので時間があったらやってみてください。

    キャンセル

  • 2017/01/27 17:52

    cotopiiさん、解決されて何よりです。
    同じことでつまずかれた方がこの質問にたどり着かれた時に
    使用されているffmpeg/ffprobeのバージョンが質問に記載されていると
    有意義な情報になるので追記いただけたらと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    ffmpegでストリーミング対応したい

    ffmpegでエンコードしたビデオ(mp4)をWebで公開しようと 思っているのですが、ストリーミングに対応させようと思います。 どのようにしたらいいでしょうか?

  • 解決済

    ffmpegで簡単に品質を変えるパラメータはありますか?

    ffmpegで品質をパラメータ1個で変えられるようなオプションは ありませんか? (音声や動画のビットレートを一々指定するのではなく)

  • 受付中

    ffmpegのリサイズ処理を高速化したい

    ffmpegを使ってリサイズ処理をしているのですが、 変換処理が遅く感じます。 例) ffmpeg -i input.mp4 -s 640x480 output.mp4 もっと

  • 解決済

    ffmpegのアップデートをしたい

    環境/CentOS6.7を使用。 現在のffmpegのバージョンが下記です。 見ていると、2.8や3.0のバージョンがあるようなのですが、下記の「version N-790

  • 解決済

    動画から静止画を上書き保存する方法

    動画ファイルから1秒ごとの静止画を取り出すことをサイトで見たのですが、この方法で画像を取り出して行った場合、画像が連番として1秒に1枚ずつの画像が保存されます。(コマンドは下記に記

  • 解決済

    FFprobe 動画の解像度取得

    前提・実現したいこと ffprobeを使い、動画ファイルの解像度を取得したいです。 FORMATみたいに書き出せられれば、プログラムで取得できると思うので、 解像度を抜き出し

  • 解決済

    FFmpegにて出力する際の映像コントラスト調整

    前提・実現したいこと お世話になっております。 現状、以下のコマンドで映像の変換をしているのですが、オリジナルと比べた時、 中間から上のコントラストは良さそうですが、暗部が少

  • 解決済

    FFmpegでのcudaを利用した変換のトラブル

    前提・実現したいこと 「デバイスがない」というようなエラーのようですが、ドライバーなどはインストールしておりまして、悩んでおります。 お知恵をお借りできればと思います。

同じタグがついた質問を見る

  • C#

    7105questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。