HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
0911
Area39動画の1フレーム目を画像として取得したい7解決


Area39

リンク

2025/9/11(Thu) 00:24:34|NO.103973

mp4形式の動画の1フレーム目を抜きだしてサムネイル一覧のような物を作りたいと思っています。
出来れば画像を取得して小さくして保存や表示するような物を作りたいです。
これは、mci命令を使えば出来るのでしょうか?
mci命令でなくても実現出来れば何でもOKです。
ご存じの方いらっしゃいましたら教えて頂けると有り難いです。
よろしくお願い致します。



この記事に返信する


正蔵

リンク

2025/9/11(Thu) 11:45:49|NO.103974

HSPDSC.dllなどを使えばHSPのアプリ上でフレームのキャプチャができますが、コーデックは内蔵されてないので同じmp4でも読み込めるPCと読み込めないPCが出てきたりして結構面倒です
https://hsp.moe/#hspdsp

ffmpegをexecで呼び出すのが楽かなと
https://looooooooop.blog.fc2.com/blog-entry-1021.html



Area39

リンク

2025/9/11(Thu) 21:45:51|NO.103976

正蔵さま

ご回答ありがとうございます。
正蔵さまに教えていただきました、イノビアさまのhspdspを使ってやっております。
以下のようなスクリプトを書けたのですが、動画を開いて縮小して貼り付けると画像が
劣化してしまいます。
どこかいけない場所あるのでしょうか?
本来はここの作者さまに聞けばいいのですが、話の流れでここで聞かせていただきます。
よろしくお願いいたします。


#include "hsp3_64.as" #include "hspdsp64.as" dsp_Init ; 初期化 dialog "*",16,"メディアファイル" if ( stat == 0 ) : end // システム標準のレンダラーで開く dsp_open refstr,OPEN_DEFAULT_RENDERER,0,0,0 onexit *exit thumb_sz = 150 v_x = dsp_info(0) v_y = dsp_info(1) if ( v_x >= v_y ) { x = thumb_sz y = v_y * thumb_sz / v_x } else { y = thumb_sz x = v_x * thumb_sz / v_y } //buffer 2,v_x,v_y screen 2,thumb_sz,thumb_sz redraw 0 //dsp_CaptureVideo hdc,(thumb_sz-x)/2 , (thumb_sz-y)/2,v_x,v_y,SRCCOPY dsp_CaptureVideo hdc,(thumb_sz-x)/2 , (thumb_sz-y)/2,x,y,SRCCOPY redraw 1 /* screen 3,thumb_sz , thumb_sz title ""+x+"|"+y pos (thumb_sz-x)/2 , (thumb_sz-y)/2 gzoom x,y,2,000,000,v_x,v_y */ dsp_Close ; メディアファイルを閉じる title "fin" // bmpsave "aaaa.bmp" stop *exit // 終了時開放するため dsp_Exit // 開放 end

もし、解決しないようであれば、このスクリプトに書いているgzoomで対応したいと思います。



正蔵

リンク

2025/9/11(Thu) 22:58:34|NO.103977

表面的な動作しか見ていませんが、HSPDSCのキャプチャはwingdiのBitBlt系の非常に古い仕組みで取得しているように見えます
この機能で拡大縮小すると補間がないためかなり品質が悪いですね
等倍でHSP側に取り込み、gzoomで縮小するのが正解かと思います



Area39

リンク

2025/9/11(Thu) 23:19:40|NO.103978

正蔵 さま

ありがとうございます、やはり古い手法なのですね、
素直にgzoomにて縮小します、ありがとうございました!!



窓月らら

リンク

2025/9/11(Thu) 23:22:19|NO.103979

横から全く試さないで書きますが、
BitBlt(GDI)であればArtLet2D(GDI+)に渡してから拡大縮小すれば綺麗にいきますよ・・・。



Area39

リンク

2025/9/12(Fri) 21:47:21|NO.103982

hspdspを採用して画像を取得しようと苦労しています。
また、引っかかってしまいました。
横方向の動画であれば問題無く取得出来るのですが縦の動画ですと、うまく出来なかったり、
なんとか取得出来ても画質がかなり劣化してしまいます。
この縦か横かの取得はとりあえず、y/xで0.5以上であれば縦と判断しています。

何かおかしいところ、修正すべき所ございましたら是非ともお教え下さい。よろしくお願い致します。

一度解決してしまいましたが、申し訳ございません。

#include "hsp3_64.as" #include "hspdsp64.as" onexit *exit dialog "*",16,"メディアファイル" if stat=0:end dsp_Init ; 初期化 // システム標準のレンダラーで開く dsp_open refstr,OPEN_DEFAULT_RENDERER,0,0,0 gsel 0,2 title ""+filename // システム標準のレンダラーで開く thumb_sz = 150 v_x = dsp_info(0) v_y = dsp_info(1) if ( 1.0*v_y / v_x < 0.5 ) { dsp_Play2 // ?? tmp = v_x v_x = v_y v_y = v_x wait 500 // ?? } x = thumb_sz y = v_y * thumb_sz / v_x buffer 2,v_x,v_y dsp_CaptureVideo hdc,(thumb_sz-x)/2 , (thumb_sz-y)/2,v_x,v_y,SRCCOPY screen 3,thumb_sz , thumb_sz pos (thumb_sz-x)/2 , (thumb_sz-y)/2 redraw 0 gzoom x,y,2,000,000,v_x,v_y redraw 1 gsel 3,2 stop *exit dsp_Exit // 開放 end


一度、窓月ららさんの、ArtLet2Dについてはこれで原因解決できるかもしれませんね。



Area39

リンク

2025/9/12(Fri) 22:24:36|NO.103983

すみません、レンダラーをOPEN_NOAUDIO_VIDEO_RENDERERにしたところ、安定して画像が出力
されました。
どうやら、レンダラーのチョイスによりかなり動きが変わるようです。
お騒がせ致しました。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.103973への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2025(c) All rights reserved.