1. 程式人生 > >擷取視訊封面圖

擷取視訊封面圖

/**
     * 擷取視訊某些幀轉換為圖片
     *
     * @author 周化益
     * @param entity 實體Class
     * @param entityId 記錄id
     * @param fileName 檔名
     * @param fileSuffix 檔案字尾
     */
	public synchronized static <T> void capturePhotoFromVideo(Class<T> entity, long entityId, String fileName) {
		Properties props = initConfigFile();
		if (null != props){
			String inFilePath = null;//本地檔案
			String outFilePath = null;//視訊擷取的圖片
			
			inFilePath = CommonUtil.uploadPath() + "upload/" + entity.getSimpleName() + "/" + entityId + "/" + fileName;
			File file = new File(inFilePath);
			
			if (file.exists()) {
				Process process = null;
			    int duration = CommonUtil.getMediaDuration(file.getPath());
			    
			    duration = duration/120000;//視訊總時間的三分之一處擷取
			    
				StringBuffer command = new StringBuffer();				
				File thumbFile = new File(CommonUtil.uploadPath()+ "upload/",entity.getSimpleName() + "/" + entityId);
				if (!thumbFile.exists()){
					thumbFile.mkdirs();
				}
				
				String path = FileLoad.class.getResource("").getPath();
				
				int end = path.lastIndexOf("com"); 
				int dot = fileName.lastIndexOf('.'); 
				
				outFilePath = thumbFile + "/" + fileName.substring(0,dot) + ".jpg";
				command.append("cmd /c ").append(path.substring(1, end)+"resources/")
				.append("ffmpeg.exe").append(" -i ").append(inFilePath)
				.append(" -y -f image2 -ss ").append(duration).append(" -vframes 1 -s ")
				.append(DEFAULT_VIDEO_PHOTO_RESOLUTION).append(" ").append(outFilePath);	
				
				try {
					System.out.println(command);
					String systemOutText = "抓取視訊圖片所用時間為:";
					process  = execCommand(command.toString(),systemOutText);
				} catch (Exception e) {
					e.printStackTrace();
				} finally{
					if (null != process){
						process.destroy();
					}
				}
			}
		}
	}
	
    /**
     * 生成縮圖
     *
     * @author 周化益
     * @param inFilePath 原始檔
     * @param outFilePath 生成的縮圖檔案
     */
    public synchronized static void makeSmallImage(String inFilePath,String outFilePath){
    	try {
    		String convertPath = " convert.exe";
    		String command = "cmd /c "+getFfrmpegPath()+convertPath+" -resize \"100x100>\" +profile \"*\" "+inFilePath+" "+ outFilePath;
    		String systemOutText = inFilePath+"檔案的縮圖獲取時間:";
    		execCommand(command,systemOutText);
    	} catch (Exception e) {
			e.printStackTrace();
		}
    }
    
    /**
     * 執行命令列語句
     *
     * @author 周化益
     * @param command 命令列語句
     * @param systemOutText 執行後的輸出語句
     */
    public static Process execCommand(String command,String systemOutText){
    	Process process = null;
    	try {
    		long startTime = System.currentTimeMillis();
    		String[] cmdArry = command.split(" ");
    		ProcessBuilder builder = new ProcessBuilder(cmdArry);
    		builder.redirectErrorStream(true);    
    	    process = builder.redirectErrorStream(true).start();
    	    
    	    //防止執行緒堵塞
    	    new PrintStream(process.getInputStream()).start();
    	    
    		BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
        	process.waitFor();
        	br.close();
    		long endTime = System.currentTimeMillis();
    		if (null!=systemOutText && !systemOutText.equals("")){
    			System.out.println(systemOutText+(endTime-startTime)+"毫秒");
    		}    		
		} catch (Exception e) {
			e.printStackTrace();
		}
    	return process;
    }
/**
	 * 獲取視訊專案根目錄
	 * 
	 * @author zhy
	 * @return
	 */
	public static String uploadPath() {
		String path = CommonUtil.class.getResource("") .getPath();  
		int end = path.lastIndexOf("WEB-INF");  
		path = path.substring(1, end); 
		return path+"/";
	}

