在視頻處理場景中,常需要將 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:音頻編碼為 MP3escapeshellarg() 處理,生產環境必須修正set_time_limit(0) 或使用異步隊列shell_exec 返回值,記錄 FFmpeg 輸出用於除錯ffmpeg 單一工具鏈(支援 -vf subtitles=file.srt 濾鏡),或引入 PHP-FFMpeg 函式庫適合中小型專案的批次視頻處理自動化;大規模系統建議採用消息隊列 + Worker 架構,並遷移至純 FFmpeg 方案。