fluent-ffmpeg
是一個用于在 Node.js 環境中與 FFmpeg 進行交互的強大庫,它提供了流暢的 API 來執行各種音視頻處理任務,如轉碼、剪輯、合并等。
一、安裝
npm install fluent-ffmpeg
二、基本使用
要使用 fluent-ffmpeg
,首先需要確保系統中已經安裝了 FFmpeg,或者使用 ffmpeg-static
等庫提供靜態的 FFmpeg 二進制文件。如下,展示如何將視頻文件轉換為另一種格式
const ffmpeg = require("fluent-ffmpeg");
// 設置 FFmpeg 可執行文件的路徑(如果需要)
// ffmpeg.setFfmpegPath('/path/to/ffmpeg');
// 創建一個 FFmpeg 命令
ffmpeg("input.mp4").output("output.avi").on("end", () => {console.log("轉換完成");}).on("error", (err) => {console.error("轉換出錯:", err.message);}).run();
三、常見功能及用法
1. 轉碼
可以指定不同的編碼器、分辨率、碼率等參數進行轉碼
ffmpeg("input.mp4").videoCodec("libx264") // 指定視頻編碼器.audioCodec("aac") // 指定音頻編碼器.size("640x480") // 指定視頻分辨率.videoBitrate("1000k") // 指定視頻碼率.output("output.mp4").run();
2. 剪輯
可以指定開始時間和持續時間來剪輯視頻
ffmpeg("input.mp4").setStartTime("00:01:00") // 從第 1 分鐘開始.setDuration("00:00:30") // 剪輯 30 秒.output("output.mp4").run();
3. 合并多個視頻文件
可以將多個視頻文件合并為一個
const command = ffmpeg();
// 添加多個輸入文件
command.input("input1.mp4");
command.input("input2.mp4");
// 合并文件
command.mergeToFile("output.mp4", __dirname);
4. 生成縮略圖
可以從視頻中提取縮略圖
ffmpeg("input.mp4").screenshots({count: 1, // 生成 1 張縮略圖folder: "thumbnails", // 縮略圖保存的文件夾size: "320x240", // 縮略圖的尺寸filename: "thumbnail-%b.jpg", // 縮略圖的文件名
});
5. 事件監聽
fluent-ffmpeg
提供了多個事件,可以用于監控命令的執行狀態
start
:命令開始執行時觸發。
progress
:處理進度更新時觸發,可以獲取當前的處理進度信息。
end
:命令執行完成時觸發。
error
:命令執行出錯時觸發。
ffmpeg("input.mp4").output("output.mp4").on("start", (commandLine) => {console.log("開始執行命令:", commandLine);}).on("progress", (progress) => {console.log("處理進度:", progress.percent + "%");}).on("end", () => {console.log("處理完成");}).on("error", (err) => {console.error("處理出錯:", err.message);}).run();
四、注意事項
1. FFmpeg 依賴
fluent-ffmpeg
只是一個封裝庫,需要系統中安裝有 FFmpeg 才能正常工作。可以使用 ffmpeg-static
來提供靜態的 FFmpeg 二進制文件,避免手動安裝的麻煩。
2. 錯誤處理
在實際應用中,要注意對 error
事件進行處理,以捕獲和處理可能出現的錯誤,保證程序的健壯性。
3. 資源管理
音視頻處理通常會消耗大量的系統資源,特別是在處理大文件或進行復雜操作時,要注意合理分配資源,避免程序崩潰。