ffmpeg學習

代碼地址:https://gitee.com/panmingshuai/ffmpeg-demo.gitjava

代碼蕩下來後,resource目錄下有一個ffmpeg.zip的壓縮包,解壓放到E:\ffmpeg下:git

而後咱們利用java調用ffmpeg的命令執行視頻的相關操做:ui

將視頻轉爲flv格式編碼

public static void processFLV() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i");
		commend.add("E:\\qwe.mp4");
		commend.add("-ab");
		commend.add("56");
		commend.add("-ar");
		commend.add("22050");
		commend.add("-qscale");
		commend.add("8");
		commend.add("-r");
		commend.add("15");
		commend.add("-s");
		commend.add("600x500");
		commend.add("E:\\qwenew.flv");

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

這裏的-i表示須要操做的文件的路徑,命令最後的路徑表示處理好的文件存放的路徑和文件名,記得寫上.flv。code

指定格式的轉換視頻

// 指定格式轉換 可是這裏沒有設置其餘參數,因此生成的文件以ffmpeg內置的生成
	// MP4轉avi c:\ffmpeg\ffmpeg -i c:\ffmpeg\input\c.mp4 -f avi
	// c:\ffmpeg\output\a.avi
	public static void process() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i"); // 指定要處理的文件
		commend.add("E:\\qwe.mp4");
		commend.add("-f"); // 指定轉換格式
		commend.add("avi");
		commend.add("E:\\qwe2.avi"); // 最後指定文件輸出的路徑

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

這裏的-f表示指定什麼格式進行強制轉換,這裏選了人見人愛的avi格式。ip

視頻截圖:ci

// 截圖
	// ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
	public static void cutScreen() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i");
		commend.add("E:\\qwe.mp4");
		commend.add("-y");// 輸出覆蓋路徑,即若是已存在下面指定路徑的文件,則覆蓋掉
		commend.add("-f");
		commend.add("image2");
		commend.add("-ss"); // 指定在哪截圖
		commend.add("5");
		commend.add("-t"); // 指定要記錄的時間,由於是截圖因此是0.001s
		commend.add("0.001");
		commend.add("-s");
		commend.add("1920x1080");
		commend.add("E:\\qwe3.jpg");

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

這裏的-ss表示在視頻的哪裏截圖,他的單位是秒,即也能夠用HH:mm:ss的形式。還有一種按多少幀截圖的,可是感受不實用,通常人都是說在多少時間截圖,沒聽過誰要求在多少幀截圖的。-t表示視頻截得時間持續多久,單位也是秒,由於是截圖因此設定爲0.001秒。-s表示截圖的長寬多少。get

截取視頻段:input

// 截取視頻
	public static void cutVedio() throws IOException {
		List<String> commend = new ArrayList<String>();
		commend.add("E:\\ffmpeg\\ffmpeg"); // ffmpeg文件的位置
		commend.add("-i");
		commend.add("E:\\qwe.mp4");
		commend.add("-vcodec");//視頻使用原來同樣的視頻編解碼器。
		commend.add("copy");
		commend.add("-acodec");//音頻使用原來同樣的音頻編解碼器。
		commend.add("copy");
		commend.add("-ss");
		commend.add("00:00:25");
		commend.add("-t");
		commend.add("10");
		commend.add("E:\\qwe563.mp4");
		commend.add("-y");

		ProcessBuilder builder = new ProcessBuilder();
		builder.command(commend);
		builder.start();
	}

這段出現的都是以前介紹過的,就很少說了

下面列出一些經常使用的ffmpeg的命令,能夠像上面同樣調用

-L license

-h 幫助

-fromats 顯示可用的格式,編解碼的,協議的。。。

-f fmt 強迫採用格式fmt

-I filename 輸入文件

-y 覆蓋輸出文件

-t duration 設置紀錄時間 hh:mm:ss[.xxx]格式的記錄時間也支持

-ss position 搜索到指定的時間 [-]hh:mm:ss[.xxx]的格式也支持

-title string 設置標題

-author string 設置做者

-copyright string 設置版權

-comment string 設置評論

-target type 設置目標文件類型(vcd,svcd,dvd) 

視頻選項:

-b bitrate 設置比特率,缺省200kb/s

-r fps 設置幀頻 缺省25

-s size 設置幀大小 格式爲WXH 缺省160X128.下面的簡寫也能夠直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 設置橫縱比 4:3 16:9 或 1.3333 1.7777

-vn 不作視頻記錄

-bt tolerance 設置視頻碼率容忍度kbit/s

-vcodec codec 強制使用codec編解碼方式。若是用copy表示原始編解碼數據必須被拷貝。

-pass n 選擇處理遍數(1或者2)。兩遍編碼很是有用。第一遍生成統計信息,第二遍生成精確的請求的碼率

音頻選項:

-ac channels 設置通道 缺省爲1

-an 不使能音頻紀錄

-acodec codec 使用codec編解碼

相關文章
相關標籤/搜索