1. 程式人生 > >PHP-FFMpeg 操作視訊/音訊檔案 (轉)

PHP-FFMpeg 操作視訊/音訊檔案 (轉)

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