首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 簡易視頻縮圖生成:FFmpeg 一鍵擷取關鍵幀

     編輯:PHP 綜合知識

極簡實現

本文提供最精簡的 PHP 視頻縮圖生成函數,僅需幾行代碼即可從任意視頻檔案擷取指定時間點的畫面作為縮圖。

核心函數

function convertToFlv($input, $output) {
    echo "Converting $input to $output
"; $command = "ffmpeg -v 0 -y -i $input -vframes 1 -ss 5 -vcodec mjpeg -f rawvideo -s 286x160 -aspect 16:9 $output"; echo "$command
"; shell_exec($command); echo "Converted
"; }

參數詳細說明

  • -v 0:關閉詳細日誌輸出
  • -y:覆蓋輸出檔案無需確認
  • -i $input:輸入檔案
  • -vframes 1:只擷取 1 幀
  • -ss 5:跳至第 5 秒(避開開頭黑屏/Logo)
  • -vcodec mjpeg:使用 MJPEG 編碼輸出 JPEG
  • -f rawvideo:強制原始視頻格式
  • -s 286x160:輸出解析度(16:9)
  • -aspect 16:9:設定長寬比

實務優化要點

安全性修正(必須)

$command = sprintf(
    'ffmpeg -v 0 -y -i %s -vframes 1 -ss 5 -vcodec mjpeg -f rawvideo -s 286x160 -aspect 16:9 %s',
    escapeshellarg($input),
    escapeshellarg($output)
);

效能優化

  • 快速求幀:將 -ss 5 移至 -i 之前(ffmpeg -ss 5 -i input ...),速度提升 10-100 倍
  • 異步處理:大量視頻時使用隊列系統(Redis/RabbitMQ + Worker)
  • 多尺寸生成:一次生成多種尺寸縮圖(大圖、中圖、小圖)

錯誤處理與回傳值

function generateThumbnail($input, $output, $time = 5) {
    $cmd = sprintf(
        'ffmpeg -y -ss %d -i %s -vframes 1 -vcodec mjpeg %s',
        $time,
        escapeshellarg($input),
        escapeshellarg($output)
    );
    $result = shell_exec($cmd);
    return file_exists($output) && filesize($output) > 0;
}

適用場景

適合簡單專案、原型開發、單機少量視頻處理。生產環境建議封裝為服務類,整合異步隊列、快取、日誌、監控等基礎設施。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved