PHP-FFMpeg 操作視訊/音訊檔案 (轉)
阿新 • • 發佈:2019-01-05
https://blog.jam00.com/article/info/25.html
在使用之前請安裝好 FFMpeg 。如何安裝?請看 FFmpeg 安裝教程。
使用composer快速安裝 > composer require php-ffmpeg/php-ffmpeg。
注意:請在 php.ini 中開啟這兩個函式proc_open,proc_get_status。找到 disable_functions 將裡面的這兩個函式去掉就行了
目錄說明
/usr/loca/bin ffmpeg 的執行目錄
/mnt/hgfs/www/test 本文章的測試目錄
這裡主要用 1080.mp4 這個視訊做測試,下面就是這個 18 秒的視訊(chrome 谷歌瀏覽器不顯示播放器是因為https 的站不能使用未加密的http資源,唉)
使用時請配置 ffmpeg,ffprobe 的執行檔案絕對路徑。我定義了一些測試用的視訊音訊檔案
123456789101112 | $path = [ 'ffmpeg.binaries' => '/usr/local/bin/avconv' , 'ffmpeg.binaries' => '/usr/local/bin/ffmpeg' , 'ffprobe.binaries' => '/usr/local/bin/avprobe' , 'ffprobe.binaries' => '/usr/local/bin/ffprobe' , ]; $ffmpeg = FFMpeg\FFMpeg::create( $path ); $a1 = '/mnt/hgfs/www/test/a1.mp3' ; $v1 = '/mnt/hgfs/www/test/v1.mp4' ; $v2 = '/mnt/hgfs/www/test/v2.mp4' ; $v3 = '/mnt/hgfs/www/test/v3.mp4' ; $v1080 = '/mnt/hgfs/www/test/1080.mp4' ; |
1、拼接視訊/音訊
123 | $newFile = '/mnt/hgfs/www/test/video.mp4' ; $video = $ffmpeg ->open( $v1 ); $video ->concat( array ( $v1 , $v2 , $v3 ))->saveFromSameCodecs( $newFile , TRUE); |
若是已存在合成的新檔案 ($newFile 已存在),將會報錯,請確保同一目錄下不存在相同的檔案
2、提取影象
提取一張
123 | $video = $ffmpeg ->open( $v1080 ); $frame = $video ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(2)); //提取第幾秒的影象 $frame ->save( 'image.jpg' ); |
抽取多張
123456 | $video = $ffmpeg ->open( $v1080 ); $video ->filters() ->extractMultipleFrames(FFMpeg\Filters\Video\ExtractMultipleFramesFilter::FRAMERATE_EVERY_SEC, '/mnt/hgfs/www/test/image/' ) ->synchronize(); $video ->save( new FFMpeg\Format\Video\X264( 'libfdk_aac' ), '/mnt/hgfs/www/test/v2new.mp4' ); |
注意:此方法會抽取對應的圖片幀,而且每次都提取 400 張,不知道是不是我引數設定的問題(試了 FRAMERATE_EVERY_SEC,FRAMERATE_EVERY_2SEC,FRAMERATE_EVERY_10SEC)
3、生成音訊波形
1 |