php截取視頻指定幀為圖片
截取視頻指定幀為圖片,php ffmpeg擴展已經(jīng)完美實現(xiàn):
$movie = new ffmpeg_movie($video_filePath); $ff_frame = $movie->getFrame(1); $gd_image = $ff_frame->toGDImage(); $img="./test.jpg"; imagejpeg($gd_image, $img); imagedestroy($gd_image);
然而問題來了,智能手機拍攝的視頻,由于拍攝方向不同,視頻會被旋轉(zhuǎn),并帶上meta信息rotate,當(dāng)你相對視頻截取frame圖片的時候,如果有rotate信息的視頻,frame也是旋轉(zhuǎn)的,因此你需要將截取的圖片相應(yīng)的旋轉(zhuǎn)。
然后php ffmpeg擴展并無法獲知rotation信息(php ffmpeg擴展文檔),但可以通過ffmpeg命令行獲取:
/usr/local/ffmpeg/bin/ffprobe test.mp4 -show_streams | grep rotate
用php簡單封裝下如下:
function get_video_orientation($video_path) { $cmd = "/usr/local/ffmpeg/bin/ffprobe " . $video_path . " -show_streams 2>/dev/null"; $result = shell_exec($cmd); $orientation = 0; if(strpos($result, 'TAG:rotate') !== FALSE) { $result = explode("\n", $result); foreach($result as $line) { if(strpos($line, 'TAG:rotate') !== FALSE) { $stream_info = explode("=", $line); $orientation = $stream_info[1]; } } } return $orientation; }
使用imagerotate()函數(shù)就可以旋轉(zhuǎn)截圖:
$movie = new ffmpeg_movie($video_filePath); $frame = $movie->getFrame(1); $gd = $frame->toGDImage(); if ($orientation = $this->get_video_orientation($video_filePath)) { $gd = imagerotate($gd, 360-$orientation, 0); } $img="./test.jpg"; imagejpeg($gd, $img); imagedestroy($gd_image);
最后還有一個麻煩事,不是所有的播放器和瀏覽器都可對video識別orientation并自動rotate,如果你想對視頻進行旋轉(zhuǎn),可通過ffmpeg命令解決:
/usr/local/ffmpeg/bin/ffmpeg -i input.mp4 -vf 'transpose=3' -metadata:s:v:0 rotate=0
以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)php程序設(shè)計有所幫助。
- PHP編程獲取音頻文件時長的方法【基于getid3類】
- 解析用PHP讀寫音頻文件信息的詳解(支持WMA和MP3)
- PHP獲取音頻文件的相關(guān)信息
- php利用ffmpeg提取視頻中音頻與視頻畫面的方法詳解
- Thinkphp5框架實現(xiàn)圖片、音頻和視頻文件的上傳功能詳解
- PHP 獲取視頻時長的實例代碼
- PHP基于ffmpeg實現(xiàn)轉(zhuǎn)換視頻,截圖及生成縮略圖的方法
- php使用FFmpeg接口獲取視頻的播放時長、碼率、縮略圖以及創(chuàng)建時間
- PHP從FLV文件獲取視頻預(yù)覽圖的方法
- PHP getID3類的使用方法學(xué)習(xí)筆記【附getID3源碼下載】
相關(guān)文章
php將數(shù)據(jù)庫導(dǎo)出成excel的方法
有時寫程序時后臺要求把大量數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中,比如考試成績、電話簿等一般都是存放在excel中的數(shù)據(jù),這時我們可把excel導(dǎo)出成csv文件,然后通過以下程序即可批量導(dǎo)入數(shù)據(jù)到數(shù)據(jù)庫中2010-05-05