PHP+FFMPEG自動轉碼H264標準Mp4文件

原文連接:http://www.fire-rain.com/blog/FFMPEG_H264_MP4php

PHP+FFMPEG自動轉碼H264標準Mp4文件

最近作一個在線教學網的項目,須要實現上傳任意格式視頻自動爲h264標準視頻,使用html5播放。最終使用PHP+FFMPEG實現,在此將詳細解決方案分享給你們!html

配置php.ini文件

file_uploads = on ;//是否容許經過HTTP上傳文件的開關。默認爲ON便是開
upload_tmp_dir ;//文件上傳至服務器上存儲臨時文件的地方,若是沒指定就會用系統默認的臨時文件夾
upload_max_filesize = 1024m ;//望文生意,即容許上傳文件大小的最大值。默認爲2M,咱們設置爲1G
post_max_size = 1024m ;//指經過表單POST給PHP的所能接收的最大值,咱們也設置爲1G

max_execution_time = 3600 ;//每一個PHP頁面運行的最大時間值(秒),默認30秒,設置爲一小時,由於後面轉碼時間好久。
max_input_time = 36000 ;//每一個PHP頁面接收數據所需的最大時間,默認60秒
memory_limit = 8m ;//每一個PHP頁面所吃掉的最大內存,默認8M

文件上傳插件

火焰雨推薦你們使用uploadifyUploadifyJQuery的一個上傳插件,實現帶進度顯示。插件安裝簡單,此處略過。
可是有個問題須要注意,非IE瀏覽器session會丟失,查了不少資料,最終總結的緣由是:html5

由於諸如uploadify採用的是flash客戶端,它產生的useragent與瀏覽器的user-agent不一樣。apache

最終解決辦法:centos

//在upmodify上傳參數中加入session參數,以下:
scriptData: {"SESSION_ID":""},
// 在服務端接收頁面加入如下代碼:
if(@$_REQUEST['SESSION_ID'] && ($session_id=$_REQUEST['SESSION_ID']) !=session_id()){
session_destroy();
session_id($session_id);
@session_start(); 
}

這樣就解決了 FLASH 不能正確傳遞頁面瀏覽器

視頻格式轉換

如今Linux下比較流行的視頻格式轉換軟件是FFMPEG,FFMPEG是用於錄製、截圖、轉換和流化音頻和視頻的完整解決方案,一套領先的音/視頻編解碼類庫。除了FFMPEG外,咱們要轉碼成H264格式 ,還須要一個擴展。(文章最後給出全部軟件包下載地址)服務器

centos 5.4環境下安裝源碼安裝h264擴展session

tar -xjvf x264-snapshot-20120718-2245-stable.tar.bz2 
  #進入解壓後的源文件目錄 
  cd x264-snapshot-20120718-2245-stable/ 
  ./configure --prefix=/usr/local --enable-shared 
  make
  make install

 //centos 5.4環境下安裝源碼安裝ffmpeg with h264擴展
 tar -xjvf ffmpeg-2.1.1.tar.bz2
 //進入解壓後目錄 
 cd ffmpeg-2.1.1
 ./configure --enable-gpl --enable-libx264
 make
 make install
 //從新加載配置
 lcfonfig 
 //測試是否安裝成功
 ffmpeg

若是你看到如下內容說明安裝成功:ide

ffmpeg version 2.1.1 Copyright (c) 2000-2013 the FFmpeg developers
 built on Dec 17 2013 23:32:40 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-3)
 configuration: --enable-libx264 --enable-gpl
 libavutil 52. 48.101 / 52. 48.101
 libavcodec 55. 39.101 / 55. 39.101
 libavformat 55. 19.104 / 55. 19.104
 libavdevice 55. 5.100 / 55. 5.100
 libavfilter 3. 90.100 / 3. 90.100
 libswscale 2. 5.101 / 2. 5.101
 libswresample 0. 17.104 / 0. 17.104
 libpostproc 52. 3.100 / 52. 3.100
 Hyper fast Audio and Video encoder
 usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
 Use -h to get full help or, even better, run 'man ffmpeg'

php調用ffmpeg轉碼視頻

$cmd = 'FFMPEG  -i  uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4';
 exec($cmd, $status);

運行前請確認exec函數已經開啓。不然請修改php.ini文件函數

最後附上FFMPEG+H264擴展+YASM+apache_mod_h264

相關文章
相關標籤/搜索