私のプロジェクトでは、Eclipse を使用して OSX 10.8.5 で Processing コア jar と GSVideo ライブラリを使用しています。
次のフレームを実際に再描画するために GSVideo jump(int frame) または jump(float time) を取得できません。以下のプログラム例では、RIGHT キーを繰り返し押してフレームを進めると、表示される画像がフレーム間で前後に切り替わります。以下の例は *.mov では動作しますが、*.mpg ビデオでは動作しないため、MPEG2 ビデオでフレームを進める gstreamer に関する既知の問題があるかどうかを尋ねたいと思います。あるいは、java-gstreamer または GSVideo のどちらかで問題が発生している可能性がありますか?
私はMPEG2形式のビデオを扱っています..そして、MPEG2を再生して一時停止するだけで問題はありません。movie.jump(frameNum or time) 関数が機能していないようです。playbin2 の seek メソッドを使用したフレーム ステッピングの例を探し始めました。
ここに私がジャンプしようとしているビデオに関する情報があります。
ストリーム 0: タイプ: CODEC_TYPE_VIDEO; コーデック: CODEC_ID_MPEG2VIDEO; 期間: 7717710; 開始時間: 433367; タイムベース: 1/90000; コーダー tb: 1001/60000; 幅: 1920; 高さ: 1080; フォーマット: YUV420P; フレームレート: 29.97;
サンプルコード。
import processing.core.*;
import codeanticode.gsvideo.*;
public class FramesTest extends PApplet {
GSPlayer player;
GSMovie movie;
int newFrame = 0;
PFont font;
public void setup() {
size(320, 240);
background(0);
//movie = new GSMovie(this, "station.mov"); // sample works
movie = new GSMovie(this, "myMovie.mpg"); // mpg does not
movie.play();
movie.goToBeginning();
movie.pause();
textSize(24);
}
public void movieEvent(GSMovie movie) {
System.out.println("movie"+ movie.frame());
movie.read();
}
public void draw() {
image(movie, 0, 0, width, height);
fill(240, 20, 30);
text(movie.frame() + " / " + (movie.length() - 1), 10, 30);
}
public void keyPressed() {
if (movie.isSeeking()) return;
if (key == CODED) {
if (keyCode == LEFT) {
if (0 < newFrame) newFrame--;
} else if (keyCode == RIGHT) {
if (newFrame < movie.length() - 1) newFrame++;
}
}
movie.play();
movie.jump(newFrame);
movie.pause();
if (movie.available()){
System.out.println(movie.frame());
movie.read();
}
System.out.println(newFrame);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PApplet.main(new String[] { FramesTest.class.getName() }); //
}
}
サンプルコードはここから引っ張ってきました... http://gsvideo.sourceforge.net/examples/Movie/Frames/Frames.pde
私は数日間インターネットを検索しましたが、これはこのフォーラムにも連絡しようとしました... https://sourceforge.net/projects/gsvideo/forums
この投稿は似ているようですが、私の問題は再生されません (問題ありません)。特定のフレームにジャンプできません.... GStreamer: mpeg2 を再生
SO コミュニティに感謝します。
更新: MPEG2 圧縮の問題 (以下の vk で説明) を回避するために、GSVideo Pipeline または java-gstreamer を使用して、mp4 へのオンザフライ トランスコーディングを行う gstreamer パイプラインを作成しようとしています。以下のコマンドは Ubuntu で動作します。
gst-launch-0.10 filesrc location=myMpeg2Video.mpg ! mpegdemux name=demux demux.video_00 ! ffdec_mpeg2video ! queue ! x264enc ! ffdec_h264 ! xvimagesink
しかし、次の GSVideo パイプラインでは空の灰色のウィンドウが表示されます:(
pipeline = new GSPipeline(this, "filesrc location=file:/path/movie.mpg ! mpegdemux name=demux demux.video_00 ! ffdec_mpeg2video");
pipeline.play();