如何利用Ffmpeg獲得flv影片縮圖與影片長度時間
FFmpeg是用於錄製、轉換和串流音訊和視訊的完整解決方案,一套領先的音/視訊編解碼類別庫。官方正式版ffmpeg不支援rmvb和rm格式。今天我們就來介紹一下。
Google了半天發現可以使用Ffmpeg獲得視頻的一些信息,先介紹一下FFMEPG
這裡簡單說一下:FFmpeg是用於錄製、轉換和串流音訊和視訊的完整解決方案,一套領先的音/視訊編解碼類庫。官方正式版ffmpeg不支援rmvb和rm格式. 不過有很多解決方法
FFmpeg的官方網址是 http://ffmpeg.mplayerhq.hu/ 。
中文Wiki是 http://www.ffmpeg.com.cn/ ,資料很多。
㈠安裝FFMEPG
作業系統:centos6
找了那麼多安裝FFMEPG的文章,基本上都是沒有註釋,需要安裝那麼多軟體包,也不說明一下是做什麼用的,糾結。 。而且安裝上面步驟總是出問題,最後只得尋找官網,認真的看一下,確實官方的資料很好用,以後一定要優先看官網資料。
由於FFMEPG本身就支援flv格式,也就是說目前不需要安裝什麼插件只需要安裝FFMEPG,安裝FFMEPG有兩種方式:①源碼包安裝,這個不知道怎麼回事老是報錯②yum指令安裝,centos這個yum是最好的指令,呵呵
##下面是安裝步驟:㈠安裝編譯環境#yum install -y automake autoconf libtool gcc gcc -c ㈡安裝所需程式庫的RPM套件到centosrpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/ rpmforge-release-0.3.6-1.el5.rf.i386.rpm#安裝Install ffmpeg 等模組yum -y install ffmpeg ffmpeg-devel
##安裝FFMPEG-PHP
cd /usr/local/srcwget http://garr.dl.sourceforge.net/ sourceforge/ffmpeg-php/ffmpeg-php-0.6.0.tbz2
tar jxvf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
/usr/local/php/ bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-confi
make
make install
然後修改php.ini文件
在php.ini檔案加上這句話
然後重新啟動apache
*******備註wget連結那個可能失效,估計是被牆了,可以在網路上自己找
----------- -------------------------------------------------- ----------------------------------------------
#但我打開phpinfo並沒有看到FFMPEG,不知道怎麼回事,官網上面提供的安裝方法是需要重新編譯php來支援ffmpeg,我嫌麻煩,考慮到服務都是在centos上運行,既然centos已經可以,
那我使用php的exec函數呼叫liunx的shell指令不就可以了,也就是說不需要安裝FFMPEG-PHP
關於php的exec函數的可以參考:php中使用exec,system等函數呼叫系統指令
下面是取得縮圖的常用指令:
範例1:
截取一張352x240尺寸大小的,格式為jpg的圖片:ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
#範例2:
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
範例3:這個是我需要的!
ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 test.jpg
範例4:
把影片轉換成flv檔(這個用得最多,現在Flv基本上已經變成了網路影片的標準)
ffmpeg -i source -s 320× 240 -b 700k -aspect 4:3 -y -f flv dest.flv 。
其中:
- source:是原始檔案的名字,可以是mov,mpeg,avi,wmv各類別格式,ffmpeg基本上都支援。
- -s wxh: 指定影片的寬和高
- -b : 設定影片的位元速率
- -aspect: 保持影片的比率。如4:3或16:9
- -y : 若目標檔案存在時,直接覆寫原有的目標檔案。
- -f : 指定轉換的檔案格式,這裡是flv格式。 (其實如果不指定檔案格式,ffmpeg也會依照檔案的後綴名稱來轉換)。
- dest: 轉換的目標檔案名字,不一定需要是flv,可以是mov,mpeg以及其他的常用格式。
- 參數說明:
-L license
#-h 幫助
-fromats 顯示可用的格式,編解碼的,協定的
-f fmt 強迫採用格式fmt
-I filename 輸入檔
-y 覆寫輸出檔
-t duration 設定紀錄時間hh :mm:ss[.xxx]格式的記錄時間也支援
-ss position 搜尋到指定的時間[-]hh:mm:ss[.xxx]的格式也支援
s wxh: 指定影片的寬和高
*********************************** *****************************************
#範例3:是針對flv格式的影片取得指定處的縮圖,記住-f強制轉換的格式是mjpeg因為我要取得.jpg的縮圖,網路上有很多寫成文章都是寫成ffmpeg -i test.flv -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg 這個是錯誤,不可能輸出.
#透過上面的截圖:我們可以看到輸入的flv資訊和輸出的jpg圖片訊息,Duration就是本文需要的視訊長度,但是我不知道如何取得這個變數
下面是PHP呼叫shell命令獲得縮圖的程式碼
<?php exec("/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 /usr/local/apache/htdocs/test.jpg",$out,$status); print_r($status);//0是成功 1是失败
*********************************************** **
如果沒有圖片產生的可能原因:
①對於儲存產生圖片的資料夾需要有寫入權限#chomd 777 /usr/local/apache/htdocs
②在php.ini有disable_functions禁用了php呼叫shell命令函數,
disable_functions = proc_open, popen,exec, system, shell_exec, passthru
解決方案:註解掉disable_functions這一項
#disable_functions = proc_open, popen,exec, system, shell_exec, passthru
或disable_functions = (把禁言的函數除去)
儲存開啟開啟就可以了
③php.ini中的安全模式必須關閉才可以呼叫exec函數
safe_mode = off
④圖片時間截取也很重要,很有可能是無效圖片或黑屏
建議增加關鍵幀,通常第一幀為關鍵幀,可使用:vframes:幀參數,捨棄微秒參數,只保留時間參數
/usr/bin /ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -vframes 1 -s 320x240 /usr/local/apache/htdocs/test.jpg
##** ************************************************** ************************上面都是解決獲得縮圖的方法,我看到有人在安卓開發中利用ffmpeg取得手機裡面影片的縮圖,考慮到安卓的底層是liunx,應該是通用的!以下是如何取得影片的長度,雖然Duration就是需要的影片長度,但不知道如何去取,如果有人會,可以教我,跪求! 下面是使用純PHP獲得影片的時間長度:你在網路上搜尋:php取得flv影片長度可以發現有很多結果,但我翻了十幾頁發現tmd的都是複製轉載的,而且全部都不能使用,不知道為什麼?這個程式碼和詭異,大家可以把網路上的程式碼運行一下,你會發現這個跟不是php,因為編輯器就沒有顯示語法高亮,沒有辦法我照著網上手寫了一邊代碼,發現還是報錯詭異了 。 。 。報錯還很奇怪 ,有興趣的可以試試,沒有辦法我決定搜英文資料,最後在外國網站看到了代碼,拿來一試可以!哈哈哈 還是老外的東西好使啊錯誤的程式碼:<?php function BigEndian2Int($byte_word, $signed = false) { $int_value = 0; $byte_wordlen = strlen($byte_word); for ($i = 0; $i < $byte_wordlen; $i++) { $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i)); } if ($signed) { $sign_mask_bit = 0x80 << (8 * ($byte_wordlen - 1)); if ($int_value & $sign_mask_bit) { $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); } } return $int_value; } //获得视频的数字时间 function getTime($name){ if(!file_exists($name)){ return; } $flv_data_length=filesize($name); $fp = @fopen($name, 'rb'); $flv_header = fread($fp, 5); fseek($fp, 5, SEEK_SET); $frame_size_data_length =BigEndian2Int(fread($fp, 4)); $flv_header_frame_length = 9; if ($frame_size_data_length > $flv_header_frame_length) { fseek($fp, $frame_size_data_length - $flv_header_frame_length, SEEK_CUR); } $duration = 0; while ((ftell($fp) + 1) < $flv_data_length) { $this_tag_header = fread($fp, 16); $data_length = BigEndian2Int(substr($this_tag_header, 5, 3)); $timestamp = BigEndian2Int(substr($this_tag_header, 8, 3)); $next_offset = ftell($fp) - 1 + $data_length; if ($timestamp > $duration) { $duration = $timestamp; } fseek($fp, $next_offset, SEEK_SET); } fclose($fp); return $duration; } //转化为0:03:56的时间格式 function fn($time){ $num = $time; $sec = intval($num/1000); $h = intval($sec/3600); $m = intval(($sec%3600)/60); $s = intval(($sec%60)); $tm = $h.':'.$m.':'.$s; return $tm; } $t = getTime("22.flv");//显示数字时间如236722 echo fn($t);//显示时间格式0:03:56 ?>
以上是如何利用Ffmpeg獲得flv影片縮圖與影片長度時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

