まず、需要の背景
我々は(サムネイル)図のカバーをアップロードしたファイルなどのビデオからフレームをインターセプトする必要があります
第二に、瓶の導入
1.maven下で導入
< - スタート:!ビデオは、画像フレームを取得します - >
<依存>
<groupIdを> org.bytedeco </ groupIdを>
<たartifactId> javacv </たartifactId>
<バージョン> 1.4.3 </バージョン>
</依存関係>
<依存>
<groupIdを> org.bytedeco.javacpp-プリセット</ groupIdを>
<たartifactId> FFmpegのプラットフォーム</たartifactId>
<バージョン> 4.0.2-1.4.3 </バージョン>
</依存関係>
<! -エンド:ビデオ画像フレームを取得- >
2.gradle下で導入
/ *開始:ビデオ・フレーム* /の取得画像
grab_video_1 = [ ":javacv:org.bytedeco 1.4.3"]
grab_video_2 = [「org.bytedeco.javacpp-プリセット:FFmpegのプラットフォーム:4.0.2-1.4。 3「]
/ *終了:ビデオは入手額縁* /
依存関係{
grab_video_1、grab_video_2をコンパイル
}
3つのツール
1つのガイドパッケージ
輸入org.bytedeco.javacv.FFmpegFrameGrabber。
輸入org.bytedeco.javacv.Frame。
輸入org.bytedeco.javacv.Java2DFrameConverter。
輸入javax.imageio.ImageIO;
輸入java.awt.image.BufferedImage。
java.util.UUIDインポート;
java.io.Fileのインポート;
2.コード
/ **
*エキスピクチャー:フレームを指定します
*
* @param filePathにビデオファイルのアドレス
* @param TEMPPATH一時ファイルのアドレス
* /
パブリック文字列grabImg(文字列filePathに、文字列のTEMPPATH){
IF(StringUtils.isBlank(filePathに)){
nullを返します。
}
TEMPFILE =新しい新しいファイル(filePathに)をファイル;
IF {(tempFile.exists()!)
nullを返す;
}
//パス最後に取得したサムネイル
文字列appointFramePicture = "";
//オブジェクトフレーム
フレームフレーム=ヌル;
/ /識別:最初のいくつかのフレームは、
フラグ= 0のint;
試み{
//ビデオファイルを取得します。
=新しい新しいFFmpegFrameGrabber fFmpegFrameGrabber FFmpegFrameGrabber(filePathに);
fFmpegFrameGrabber.start();
//フレームの合計数を取得
int型= fFmpegFrameGrabber.getLengthInFrames FTP();
ながら、(フラグに<= FTP){
フレームfFmpegFrameGrabber.grabImage =();
//について第五のビデオフレームが処理され
た場合(フラグにフレーム!= NULL && == 5){
//画像ファイルパス
appointFramePicture = TEMPPATH + File.separator + UUID.randomUUID( )のtoString()+ "_" + String.valueOf( 旗で)+ ".JPG";
//ファイルストレージオブジェクト
ファイル出力=新しいファイル(appointFramePicture) 。
ImageIO.write(frameToBufferedImage(フレーム)、 "JPG"、出力)。
ブレーク;
}
フラグ++。
}
fFmpegFrameGrabber.stop()。
fFmpegFrameGrabber.close();
}キャッチ(例外e){
e.printStackTrace();
}
appointFramePictureを返します。
}
パブリック静的たBufferedImage frameToBufferedImage(フレーム枠){
//创建のBufferedImage对象
Java2DFrameConverterコンバータ=新しいJava2DFrameConverter()。
たBufferedImageのBufferedImage = converter.getBufferedImage(フレーム)。
BufferedImageを返します。
}