ffmpeg+java截取视频帧
生活随笔
收集整理的這篇文章主要介紹了
ffmpeg+java截取视频帧
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ffmpeg+java截取視頻幀
1.下載ffmpeg
鏈接: link.
解壓文件,進(jìn)入bin目錄,能看到ffmpeg.exe、ffplay.exe、ffprobe.exe三個(gè)文件。不用管它,進(jìn)行下一步。
2、設(shè)置環(huán)境變量
看到網(wǎng)上很多人下載ffmpeg是為了使用Captura,如果你也是的話(huà),直接跳過(guò)這一步。如果是另有他用,由于該程序只有命令行模式,為了方便使用,需要設(shè)置環(huán)境變量。點(diǎn)擊“系統(tǒng)屬性->高級(jí)系統(tǒng)設(shè)置->環(huán)境變量->用戶(hù)變量”,選擇“Path”條目,點(diǎn)擊“編輯->新建”,把第一步的bin文件夾路徑復(fù)制粘貼進(jìn)去,然后點(diǎn)擊確定即可。
打開(kāi)cmd命令行窗口,輸入命令“ffmpeg –version”。窗口返回ffmpeg的版本信息,說(shuō)明安裝成功。接下來(lái)你就可以直接使用命令行執(zhí)行ffmpeg命令進(jìn)行各種媒體格式的轉(zhuǎn)換了。
3.代碼實(shí)現(xiàn)
import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Scanner;/*** <b>概述</b>:test2類(lèi)<br>* TODO* <p>* <b>功能</b>:<br>* TODO** @author SuSVIP*/ public class test2 {// public static final String FFMPEG_PATH = "E:/ffmpeg/ffmpeg.exe";public static boolean processImg(String veido_path, String ffmpeg_path) {File file = new File(veido_path);if (!file.exists()) {System.err.println("路徑[" + veido_path + "]對(duì)應(yīng)的視頻文件不存在!");return false;}//獲取文件路徑,有后綴,eg:獲取E:\tmp\test\source\video\a.flvveido_path = veido_path.trim();//獲取文件路徑,無(wú)后綴,eg:獲取E:\tmp\test\source\video\aString filename = veido_path;String caselsh = filename.substring(0,filename.lastIndexOf("."));//獲取文件名,有后綴,eg:獲取a.flvString filePath1 = veido_path;//String fileName1 = filePath1.substring(filePath1.lastIndexOf("\\")+1);//獲取文件名,無(wú)后綴,eg:獲取aString filePath = veido_path;String fileName2 = filePath.substring(filePath.lastIndexOf("\\")+1);String name = fileName2.substring(0,fileName2.lastIndexOf("."));//獲取文件名的后綴,eg:獲取flvString filePath3 = veido_path;String fileName3 = filePath.substring(filePath3.lastIndexOf("\\")+1);String extension=fileName3.substring(fileName3.lastIndexOf(".")+1);//首先創(chuàng)建一個(gè)File類(lèi)對(duì)象,指定一個(gè)文件路徑File file2 = new File(caselsh);if(!file2.exists()) {//如果文件夾不存在System.err.println("文件夾不存在");file2.mkdir();//創(chuàng)建文件夾System.err.println("文件夾創(chuàng)建成功");}//保存文件的路徑String image_path = caselsh+"\\"+name+"_%d.jpg";System.out.println(image_path);List<String> commands = new java.util.ArrayList<String>();/*1.//截取縮略圖commands.add(ffmpeg_path);commands.add("-i");commands.add(veido_path);commands.add("-y");commands.add("-f");commands.add("image2");commands.add("-ss");commands.add("8");// 這個(gè)參數(shù)是設(shè)置截取視頻多少秒時(shí)的畫(huà)面// commands.add("-t");// commands.add("0.001");commands.add("-s");commands.add("700x525");commands.add(veido_path.substring(0, veido_path.lastIndexOf(".")).replaceFirst("vedio", "file") + ".png");*//* //截取視頻幀至總視頻所在文件夾commands.add(ffmpeg_path);commands.add("-i");commands.add(veido_path);commands.add("-vf");commands.add("fps=1");commands.add(veido_path.substring(0, veido_path.lastIndexOf(".")).replaceFirst("vedio", "file") + "_%d.png");*/commands.add(ffmpeg_path);commands.add("-i");commands.add(veido_path);commands.add("-vf");commands.add("fps=1");commands.add(image_path);try {ProcessBuilder builder = new ProcessBuilder();builder.command(commands);builder.start();System.out.println("截取成功");return true;} catch (Exception e) {e.printStackTrace();return false;}}public static void main(String[] args) {//Scanner data=new Scanner(System.in);//String videopath=data.next();processImg("E:\\tmp\\test\\source\\video\\a.flv", "D:\\ffmpeg\\ffmpeg-4.4\\bin\\ffmpeg.exe");} }將main方法中的視頻路徑改為要截取視頻幀的視頻路徑
總結(jié)
以上是生活随笔為你收集整理的ffmpeg+java截取视频帧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java操作数据库步骤_java数据库操
- 下一篇: 亚马逊电商数据自动化管理接口平台体系设计