2013-05-25 9 views

Odpowiedz

6
  1. importu ffmpeg w swoim projekcie chwyć porcję lub cały film i przekonwertuj go na gif.

    lub

  2. Zastosowanie MediaRetriever wyodrębnić zakres klatek z prostą pętlę w całym zakresie, a następnie konwersję do rozciągliwej lub bitmapy, dzięki czemu można go zapisać.

    lub

  3. chwycić klatek podczas odtwarzania wideo z SurfaceViewHolder lub SurfaceView płótnie.

9

Moja rada byłoby użyć MediaMetadataRetriever i nazywają getFrameAtTime() metody pobierania klatek, które chcesz wyodrębnić:

// Get your video file 
File myVideo = new File 
     (Environment.getExternalStorageDirectory().getAbsolutePath(), 
                   "YOUR_FILE.mp4"); 
// URI to your video file 
Uri myVideoUri = Uri.parse(myVideo.toString()); 

// MediaMetadataRetriever instance 
MediaMetadataRetriever mmRetriever = new MediaMetadataRetriever(); 
mmRetriever.setDataSource(myVideo.getAbsolutePath()); 

// Array list to hold your frames 
ArrayList<Bitmap> frames = new ArrayList<Bitmap>(); 

//Create a new Media Player 
MediaPlayer mp = MediaPlayer.create(getBaseContext(), myVideoUri); 

// Some kind of iteration to retrieve the frames and add it to Array list 
Bitmap bitmap = mmRetriever.getFrameAtTime(TIME IN MICROSECONDS); 
frames.add(bitmap); 

a następnie utworzyć Drawable Animation programowo:

AnimationDrawable animatedGIF = new AnimationDrawable(); 

animationDrawable.addFrame("FIRST FRAME", 50); 
animationDrawable.addFrame("SECOND FRAME", 50); 
... 
animationDrawable.addFrame("LAST FRAME ", 50); 
+0

Czy możesz mi powiedzieć, jak uzyskać wszystkie ramki. jaka będzie pętla dla niego.http: //stackoverflow.com/questions/22684347/extract-all-video-frames-in-android możesz odpowiedzieć na to pytanie. –

+0

mmRetriever.setDataSource (myVideo.getAbsolutePath()); zawsze się zawiesza –

+0

Dlaczego tworzysz nowy MediaPlayer? Czy to konieczne? –

Powiązane problemy