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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

4669閲覧

Javaで動画の高さ、横幅などの情報を取得

ryohasegawa

総合スコア437

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/06/24 14:11

Javaで動画ファイルを読み込んだのですが、その読み込んだ動画の横幅や高さを取得したいのですが、調べても出ませんでした。
取得できないのですか?

呼び出し方は以下です。

Java

1File f = new File( "movie/oow2010-2.flv" );

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/06/24 14:51

プロフィールを見せて頂きましたが自分で調べなさすぎですね。もう少し調べてから質問した方が良いかと思います。
mattn

2017/06/24 15:06

javafx は FX アプリケーションとして初期化しないといけないのでプレーヤを作るつもりでないのであれば他の方法を考えた方がいいですよ。
guest

回答2

0

Java での回答でないですが色々なフォーマットに対応できるというメリットがあるので紹介しておきます。
ffmpeg というソフトウェアについている ffprobe というコマンドを使うとかなり多くのフォーマットの解析ができます。flv であれば以下のコマンドを UNIX シェル上で実行すると以下の様にサイズが得られます。

$ ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width Sample.flv | sed 's!.*=!!' 800 600

これを Java から実行するなりして取得するといいと思います。

投稿2017/06/24 15:10

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2017/06/24 23:23

要するに、コマンドをJavaから実行して、値を取得するということですね。 一つ引っかかることがあるんですが、UNIX シェル上で実行ということは、Windowsの場合はどうなるんですか?
mattn

2017/06/25 11:35

Windows でも方法は同じです。(sed はないので java で読み取る必要がありますが) プレーヤを作っているとは思ってなかったので ffprobe の例をしめしましたが、Fx プレーヤを使う話であれば、そちらの方がよいかと思います。
ryohasegawa

2017/06/25 15:22

ありがとうございます。
guest

0

ベストアンサー

JavaFXで動画を再生する際にMediaクラスを用いますが、Mediaクラスのwidth/heightプロパティーがビデオの幅と高さ(ピクセル単位)になります。

ただし、Mediaインスタンスを生成した直後にはサイズがわかるとは限りません(まだ中身をロードしていないからだと思います)。
再生が開始された直後(MediaPlayerがREADY状態になった時点)に値が確定するようです。

もしその時点でサイズが分かればよいのであれば次のようにして調べることができます。

Java

1Media video = ...; 2MediaPlayer player = ...; 3mediaPlayer.setOnReady(() -> { 4 int w = media.getWidth(); 5 int h = media.getHeight(); 6 System.out.println("width=" + w + ", height=" + h); 7}); 8player.play();

投稿2017/06/24 16:12

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2017/06/24 23:22

今、メディアプレイヤーで動画を再生する事ができるところまではできたんですが、画面のサイズを動画サイズに応じたサイズにしたいと思ったんですが、再生してからじゃないと取得できないんですか・・・ じゃあ駄目そうですね。
KSwordOfHaste

2017/06/25 00:24 編集

再生する動画がプログラム起動時に確定しているのであれば(UIにより指定させなくてすむのであれば)画面を出す前にサイズを調べ、画面サイズを調整した上で初めて表示・・・といったことも考えられます。このようにプログラマーが色々と工夫しやすいようにライブラリー(JavaFXのような)が設計されていることも多いと思います。ライブラリーの仕様は適当に決まっているのではありません。そうした様々な場面を想定して多くの応用に耐えられるものになるように慎重に設計されていると思いますよ。それを踏まえてやりたいことをどうやって実現するかを考え工夫するのがプログラマーの腕にかかってくると思います。
ryohasegawa

2017/06/25 00:49

画面を出す前にサイズを調べ、画面サイズを調整した上で初めて表示 をしたいのですが、今回のように、動画を読み込んで再生可能状態へもっていって初めて動画サイズを取得できるので、もっと別の方法で取得できないかを探す必要があるということですか?
KSwordOfHaste

2017/06/25 01:19

画面を出す前にMediaPlayerの再生を開始し、サイズが既知となった瞬間にStageサイズを変更・表示することもできると思います。上のsetOnReadyのハンドラーの中でサイズ調整と表示を行うという戦略になりますね。
ryohasegawa

2017/06/25 01:43

MediaPlayerの再生を開始 ということは映像は流れ始めているって事ですよね?
KSwordOfHaste

2017/06/25 02:23

そうですね。再生開始の瞬間にStageを表示すると最初の一コマが見えないといった不具合にぶつかるかもしれません。そんな場合はStageをshowする前にMediaPlayerの再生を一旦止めて、Stageが表示されたのちに(Stage.onShowenなどのイベントハンドラーを利用して)再生位置(currentTIme)を0秒にもどしてから再度playするといったことも考えられます。mattnさんの方法に比べ論理は複雑ですがプログラミングは多かれ少なかれそういうテクニックが必要になるものだと思います。mattnさんの方法も有力な候補になると思います。どちらを選択するかは状況によると思います。
ryohasegawa

2017/06/25 02:25

そうですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問