⑴ java使用ffmpeg進行視頻截圖,不成功,程序也沒報錯!
我用的是基於C++的ffmpeg開發,ffmpeg原本是針對linux下的GCC編譯器,當然通版過MinGW也可以在win下進行編譯,但是需要安裝額權外的編譯環境,你可以上chinavideo上去看看,那上面說的很清楚,的你所說的問題也不是很難,多看看開發文檔就可以解決了。
⑵ java 如何將多張JPG圖片合成視頻文件,比如:avi格式 或 mpg格式.
之前有做過圖片合成視頻的功能,大概代碼就是這樣,你可以看一下
/**
* 圖片合成視頻
* @param mp4SavePath 視頻保存路徑
* @param imageDir 圖片地址
* @param rate 這個可以理解成視頻每秒播放圖片的數量
*/
public static boolean jpgToMp4(String mp4SavePath, String imageDir, double rate) {
FFmpegFrameRecorder recorder = null;
boolean flag = true;
try {
File[] files = FileUtils.fileSort(imageDir);
int [] widthArray = new int[files.length];
int [] heightArray = new int[files.length];
/**
* 獲取合成視頻圖片的最大寬高,避免圖片比例不一致最終合成效果差
*/
for (int i = 0; i < files.length; i++) {
BufferedImage bufferedImage = ImageIO.read(files[i]);
widthArray[i] = bufferedImage.getWidth();
heightArray[i] = bufferedImage.getHeight();
}
/**
* 這個方法主要是防止圖片比例達不到視頻合成比例的要求,如果達不到下面條件視頻則會無法播放
* 圖片寬:必須要被32整除
* 圖片高:必須要被2整除
*/
int [] maxWH = getImgMaxWH(widthArray,heightArray);
recorder = new FFmpegFrameRecorder(mp4SavePath,maxWH[0],maxWH[1]);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
/**
* 視頻質量:目前測試出來的是25-30最清晰,視頻質量范圍好像是0-40,具體可以自己慢慢測
*/
recorder.setVideoQuality(25);
recorder.setFormat("mp4");
recorder.setFrameRate(rate > 0 ? rate : 1);
recorder.setPixelFormat(0);
recorder.start();
OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
/**
* 合成視頻
*/
for(int i = 0; i < files.length; i++ ){
opencv_core.IplImage image = cvLoadImage(files[i].getPath());
recorder.record(conveter.convert(image));
opencv_core.cvReleaseImage(image);
}
logger.info("合成成功");
} catch(Exception e) {
e.printStackTrace();
flag = false;
logger.error("合成失敗");
} finally {
try {
if (recorder != null){
recorder.stop();
recorder.release();
}
} catch (FrameRecorder.Exception e) {
e.printStackTrace();
}
}
return flag;
}
⑶ 誰知道如何用純JAVA代碼播放視頻文件(可以播放一種視頻文件,如mp4,就可以了)
你好!我來們所說的mp4僅僅自只是一種視頻封裝格式,裡面的視頻流卻有各種編碼格式!就像瓶子裝水一樣,「瓶子」有各種形狀,如mp4 avi wmv rmvb等等…而其中裝的是什麼液體就不一定了!所以,看似都是.mp4文件,它的編碼格式可能是H.246編碼,也可能是...
⑷ 初學了一段時間Java。想做一個應用程序,程序只需要播放一個本地視頻,MP4格式,求教怎麼做
使用javafx的Media,MediaPlayer,MediaView。代碼如下:
importjava.io.File;
importjavafx.application.Application;
importjavafx.beans.binding.Bindings;
importjavafx.beans.property.ReadOnlyProperty;
importjavafx.beans.value.ObservableValue;
importjavafx.event.ActionEvent;
importjavafx.geometry.Pos;
importjavafx.scene.Scene;
importjavafx.scene.control.Button;
importjavafx.scene.control.Menu;
importjavafx.scene.control.MenuBar;
importjavafx.scene.control.MenuItem;
importjavafx.scene.control.Slider;
importjavafx.scene.image.Image;
importjavafx.scene.image.ImageView;
importjavafx.scene.layout.BorderPane;
importjavafx.scene.layout.HBox;
importjavafx.scene.layout.Pane;
importjavafx.scene.layout.VBox;
importjavafx.scene.media.Media;
importjavafx.scene.media.MediaPlayer;
importjavafx.scene.media.MediaPlayer.Status;
importjavafx.scene.media.MediaView;
importjavafx.stage.FileChooser;
importjavafx.stage.FileChooser.ExtensionFilter;
importjavafx.stage.Stage;
importjavafx.util.Duration;
{
privateMediaViewmediaView;
privateSliderprocessSlider;
privatestaticfinalObjectAUTO=newObject(),MANUAL=newObject();
publicstaticvoidmain(String[]args){
launch(args);
}
@Override
publicvoidstart(StageprimaryStage)throwsException{
primaryStage.setTitle("javafx視頻播放器");
BorderPaneroot=newBorderPane();
//菜單欄
initMenu(root);
//視頻播放控制項
mediaView=initMediaView(root);
//視頻功能控制項
initMediaControllView(root);
primaryStage.setScene(newScene(root,600,400));
primaryStage.setOnCloseRequest(event->System.exit(0));
primaryStage.show();
}
privateMenuBarinitMenu(finalBorderPaneparent){
Menumenu=newMenu("菜單");
MenuItemitem=newMenuItem("打開");
item.setOnAction(event->{
FileChooserchooser=newFileChooser();
chooser.setTitle("選擇視頻文件");
chooser.getExtensionFilters().add(newExtensionFilter("視頻文件","*.mp4","*.flv"));
Filefile=chooser.showOpenDialog(parent.getScene().getWindow());
if(file!=null){
MediaPlayerplayer=mediaView.getMediaPlayer();
//關閉當前的player
if(player!=null){
player.stop();
player.dispose();
}
processSlider.setValue(0);
//創建一個新的player並自動播放
player=newMediaPlayer(newMedia(file.toURI().toString()));
player.currentTimeProperty().addListener(this::mediaProcessChanged);
player.setAutoPlay(true);
mediaView.setMediaPlayer(player);
}
});
menu.getItems().add(item);
item=newMenuItem("退出");
item.setOnAction(event->parent.getScene().getWindow().hide());
menu.getItems().add(item);
MenuBarmenuBar=newMenuBar(menu);
parent.setTop(menuBar);
returnmenuBar;
}
privateMediaViewinitMediaView(finalBorderPaneparent){
MediaViewview=newMediaView();
Panepane=newPane(view);
parent.setCenter(pane);
//視頻寬高可隨著窗口變化而自動縮放
view.fitWidthProperty().bind(Bindings.selectDouble(view.parentProperty(),"width"));
view.fitHeightProperty().bind(Bindings.selectDouble(view.parentProperty(),"height"));
view.setPreserveRatio(true);
returnview;
}
(finalBorderPaneparent){
VBoxbottom=newVBox(10);
bottom.setAlignment(Pos.CENTER);
parent.setBottom(bottom);
Sliderslider=newSlider(0,100,0);
slider.valueProperty().addListener(this::processSliderChanged);
// slider.setOnMouseClicked(this::processSliderClicked);
bottom.getChildren().add(slider);
processSlider=slider;
HBoxhbox=newHBox(10);
bottom.getChildren().add(hbox);
hbox.setAlignment(Pos.CENTER);
Buttonbtn=newButton(null,newImageView(loadImage("pause.png")));
btn.setOnAction(this::pauseOrPlay);
hbox.getChildren().add(btn);
btn=newButton(null,newImageView(loadImage("stop.png")));
btn.setOnAction(this::stopPlay);
hbox.getChildren().add(btn);
}
privatestaticImageloadImage(StringresPath){
returnnewImage(Thread.currentThread().getContextClassLoader().getResourceAsStream(resPath));
}
privatevoidpauseOrPlay(ActionEventevent){
MediaPlayerplayer=mediaView.getMediaPlayer();
if(player==null){
return;
}
Statusstatus=player.getStatus();
if(status==Status.READY||status==Status.PAUSED){
player.play();
((Button)event.getTarget()).setGraphic(newImageView(loadImage("pause.png")));
}elseif(status==Status.PLAYING){
player.pause();
((Button)event.getTarget()).setGraphic(newImageView(loadImage("play.png")));
}
}
privatevoidstopPlay(ActionEventevent){
MediaPlayerplayer=mediaView.getMediaPlayer();
if(player==null){
return;
}
player.stop();
}
// (MouseEventevent){
// Sliderslider=(Slider)event.getSource();
// if(mediaView.getMediaPlayer()!=null){
// Durationd=mediaView.getMediaPlayer().getTotalDuration().multiply(slider.getValue()/slider.getMax());
// mediaView.getMediaPlayer().seek(d);
// }
// }
(ObservableValue<?extendsNumber>observable,NumberoldValue,NumbernewValue){
Sliderslider=(Slider)((ReadOnlyProperty<?extendsNumber>)observable).getBean();
if(slider.getUserData()==AUTO){//進度條是自動改變的,因此不用設置播放器
slider.setUserData(null);
return;
}
if(mediaView.getMediaPlayer()!=null){
slider.setUserData(MANUAL);
Durationd=mediaView.getMediaPlayer().getTotalDuration().multiply(newValue.doubleValue()/slider.getMax());
mediaView.getMediaPlayer().seek(d);
}
}
(ObservableValue<?extendsDuration>observable,DurationoldValue,DurationnewValue){
if(processSlider.getUserData()==MANUAL){//手動點擊進度條
processSlider.setUserData(null);
return;
}
MediaPlayerplayer=(MediaPlayer)((ReadOnlyProperty<?extendsDuration>)observable).getBean();
processSlider.setUserData(AUTO);
processSlider.setValue(newValue.toMillis()/player.getTotalDuration().toMillis()*100);
}
}
⑸ 哪個網站有java視頻
騰訊課堂和網路傳課都有Java視頻。從初級到高級的Java教學視頻基本都有,可以跟著老師的講解學習。
⑹ 瑙嗛戝備綍杞鍖栨垚java嫻佹枃浠舵斁鍒扮綉欏典腑鎾鏀
璇ラ棶棰樼殑鎿嶄綔鏂規硶濡備笅錛
1銆佽嗛戠紪鐮侊細闇瑕佸皢瑙嗛戞枃浠惰繘琛岀紪鐮侊紝杞鎹㈡垚鍙浠ュ湪緗戦〉涓鎾鏀劇殑鏍煎紡錛屽侻P4銆傝繖涓榪囩▼鍙浠ラ氳繃浣跨敤涓浜涘紑婧愮殑搴擄紝濡俋uggler鏉ュ畬鎴愩俋uggler鍙浠ヨ交鏉懼湴灝嗚嗛戞枃浠剁紪鐮佷負MP4鏍煎紡錛屽悓鏃惰繕鍙浠ュ皢闊抽戜粠瑙嗛戜腑鎻愬彇鍑烘潵銆
2銆佸壋寤篔ava嫻侊細瑙嗛戣緙栫爜涓篗P4鏍煎紡錛屽彲浠ヤ嬌鐢↗ava鐨凢ileInputStream綾繪潵鍒涘緩涓涓杈撳叆嫻侊紝灝嗚嗛戞枃浠剁殑鏁版嵁璇誨彇鍒癑ava紼嬪簭涓銆
3銆佸皢Java嫻佸祵鍏ュ埌緗戦〉涓錛氶渶瑕佸皢Java嫻佸祵鍏ュ埌緗戦〉涓銆傝繖鍙浠ラ氳繃浣跨敤Java鐨刟pplet鏉ュ疄鐜般俛pplet鏄涓縐嶅彲浠ョ敤Java緙栧啓鐨勫㈡埛絝搴旂敤紼嬪簭錛屽彲浠ュ祵鍏ュ埌HTML欏甸潰涓騫跺湪鐢ㄦ埛鐨勬祻瑙堝櫒涓婅繍琛屻傞氳繃灝咼ava嫻佷紶閫掔粰applet錛屽氨鍙浠ュ湪緗戦〉涓婃挱鏀捐嗛戜簡銆