激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 利用Ffmpeg獲得flv視頻縮略圖和視頻時間的代碼

利用Ffmpeg獲得flv視頻縮略圖和視頻時間的代碼

2019-12-12 14:35PHP教程網 PHP教程

谷歌了半天發現可以使用Ffmpeg獲得視頻的一些信息,先介紹一下FFMEPG

問題描述;獲得flv視頻的縮略圖和視頻時間長度

  • 谷歌了半天發現可以使用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包到 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下面的安裝已經完成!

安裝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

然后重新啟動apache 
/etc/init.d/httpd restart

*******備注wget鏈接那個可能失效,估計是被墻了,可以在網上自己找

----------------------------------------------------------------------------------------------------------

但是我打開phpinfo并沒有看到FFMPEG,不知道怎么回事,官網上面提供的安裝方法是需要重新編譯php來支持ffmpeg,我嫌麻煩,考慮到服務都是在centos上運行,既然centos已經可以,

那我使用php的exec函數調用liunx的shell命令不就可以了,也就是說不需要安裝FFMPEG-PHP

下面是獲得縮略圖的常用命令:

示例1: 
截取一張352x240尺寸大小的,格式為jpg的圖片:  
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg

示例2: 
把視頻的前30幀轉換成一個Animated Gif :  
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif

示例3:這個是我需要的! 
在視頻的第8.01秒處截取 320*240 的縮略圖

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 這個是錯誤,不可能輸出.

利用Ffmpeg獲得flv視頻縮略圖和視頻時間的代碼

通過上面的截圖:我們可以看到輸入的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,因為編輯器就沒有顯示語法高亮,沒有辦法我照著網上手寫了一邊代碼,發現還是報錯詭異了 。。。報錯還很奇怪  ,感興趣的可以試試,沒有辦法我決定搜英文資料,最后在外國網站看到了代碼,拿來一試可以!哈哈哈  還是老外的東西好使啊

錯誤的代碼:利用Ffmpeg獲得flv視頻縮略圖和視頻時間的代碼

關鍵詞沒有高亮顯示

 

下面是正確的代碼:

復制代碼代碼如下:

<?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視頻縮略圖和視頻時間的代碼

 

我的視頻是55秒正好?。铮?/p>

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黄色毛片一级视频 | 麻豆小视频在线观看 | 日韩在线激情 | 一本色道久久综合狠狠躁篇适合什么人看 | 成人免费福利视频 | 中文字幕在线播放第一页 | 亚洲成人免费影视 | 亚洲福利在线免费观看 | 亚洲日本韩国精品 | 国产精品成人一区二区三区电影毛片 | 毛片在线免费视频 | 污视频在线免费播放 | 欧美黄色一区 | 亚洲网站在线观看视频 | 在线观看av国产一区二区 | 国产精品99精品 | 亚洲成人久久精品 | 久久久久久久亚洲精品 | 久久精品高清 | 中文字幕在线观看日韩 | 日本韩国欧美一级片 | 国产精品啪 | 国产毛片网 | 国产亚洲精品久久久久久久久久 | 女人叉开腿让男人桶 | 四季久久免费一区二区三区四区 | 国产精品久久久久久238 | 亚洲一区二区三区高清 | 91精品国产一区二区三区四区在线 | 国产亚洲精品久久久久5区 综合激情网 | 成人在线视频免费播放 | 欧美色淫 | 一级电影免费在线观看 | 暖暖免费观看高清完整版电影 | 欧美一区二区三区中文字幕 | 欧美精品一区二区三区久久久 | 五月激情久久 | 九九热视频这里只有精品 | 欧美aaaaa一级毛片在线 | 成人性生活视频在线播放 | japanese末成年free |