利用Golang和FFmpeg實現視訊拼接的實踐引言:在日常生活中,我們經常會遇到需要將多個視訊檔案合併為一個的情況,例如將多段錄製的視訊拼接為一個完整的視訊檔案。為了實現這一目的,本文將介紹如何使用Golang和FFmpeg函式庫來實現視訊拼接的過程,並提供具體的程式碼範例。一、什麼是Golang和FFmpeg? Golang(即Go語言)是一種開源的程式語言,由

Golang與FFmpeg:如何實現音訊混音和分離,需要具體程式碼範例摘要:音訊處理是許多多媒體應用程式中必不可少的一部分。在Golang中,我們可以使用FFmpeg函式庫來實現音訊的混音和分離。本文將介紹如何使用Golang呼叫FFmpeg函式庫來實現音訊混音和分離,並提供了具體的程式碼範例。透過學習本文,讀者將了解如何使用Golang和FFmpeg來實現音訊處理

Golang與FFmpeg:如何實現音訊合成和分割,需要具體程式碼範例摘要:本文將介紹如何使用Golang和FFmpeg函式庫來實現音訊合成和分割。我們將用到一些具體的程式碼範例來幫助讀者更好地理解。引言:隨著音訊處理技術的不斷發展,音訊合成和分割已成為日常生活和工作中常見的功能需求。而Golang作為一種快速,高效且易於編寫和維護的程式語言,加上FFmpeg作

