首頁 後端開發 PHP問題 如何利用Ffmpeg獲得flv影片縮圖與影片長度時間

如何利用Ffmpeg獲得flv影片縮圖與影片長度時間

Jul 14, 2021 pm 03:35 PM
ffmpeg

FFmpeg是用於錄製、轉換和串流音訊和視訊的完整解決方案,一套領先的音/視訊編解碼類別庫。官方正式版ffmpeg不支援rmvb和rm格式。今天我們就來介紹一下。

如何利用Ffmpeg獲得flv影片縮圖與影片長度時間

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套件到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

關於php的exec函數的可以參考:php中使用exec,system等函數呼叫系統指令

下面是取得縮圖的常用指令:

範例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, &#39;rb&#39;);
	$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.&#39;:&#39;.$m.&#39;:&#39;.$s;
		return $tm;
	
	}

		 $t = getTime("22.flv");//显示数字时间如236722 
		echo fn($t);//显示时间格式0:03:56 
		?>
登入後複製
預覽效果:

如何利用Ffmpeg獲得flv影片縮圖與影片長度時間

 我的影片是55秒剛好! ok

推薦學習:

php影片教學

以上是如何利用Ffmpeg獲得flv影片縮圖與影片長度時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

利用Golang和FFmpeg實現視訊拼接的實踐 利用Golang和FFmpeg實現視訊拼接的實踐 Sep 28, 2023 am 08:37 AM

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

Golang與FFmpeg: 如何實現音訊混音與分離 Golang與FFmpeg: 如何實現音訊混音與分離 Sep 27, 2023 pm 02:24 PM

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

Golang與FFmpeg: 如何實現音訊合成與分割 Golang與FFmpeg: 如何實現音訊合成與分割 Sep 27, 2023 pm 10:52 PM

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

Golang與FFmpeg: 如何實現音訊格式轉換與壓縮 Golang與FFmpeg: 如何實現音訊格式轉換與壓縮 Sep 28, 2023 pm 07:13 PM

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

Golang與FFmpeg: 實現即時視訊串流分析與辨識的技術 Golang與FFmpeg: 實現即時視訊串流分析與辨識的技術 Sep 27, 2023 pm 02:31 PM

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

如何在伺服器上安裝 PHP FFmpeg 擴充功能? 如何在伺服器上安裝 PHP FFmpeg 擴充功能? Mar 28, 2024 pm 02:39 PM

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

利用Golang和FFmpeg實現影片去閃爍的實踐 利用Golang和FFmpeg實現影片去閃爍的實踐 Sep 27, 2023 pm 04:46 PM

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

PHP FFmpeg 擴充安裝指南:簡單易懂的教學 PHP FFmpeg 擴充安裝指南:簡單易懂的教學 Mar 28, 2024 pm 02:17 PM

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

See all articles