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

PHP 結合 FFmpeg 為視頻添加字幕並轉碼的實戰指南

     編輯:PHP 綜合知識

需求背景

在視頻處理場景中,常需要將 AVI 格式視頻轉碼為 MP4,並燒錄 SRT 字幕檔案。本文展示如何使用 PHP 呼叫 ffmpeg 與 mencoder 完成批次處理。

核心處理流程

目錄掃描與檔案匹配

程式碼遍歷當前目錄,識別 .avi 檔案,並自動推導對應的字幕檔(.srt)、索引檔(.idx)、縮圖(.jpg)與輸出檔(.mp4)路徑:

$sub_file = str_ireplace(".avi", ".srt", $dir.$file);
$idx_file = str_ireplace(".avi", ".idx", $dir.$file);
$thumb_file = str_ireplace(".avi", ".jpg", $dir.$file);
$out_file = str_ireplace(".avi", ".mp4", $dir.$file);

縮圖生成

使用 ffmpeg 從視頻第 250 幀提取縮圖:

ffmpeg -v 0 -y -i input.avi -vframes 1 -ss 250 -vcodec mjpeg -f rawvideo -s 286x160 -aspect 16:9 output.jpg
  • -ss 250:跳至第 250 秒(視幀率而定)
  • -s 286x160:輸出解析度
  • -aspect 16:9:長寬比

視頻轉碼與字幕燒錄

使用 mencoder 進行核心轉碼:

mencoder input.avi -o output.mp4 -sub input.srt -subfont-text-scale 3.0 -subpos 99 -af volume=10 -aspect 16:9 -of avi -noodml -ovc x264 -x264encopts bitrate=500:level_idc=41:bframes=3:frameref=2:nopsnr:nossim:pass=1:threads=auto -oac mp3lame

關鍵參數解析:

  • -sub:指定字幕檔案
  • -subfont-text-scale 3.0:字幕字體縮放
  • -subpos 99:字幕垂直位置(底部)
  • -ovc x264:使用 H.264 編碼器
  • -oac mp3lame:音頻編碼為 MP3

安全與效能考量

  • 命令注入風險:檔案名稱未經過 escapeshellarg() 處理,生產環境必須修正
  • 執行超時:大型視頻轉碼耗時極長,需設定 set_time_limit(0) 或使用異步隊列
  • 錯誤處理:建議捕獲 shell_exec 返回值,記錄 FFmpeg 輸出用於除錯
  • 現代替代方案:推薦使用 ffmpeg 單一工具鏈(支援 -vf subtitles=file.srt 濾鏡),或引入 PHP-FFMpeg 函式庫

適用場景

適合中小型專案的批次視頻處理自動化;大規模系統建議採用消息隊列 + Worker 架構,並遷移至純 FFmpeg 方案。

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