天天看點

java+ffmpeg使用記錄java+ffmpeg使用記錄一、前言二、正文三、其它

文章目錄

  • java+ffmpeg使用記錄
  • 一、前言
  • 二、正文
    • 1.指令行運作
    • 2.java代碼調用
  • 三、其它
    • 1.常用參數
    • 2.視訊參數
    • 3.音頻參數
    • 4.常用指令
      • 1)圖檔
      • 2)音視訊

java+ffmpeg使用記錄

一、前言

  • ffmpeg

完整的跨平台解決方案,用于記錄,轉換和流傳輸音頻和視訊。

FFmpeg是領先的多媒體架構,能夠解碼,編碼, 轉碼,mux,demux,流,過濾和播放人類和機器建立的幾乎所有内容。它支援最模糊的老舊格式,直至最新的格式。無論它們是由某些标準委員會,社群還是公司設計的。它還具有高度的可移植性:FFmpeg可以在各種建構環境,機器體系結構和配置下,跨Linux,Mac OS X,Microsoft Windows,BSD,Solaris等編譯,運作并通過我們的測試基礎架構 FATE。

  • 開發環境
  1. 作業系統:

    Windows 7 Ultimate

  2. Java 環境:

    JDK 1.8

  • 參考:
  • ffmpeg 官網:http://ffmpeg.org/
  • ffmpeg 官方文檔:http://ffmpeg.org/documentation.html
  • 前輩對 ffmpeg 指令的總結:https://github.com/tonydeng/fmj/blob/master/ffmpeg.md
  • ProcessBuilder (java):https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html

二、正文

  • 下載下傳并解壓 ffmpeg
資源下載下傳:http://ffmpeg.org/download.html
  • 其中 bin 檔案夾包含:
  1. ffmpeg.exe

    用于轉碼
說明文檔:http://ffmpeg.org/ffmpeg.html
  1. ffplay.exe

    用于播放
說明文檔:http://ffmpeg.org/ffplay.html
  1. ffprobe.exe

    用于檢視檔案格式
說明文檔:http://ffmpeg.org/ffprobe.html

1.指令行運作

  • 拷貝視訊檔案到

    bin

    檔案夾,例如:input.mp4
  • windows 檔案夾内

    Shift + 滑鼠右擊

    在此處打開指令視窗(W)

  • 運作指令:(格式轉換)
> ffmpeg -i input.mp4 output.avi
           

2.java代碼調用

  • 建立執行指令的任務工具類

    CommandTask.java

package com.demo.ffmpeg;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;

/**
 * 執行指令的任務工具
 * */
public class CommandTask {

    /**
     * 執行指令
     * @param command 指令
     * */
    public static void exeute(List<String> command) throws IOException {
        // 執行指令
        ProcessBuilder processBuilder = new ProcessBuilder(command);
        Process process = processBuilder.start(); // 開始執行
        InputStream errorStream = process.getErrorStream(); // 位元組流
        InputStreamReader inputStreamReader = new InputStreamReader(errorStream); // 位元組流和字元流的中介
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // 字元流
        String line = "";
        while ((line = bufferedReader.readLine()) != null){
            System.out.println(line); // 輸出轉換過程
        }
        // 關閉流
        if(bufferedReader != null){ bufferedReader.close(); }
        if(inputStreamReader != null){ inputStreamReader.close(); }
        if(errorStream != null){ errorStream.close(); }
    }
}
           
  • 建立測試類

    FFmpegTest.java

package com.demo.ffmpeg;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public class FFmpegTest {

    public static void main(String[] args) {
        String ffmpegPath = "C:\\ffmpeg20200809\\bin\\ffmpeg.exe";
        String inputVideoPath = "C:\\ffmpeg20200809\\bin\\input.mp4";
        String outputVideoPath = "C:\\ffmpeg20200809\\bin\\output.avi";
        // 組裝 格式轉換 指令
        List<String> command = new LinkedList<>();
        command.add(ffmpegPath);
        command.add("-i");
        command.add(inputVideoPath);
        command.add(outputVideoPath);
        try {
            // 執行指令
            CommandTask.exeute(command);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
           

三、其它

1.常用參數

參數 說明
-i 設定輸入流
-f 設定輸出格式
-ss 開始時間;支援的時間格式:hh:mm:ss[.xxx]
-t 持續時間;支援的時間格式:hh:mm:ss[.xxx]
-title 設定标題
-author 設定作者
-copyright 設定版權
-comment 設定評論
-y 覆寫輸出檔案
-target 設定目标檔案類型(vcd、svcd、dvd)

2.視訊參數

參數 說明
-b 設定視訊流量,預設 200 k/s
-s 設定畫面的寬和高
-aspect 設定畫面的比例
-vn 不處理視訊
-vcodec 設定視訊的編碼器,預設使用與輸入流相同的編解碼器

3.音頻參數

參數 說明
-ar 設定采樣率
-ac 設定聲音的通道數
-acodec 使用codec編解碼
-an 不處理音頻

4.常用指令

1)圖檔

指令 說明
ffmpeg -i input.mp4 -y -f image2 -t 0.001 -s 500*300 output.jpg 在視訊 0.001毫秒處,截取一張 500*300 的 jpg 圖檔
ffmpeg -i input.mp4 -y -f mjpeg -ss 3 -t 0.001 -s 500*300 output.jpg 在視訊 3.003 秒處,截取一張 500*300 的 jpg 圖檔
ffmpeg -i input.mp4 -f image2 -vf fps=1 output%d.png 每秒鐘輸出一幀 png 圖檔
ffmpeg -i input.mp4 output%d.png 每幀輸出一張圖檔
ffmpeg -i input.mp4 -t 10 -pix_fmt rgb24 output.gif 将視訊轉換為 gif 圖檔
ffmpeg -i input.mp4 -vframes 60 -y -f gif output.gif 視訊前 60 幀轉換為一張 gif 圖檔
ffmpeg -f image2 -i output%d.png -r 25 video.mp4 将圖檔轉換為視訊

2)音視訊

指令 說明
ffmpeg -i input.mp4 -i input.mp3 -vcodec copy -acodec copy output.mp4 将視訊檔案和音頻檔案合并
ffmpeg -i rtsp://host/address -vcodec copy output.avi 錄制網絡視訊
ffmpeg -i input.mp4 -i logo.gif -filter_complex overlay="(main_w/2)-(overlay_w/2):(main_h/2)-overlay_h/2" output.mp4 添加居中水印;logo.gif為水印圖檔;overlay 是水印位置
ffplay -i input.mp4 -vf hflip 水準翻轉播放視訊
ffplay -i input.mp4 -vf vflip 垂直翻轉播放視訊