這篇文章主要講解了“怎么利用Ffmpeg獲得flv視頻縮略圖和視頻長(zhǎng)度時(shí)間”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么利用Ffmpeg獲得flv視頻縮略圖和視頻長(zhǎng)度時(shí)間”吧!
大通網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),大通網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為大通1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的大通做網(wǎng)站的公司定做!
FFmpeg是用于錄制、轉(zhuǎn)換和流化音頻和視頻的完整解決方案,一套領(lǐng)先的音/視頻編解碼類(lèi)庫(kù)。官方正式版ffmpeg不支持rmvb和rm格式。今天我們就來(lái)介紹一下。
谷歌了半天發(fā)現(xiàn)可以使用Ffmpeg獲得視頻的一些信息,先介紹一下FFMEPG
這里簡(jiǎn)單說(shuō)一下:FFmpeg是用于錄制、轉(zhuǎn)換和流化音頻和視頻的完整解決方案,一套領(lǐng)先的音/視頻編解碼類(lèi)庫(kù)。官方正式版ffmpeg不支持rmvb和rm格式. 不過(guò)有很多解決方法
FFmpeg的官方網(wǎng)址是 http://ffmpeg.mplayerhq.hu/ 。
中文Wiki是 http://www.ffmpeg.com.cn/ ,資料很多。
㈠安裝FFMEPG
操作系統(tǒng):centos6
找了那么多安裝FFMEPG的文章,基本上都是沒(méi)有注釋?zhuān)枰惭b那么多軟件包,也不說(shuō)明一下是干什么用的,糾結(jié)。。而且安裝上面步驟總是出問(wèn)題,最后只得尋找官網(wǎng),認(rèn)真的看一下,確實(shí)官方的資料很好用,以后一定要優(yōu)先看官網(wǎng)資料。
由于FFMEPG本身就支持flv格式,也就是說(shuō)目前不需要安裝什么插件只需要安裝FFMEPG,安裝FFMEPG有兩種方式:①源碼包安裝,這個(gè)不知道怎么回事老是報(bào)錯(cuò)②yum命令安裝,centos這個(gè)yum是最好的命令,呵呵
下面是安裝步驟:
㈠安裝編譯環(huán)境
#yum install -y automake autoconf libtool gcc gcc-c++
㈡安裝所需程序庫(kù)的RPM包到 centos
rpm -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
***********************************centos下面的安裝已經(jīng)完成!
安裝php支持插件:FFMPEG-PHP
安裝 FFMPEG-PHP
cd /usr/local/src
wget 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文件
vi php.ini
在php.ini文件加上這句
extension=ffmpeg.so
然后重新啟動(dòng)apache
/etc/init.d/httpd restart
*******備注wget鏈接那個(gè)可能失效,估計(jì)是被墻了,可以在網(wǎng)上自己找
----------------------------------------------------------------------------------------------------------
但是我打開(kāi)phpinfo并沒(méi)有看到FFMPEG,不知道怎么回事,官網(wǎng)上面提供的安裝方法是需要重新編譯php來(lái)支持ffmpeg,我嫌麻煩,考慮到服務(wù)都是在centos上運(yùn)行,既然centos已經(jīng)可以,
那我使用php的exec函數(shù)調(diào)用liunx的shell命令不就可以了,也就是說(shuō)不需要安裝FFMPEG-PHP
關(guān)于php的exec函數(shù)的可以參考:php中使用exec,system等函數(shù)調(diào)用系統(tǒng)命令
下面是獲得縮略圖的常用命令:
示例1:
截取一張352x240尺寸大小的,格式為jpg的圖片:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
示例2:
把視頻的前30幀轉(zhuǎn)換成一個(gè)Animated Gif :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
示例3:這個(gè)是我需要的!
在視頻的第8.01秒處截取 320*240 的縮略圖
ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 test.jpg
示例4:
把視頻轉(zhuǎn)換成flv文件(這個(gè)用得最多,現(xiàn)在Flv基本上已經(jīng)成了網(wǎng)絡(luò)視頻的標(biāo)準(zhǔn)了)
ffmpeg -i source -s 320×240 -b 700k -aspect 4:3 -y -f flv dest.flv 。
其中:
source:是原始文件的名字,可以是mov,mpeg,avi,wmv各類(lèi)格式,ffmpeg基本都支持。
-s wxh: 指定視頻的寬和高
-b : 設(shè)定視頻的比特率
-aspect: 保持視頻的比率。如4:3或者16:9
-y : 如果目標(biāo)文件存在時(shí),直接覆蓋原有的目標(biāo)文件。
-f : 指定轉(zhuǎn)換的文件格式,這里是flv格式。(其實(shí)如果不指定文件格式,ffmpeg也會(huì)按文件的后綴名來(lái)進(jìn)行轉(zhuǎn)換)。
dest: 轉(zhuǎn)換的目標(biāo)文件名字,并不一定需要是flv,可以是mov,mpeg以及其他的常用格式。
參數(shù)說(shuō)明:
-L license
-h 幫助
-fromats 顯示可用的格式,編解碼的,協(xié)議的
-f fmt 強(qiáng)迫采用格式fmt
-I filename 輸入文件
-y 覆蓋輸出文件
-t duration 設(shè)置紀(jì)錄時(shí)間 hh:mm:ss[.xxx]格式的記錄時(shí)間也支持
-ss position 搜索到指定的時(shí)間 [-]hh:mm:ss[.xxx]的格式也支持
s wxh: 指定視頻的寬和高
****************************************************************************
示例3:是針對(duì)flv格式的視頻獲得指定處的縮略圖,記住 -f強(qiáng)制轉(zhuǎn)換的格式是mjpeg因?yàn)槲乙@得.jpg的縮略圖,網(wǎng)上有很多寫(xiě)成文章都是寫(xiě)成ffmpeg -i test.flv -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg 這個(gè)是錯(cuò)誤,不可能輸出.
通過(guò)上面的截圖:我們可以看到輸入的flv信息和輸出的jpg圖片信息,Duration就是本文需要的視頻長(zhǎng)度,但是我不知道如何取得這個(gè)變量
下面是PHP調(diào)用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是失敗
*************************************************
如果沒(méi)有什么圖片生成的可能原因:
①對(duì)于存儲(chǔ)生成圖片的文件夾需要有寫(xiě)入權(quán)限 #chomd 777 /usr/local/apache/htdocs
②在php.ini中有disable_functions禁用了php調(diào)用shell命令函數(shù),
disable_functions = proc_open, popen,exec, system, shell_exec, passthru
解決辦法:注釋掉disable_functions這一項(xiàng)
#disable_functions = proc_open, popen,exec, system, shell_exec, passthru
或者disable_functions = (把禁言的函數(shù)除去)
保存關(guān)閉開(kāi)啟就可以了
③php.ini中的安全模式必須關(guān)閉 才可以調(diào)用exec函數(shù)
safe_mode = off
④圖片時(shí)間截取也很重要,很有可能是無(wú)效圖片或者是黑屏
建議 增加關(guān)鍵幀,通常第一幀為關(guān)鍵幀,可以使用:vframes:幀參數(shù),舍棄微秒?yún)?shù),只保留時(shí)間參數(shù)
/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
****************************************************************************
上面都是解決獲得縮略圖的方法,我看到有人在安卓開(kāi)發(fā)中利用ffmpeg獲得手機(jī)里面視頻的縮略圖,考慮到安卓的底層是liunx,應(yīng)該是通用的!下面是如何獲得視頻的長(zhǎng)度,雖然Duration就是需要的視頻長(zhǎng)度,但是不知道如何去取,如果有人會(huì),可以教一下我,跪求!
下面是使用純PHP獲得視頻的時(shí)間長(zhǎng)度:
你在網(wǎng)上搜一下:php獲得flv視頻長(zhǎng)度
可以發(fā)現(xiàn)有很多結(jié)果,但是我翻了十幾頁(yè)發(fā)現(xiàn)tmd的都是復(fù)制轉(zhuǎn)載的,而且全部都不能使用,不知道為什么?這個(gè)代碼和詭異,大家可以把網(wǎng)上的代碼運(yùn)行一下,你會(huì)發(fā)現(xiàn)這個(gè)跟不是php,因?yàn)榫庉嬈骶蜎](méi)有顯示語(yǔ)法高亮,沒(méi)有辦法我照著網(wǎng)上手寫(xiě)了一邊代碼,發(fā)現(xiàn)還是報(bào)錯(cuò)詭異了 。。。報(bào)錯(cuò)還很奇怪 ,感興趣的可以試試,沒(méi)有辦法我決定搜英文資料,最后在外國(guó)網(wǎng)站看到了代碼,拿來(lái)一試可以!哈哈哈 還是老外的東西好使啊
錯(cuò)誤的代碼:
關(guān)鍵詞沒(méi)有高亮顯示
下面是正確的代碼:
<?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; } //獲得視頻的數(shù)字時(shí)間 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; } //轉(zhuǎn)化為0:03:56的時(shí)間格式 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");//顯示數(shù)字時(shí)間如236722 echo fn($t);//顯示時(shí)間格式0:03:56 ?>
預(yù)覽效果:
我的視頻是55秒正好?。铮?/p>
感謝各位的閱讀,以上就是“怎么利用Ffmpeg獲得flv視頻縮略圖和視頻長(zhǎng)度時(shí)間”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么利用Ffmpeg獲得flv視頻縮略圖和視頻長(zhǎng)度時(shí)間這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
分享文章:怎么利用Ffmpeg獲得flv視頻縮略圖和視頻長(zhǎng)度時(shí)間
當(dāng)前URL:http://chinadenli.net/article30/gphspo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站營(yíng)銷(xiāo)、用戶(hù)體驗(yàn)、企業(yè)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)