/**
	 * 獲取多媒體檔案長度
	 *
	 * @author 周化益
	 * @param filePath 檔案路徑
	 * @return int 檔案長度
	 */
	public synchronized static int getMediaDuration(String filePath){
		int duration = 0;
		int readLen = 0;
		byte[] byteTemp = new byte[5];
		InputStream is = null;
		Process process = null;
		try {
			StringBuffer command = new StringBuffer();
			command.append("cmd /c ").append("MediaInfo.exe").append(" --Inform=General;")
			       .append("\"%Duration%\" \"").append(filePath).append("\"");
			process = Runtime.getRuntime().exec(command.toString());
			is = process.getInputStream();
			command.setLength(0);
			while((readLen = is.read(byteTemp))!=-1){
				command.append(new String(byteTemp,0,readLen));
			}
			if (command.length()>0){
				duration = Integer.parseInt(command.toString().replaceAll("\\s", ""));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if (null!=is){
					is.close();
				}
				if (null!=process){
					process.destroy();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		 }
		return duration;
	}
需要下載ffmpeg.exe和MediaInfo.exe

相關推薦

擷取視訊封面

/** * 擷取視訊某些幀轉換為圖片 * * @author 周化益 * @param entity 實體Class * @param entityId 記錄id * @param fileName 檔名

呼叫FFmpeg 擷取視訊

百度搜了搜 截縮圖命令 大多是錯誤格式 ffmpeg返回來的值 [1] 也就是格式有錯誤。 都是貼上複製。。。 也是無語。。。      無錯誤格式如下:↓ 返回 [0] ffmpegx86.exe -i videofile -

HTML5的多個video標籤:擷取視訊源的封面poster,監聽視訊播放狀態的功能;

// 視訊------視訊截圖 ~~ 視訊播放狀態 ~~ const setMedia = function(video, scale = 0.8) { // 設定poster屬性:(非本地視訊資源會有跨域截圖問題) video.addEventListene

linux系統,CentOS7.2安裝ffmpeg擴充套件,PHP用FFmpeg擷取視訊第一幀作為視訊封面,並給圖片新增播放視訊按鈕

最近做公司的專案中,有使用者上傳視訊,後臺這邊接收視訊並上傳,獲取視訊第一幀作為視訊封面的功能,在網上查找了好多資料,並且安裝 了ffmpeg-php的PHP擴充套件,由於版本問題,安裝好幾個版本都不成功,最後放棄安裝擴充套件,後來執行程式碼發現不用安裝那個擴充套件也能實現截圖並上傳的功能,所以要擷

前端實現 視訊封面擷取

部分html <video id="ppVideo" controls width="300" heigth="300" controlslist="nodownload" src="/xxx/xxx.mp4">您的瀏覽器不支援 video 標籤。</video>

如何擷取視訊中的一部分,製作成GIF動態

怎麼把視訊做成gif 擷取視訊中的一部分內容,製作成GIF動態圖?是先用播放器進行擷取,還是說先轉換視訊格式,然後用相應的GIF編輯器呢。網上關於怎樣把視訊擷取轉化成gif動態圖片的方法有很多,林林總總可謂看的是眼花繚亂,但真正能行的卻沒有幾個。小編今日教大家一個將視訊轉換成gif的方法,不需要複雜的方法

java使用ffmpeg擷取視訊某個時間點的截

1.軟體安裝   mac brew install ffmpeg 安裝後路徑:"/usr/local/Cellar/ffmpeg/4.0.1/bin ffmpeg –version 檢視版本   linux 暫缺,後補

java ffmpeg(Windows/Linux)擷取視訊封面

一、Windows版本1、下載前往FFmpeg官網http://ffmpeg.org/download.html下載Windows版本FFmpeg(我下載ffmpeg-4.0-win64-shared)2、解壓下載後解壓到本地(我的解壓目錄D:\wedive_file\ffm

PHP -- 七牛雲 在線視頻 獲取某一幀作為封面

pan ram mp4 str targe set .com 在線視頻 。。 ### 最近碰到視頻處理,需要視頻封面? 但用的是七牛雲存儲視頻,索性搜了一下,怎麽獲取視頻的某一幀作為視頻的封面圖。。。 發現了七牛官網又自身的接口 ### https://develope

3分鐘快速製作一張高顏值的公眾號封面

  http://www.sohu.com/a/138527729_110747 製作公眾號封面圖,是每個新媒體小編每天都必做卻很頭疼的工作。找圖、做圖有時比寫文章花費的時間還要長。這篇文章給大家介紹2種快速製作高顏值封面的方法,希望能對大家有幫助。 封面圖展示的3種場景:

如何擷取視訊轉gif動畫圖片

我每當拍錄有一些搞笑有趣的視訊,就忍不住想發給朋友們分享下。原先我會直接將視訊上傳土豆的,最近發現還有一種好玩的方法,就是擷取視訊中的精華片段做成gif圖。一般縮小在1 MB以內還能當QQ表情,直接在聊天視窗發給朋友看,更直觀,檔案小也便於收藏,有木有?!想學如何擷取視訊轉GIF動畫圖片麼?有興趣的朋友可

php用ffmpeg擴充套件擷取視訊第一幀的方法

windows 或linux上要安裝ffmpeg擴充套件,安裝方法可以自行百度 通過執行外部命令的方式exec()實現,如果是本地視訊很方便,$tempfiles就是完整的視訊路徑;如果是post過來的視訊(僅限.mp4格式),無法用臨時檔案(.tmp)進行擷取,本人的用了個笨方法,

java擷取圖片截畫框

java圖片截圖 前言:上文中提到了圖片的合成,這篇文章中介紹的是圖片的截圖。 需求:一張圖片用滑鼠畫框,然後截圖該圖片。並在截圖的框框劃線標識。 圖片合成:https://blog.csdn.net/qq_34846877/article/details/81324779 如

如何擷取視訊片段並製作成短視訊

  視訊擷取算是網上的熱門搜尋詞,很多網友在視訊中遇到精彩的片段十分喜歡,可是又不知道該怎麼擷取下來儲存,只能上網搜尋求助。其實學會擷取視訊片段對我們來說算是一個不錯的技能,因為這樣我們就可以自己擷取喜歡的視訊片段並製作成短視訊分享給大家或者當做業餘愛好也不錯。如何擷取視訊片段並製作成短視訊?請看下面的介

Java——使用javacv生成視訊

轉載大佬文章,以備後期再次需要,親測使用有效 新增依賴 在pom.xml中新增依賴配置 <dependencies>   <dependency>     <groupId>org.bytedeco</groupId

使用ffmpeg進行視訊

1、從ffmpeg的Windows Build網站(https://ffmpeg.zeranoe.com/builds/)下載ffmpeg。 2、下載後解壓壓縮包,得到如下左圖的檔案。然後開啟bin資料夾,可以看到3個.exe檔案。     -------->>>

Java圖片,視訊上傳,擷取視訊幀以及檔案下載和視訊IO獲取

public class FileUtil { @Value("${img.url}") public String imgUrl; @Value("${video.url}") public String videoUrl; /** * 儲存圖片 * @para

HTML5 CSS3 誘人的例項 :模仿優酷視訊功能

一般的視訊站點對於使用者上傳的視訊,在使用者上傳完畢後。能夠對播放的視訊進行截圖,然後作為視訊的展示圖。 專案中也能夠引入這種功能給使用者一種不錯的體驗。而不是讓使用者額外上傳一張展示圖。 效果圖: 看起來還是非常不錯,以下我給大家分析下,極其核心程式碼非常easy

Android 獲取網路視訊

一、 private void getNetVideoBitmap(final String videoUrl) { new Thread(new Runnable() { @Override public void run() {

js視訊

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content=