Golang與FFmpeg:如何實現音訊格式轉換和壓縮,需要具體程式碼範例引言:在音訊檔案處理中,有時會遇到需要轉換音訊格式或壓縮音訊檔案大小的需求。 Golang作為一門強大的程式語言,結合FFmpeg這個流行的音訊視訊處理工具,可實現快速、高效的音訊格式轉換和壓縮。本文將介紹如何利用Golang和FFmpeg來實現音訊格式轉換和壓縮,並給出具體的程式碼範例

Golang與FFmpeg:實現即時視訊串流分析與識別的技術,需要具體程式碼範例引言:在當今數位化和智慧化的時代,視訊技術的應用越來越廣泛。其中,即時視訊串流的分析與辨識在安防監控、智慧交通、人臉辨識等領域發揮重要作用。本文將介紹如何使用Golang和FFmpeg結合的技術實現即時視訊串流的分析與識別,並提供具體的程式碼範例。一、Golang介紹Golang是一種

如何在伺服器上安裝PHPFFmpeg擴充功能?在伺服器上安裝PHPFFmpeg擴充功能可以幫助我們在PHP專案中處理音視訊文件,實現音視訊文件的編解碼、剪輯、處理等功能。本文將介紹如何在伺服器上安裝PHPFFmpeg擴展,以及具體的程式碼範例。首先,我們需要確保伺服器上已經安裝了PHP以及FFmpeg。如果沒有安裝FFmpeg,可以依照下列步驟安裝FFmpe

利用Golang和FFmpeg實現影片去閃爍的實踐概述:影片的閃爍問題是在影片處理過程中經常遇到的一個挑戰。當錄製影片的幀率與照明頻率不符時,可能會導致影片中出現閃爍的情況。本文將介紹如何利用Golang和FFmpeg函式庫來實作影片去閃爍的方法,並提供具體的程式碼範例。步驟:安裝FFmpeg函式庫:首先,我們需要在Golang開發環境中安裝FFmpeg函式庫。可以透過

PHPFFmpeg擴充安裝指南:簡單易懂的教學在網站開發的過程中,有時候我們需要處理各種多媒體文件,例如音訊、視訊等。而FFmpeg是一個功能強大的多媒體處理工具,它可以處理音訊、視訊等多種格式,並且支援各種轉碼、剪切等操作。 PHPFFmpeg擴充則是在PHP中呼叫FFmpeg功能的擴充函式庫,使用它可以很方便地處理多媒體檔案。以下我們將詳細介紹PHPF
