C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

動画ファイルから画像を取得する方法

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■91318 / inTopicNo.1)  動画ファイルから画像を取得する方法
  
□投稿者/ 虎夫 (1回)-(2019/06/16(Sun) 11:00:06)

分類:[.NET 全般] 

動画ファイル(mkv or mp4)をフレーム毎に画像データとして取得し
その画像データを更にバイト配列に変換したいと考えています。

FFmpegという外部ソフトを使って
動画ファイルをJPEG or PNGファイルとして出力後、
それぞれの画像ファイルを取り込んでバイト配列として取得。

という方法なら、できるのですが、
いったん、画像ファイルにする必要があるため、
時間がかかる上、大きなファイルを生じてしまいます。

VB.NETの中で動画ファイルから直接、画像データを取得したいのですが
どうすればそのようなことが可能でしょうか?


引用返信 編集キー/
■91319 / inTopicNo.2)  Re[1]: 動画ファイルから画像を取得する方法
□投稿者/ キングダム (35回)-(2019/06/16(Sun) 13:18:43)
No91318 (虎夫 さん) に返信

Video Converter for .NET FFMpeg C# wrapper
https://www.nrecosite.com/video_converter_net.aspx

これとかどうですかね
出力先にメモリーストリームを渡せばメモリに直接画像のバイナリを読み込めそうです
引用返信 編集キー/
■91405 / inTopicNo.3)  Re[2]: 動画ファイルから画像を取得する方法
□投稿者/ 虎夫 (3回)-(2019/06/21(Fri) 14:36:54)
https://www.nrecosite.com/doc/NReco.VideoConverter/

ここにヘルプのようなものがあるのですが、
使い方がいまいち分かりません。

例えば、
動画から画像をイメージデータとして取得する方法だけでも
お教えいただけないでしょうか?

引用返信 編集キー/
■91411 / inTopicNo.4)  Re[3]: 動画ファイルから画像を取得する方法
□投稿者/ キングダム (39回)-(2019/06/21(Fri) 22:13:33)
No91405 (虎夫 さん) に返信

こんな感じで

Sub Main()
    Dim ffMpeg = New NReco.VideoConverter.FFMpegConverter()
    Dim stream = New System.IO.MemoryStream()

    ffMpeg.GetVideoThumbnail("test.mp4", stream, 4.5F)

    Dim bytes = stream.ToArray()
    System.IO.File.WriteAllBytes("test.jpg", bytes)
End Sub

引用返信 編集キー/
■91424 / inTopicNo.5)  Re[4]: 動画ファイルから画像を取得する方法
□投稿者/ 虎夫 (4回)-(2019/06/24(Mon) 20:07:44)
ありがとうございます。

この方法だとある指定した一つのフレームのみを取得することになりますが、

指定した時間の区間の全フレームを取得したい場合にはどのようにしたら良いですか?

fpsの値から1フレーム毎の秒数を割り出して
Forループで提示してくださったコマンドを回すしかないでしょうか?

引用返信 編集キー/
■91510 / inTopicNo.6)  Re[5]: 動画ファイルから画像を取得する方法
□投稿者/ 虎夫 (5回)-(2019/07/02(Tue) 17:53:04)
試してみたのですが、
画像の圧縮率が高すぎて画像が劣化しすぎなのですが。
無圧縮で取得したいのですが、
これは可能でしょうか?

見たところ、圧縮形式や画像形式を指定する引数が見当たらないので
対応していないということでしょうか?

もし、他に良い方法があれば教えていただけないでしょうか?

引用返信 編集キー/
■91512 / inTopicNo.7)  Re[6]: 動画ファイルから画像を取得する方法
□投稿者/ Hongliang (834回)-(2019/07/02(Tue) 18:25:45)
わざわざデコード側で再圧縮するとも思えないので、動画ソースの時点で圧縮されているのではないかと思うのですが……私はそのライブラリは使っていないので断言はできませんが。
とりあえず、クラス名などからしてffmpegを内部で使用しているようですので、確認作業として以下を提案します。

ffmpegをダウンロードしてきて、コマンドプロンプトで以下を実行し、作成されたtest.bmpを確認する。
ffmpeg.exe -i "動画ファイルのパス" -ss 4.5 -vframes 1 -c:v bmp test.bmp

// 私ならどうだろう、とりあえずOpenCvSharpかなぁ。
引用返信 編集キー/
■91514 / inTopicNo.8)  Re[7]: 動画ファイルから画像を取得する方法
□投稿者/ 虎夫 (6回)-(2019/07/02(Tue) 19:00:52)
No91512 (Hongliang さん) に返信

普段、ffmpegを使っていますが、
こちらは、bmp png jpegから選択することができます。

しかし、ffMpeg.GetVideoThumbnailのデフォルトでjpeg圧縮されているようです。

OpenCvSharpというのは一度試してみます。

引用返信 編集キー/
■91568 / inTopicNo.9)  Re[8]: 動画ファイルから画像を取得する方法
□投稿者/ 虎夫 (8回)-(2019/07/07(Sun) 18:15:28)
OpenCvSharpを使ってみましたが、
普通に使えることが分かりました。
単に動画をbmpファイルの連番出力するだけでも
ffmpeg.exeよりも二倍近く速いです。

しかし、packagesフォルダーの中に入っているDLLファイルサイズが異様に大きく
100 MB近くになってしまいます。
このばかでかいファイルってどうにかならないのでしょうか?
しかもslnのプロジェクトファイルごとにこれが生成されるので、
プロジェクトがたくさんあるとそれだけファイルサイズも大きくなってしまいます。

普段、dropboxで自宅と職場の間でデータをやりとりしているので
できるだけファイルサイズを下げたいのですが・・

packagesだけ、別のフォルダーに移動させることってできないのでしょうか?

あと、ffmpegのDLLファイルが入っていることから
動画取得部分はffmpegを使っているはずなのに
ffmpeg.exeよりも二倍近く速くなるのはなぜでしょうか?

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