最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP調用FFMpeg實現音視頻操作的示例詳解

 更新時間:2023年10月20日 08:14:22   作者:極客飛兔  
這篇文章主要為大家詳細介紹了PHP如何調用FFMpeg實現簡單的音視頻操作,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解下

安裝PHP-FFMpeg

composer require php-ffmpeg/php-ffmpeg

視頻中提取一張圖片

  • 這里的 video.mp4 準備的是一段宮崎駿的視頻片段
  • FFMpeg\FFMpeg::create 中需要指定系統(tǒng)軟件中 ffmpegffprobe 的安裝位置
  • 通過 FFMpeg\Coordinate\TimeCode::fromSeconds 可以指定提取第幾秒的視頻作為圖片保存
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
    ->save('image.jpg');

視頻中提取多張圖片

require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->filters()
    ->extractMultipleFrames(FFMpeg\Filters\Video\ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, '/path/to/destination/folder/')
    ->synchronize();

$video
    ->save(new FFMpeg\Format\Video\X264(), '/path/to/new/file');

調整視頻大小

  • FFMpeg\Coordinate\Dimension 可以設置調整后的分辨率
  • ResizeFilter::RESIZEMODE_FIT 是縮放模式中的一種,按照給定值進行調整
  • ResizeFilter::RESIZEMODE_INSET 是縮放模式中的一種,按照給定的尺寸,等比縮放,如果設置的寬高比跟原視頻不一樣,那會自動根據寬或高進行等比縮放
  • ResizeFilter::RESIZEMODE_SCALE_WIDTH 是縮放模式中的一種,高按照給定值,寬進行比例縮放
  • ResizeFilter::RESIZEMODE_SCALE_HEIGHT 是縮放模式中的一種,寬按照給定值,高進行比例縮放
  • true / false 是否強制使用最近的縱橫比標準
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->filters()
    ->resize(new FFMpeg\Coordinate\Dimension(160,90), FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_FIT, true);

$video
    ->save(new FFMpeg\Format\Video\X264(), 'video_new.mp4');

視頻添加水印

  • 通過 watermark 可以設置水印的相關信息,第一個參數是設置水印的地址,第二個參數里面可以設置水印位置參數
  • position: 可以選擇 relative 相對定位,或者 absolute 絕對定位,如果選擇 absolute,則只需要填寫 xy 坐標即可
  • top / bottom / left / right: 四個方位上下左右距離邊緣的位置
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->filters()
    ->watermark('watermark.png', array(
        'position' => 'relative',
        'bottom' => 10,
        'right' => 10,
    ));

$video->save(new FFMpeg\Format\Video\X264(), 'video_watermark_new.mp4');

生成音頻波形

  • 可以看到,想要生成音頻波形,必須使用的是音頻文件,如果是視頻文件,需要先將其中的音頻提取出來
  • waveform: 中可以設置波形圖的長寬還有波形顏色
<?php
// 直接處理音頻
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$audio = $ffmpeg->open('audio.mp3');

$waveform = $audio->waveform(640, 120, array('#00FF00'));

$waveform->save('waveform.png');
<?php
// 從視頻中提取音頻后再生成波形圖
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

// Open your video file / 打開視頻文件
$video = $ffmpeg->open( 'video.mp4' );

// Set an audio format / 設置音頻格式
$audio_format = new FFMpeg\Format\Audio\Mp3();

// Extract the audio into a new file as mp3 / 保存成 mp3 文件
$video->save($audio_format, 'audio.mp3');

// Set the audio file / 打開 mp3 文件
$audio = $ffmpeg->open( 'audio.mp3' );

// Create the waveform / 生成波形圖
$waveform = $audio->waveform();
$waveform->save( 'waveform.png' );

音頻轉換

  • Flac; 為無損壓縮格式
  • setAudioChannels: 聲道設置,1單聲道,2雙聲道,3立體聲
  • setAudioKiloBitrate: 比特率
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$audio = $ffmpeg->open('audio.mp3');

$format = new FFMpeg\Format\Audio\Flac();

$format->on('progress', function ($audio, $format, $percentage) {
    echo "$percentage % 進度";
});

$format
    ->setAudioChannels(2)
    ->setAudioKiloBitrate(256);

$audio->save($format, 'audio.flac');

給音頻添加元數據

支持給音頻添加標題、藝術家、專輯、藝術家、作曲家、曲目、年份、描述、藝術品等

<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$audio = $ffmpeg->open('audio.mp3');

$audio->filters()->addMetadata([
    "title" => "this is a song title", // 標題
    "artist" => "tinygeeker", // 藝術家
    "album" => "1024", // 專輯
    "composer" => "tinygeeker", // 作曲家
    "track" => 1, // 音軌
    "year" => 2023, // 年份
    "description" => "this is a song description", // 描述
    "artwork" => "artwork.jpg" // 藝術品
]);

$audio->save(new \FFMpeg\Format\Audio\Mp3(), 'audio_new.mp3');

拼接多個音視頻

  • 如果想把多個音視頻拼成一個音視頻的話,可以使用 concat 命令
  • concat: 參數中設置想拼接的各個短視頻
  • saveFromSameCodecs: 設置拼接后的視頻名稱,第二個參數設置為 true 則允許復制參數,可以加速文件的生成
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video_1.mp4');

$video
    ->concat(array('video_1.mp4', 'video_2.mp4', 'video_3.mp4'))
    ->saveFromSameCodecs('video.mp4', TRUE);

截取音視頻

TimeCode::fromSeconds: 有兩個參數,第一個是從第幾秒開始截取,第二個是截取多少秒,如果不填,則截取到最后

<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->filters()
    ->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30));

$video
    ->save(new FFMpeg\Format\Video\X264(), 'video_clip.mp4');

提取 gif 動圖

  • 使用 gif 命令可以提取視頻中的動圖
  • fromSeconds 可以設置從第幾秒開始提取,Dimension 可以設置大小和持續(xù)的時間
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->gif(FFMpeg\Coordinate\TimeCode::fromSeconds(30), new FFMpeg\Coordinate\Dimension(640, 480), 3)
    ->save('video.gif');

裁剪視頻

  • 通過 crop 可以裁剪視頻
  • Dimension: 設置裁剪后的視頻尺寸
  • Point: 指定要裁剪的點,x、y 坐標和 是否動態(tài)裁剪
  • 這里 x 的值是 t*100 是從畫面左邊移動到右邊這樣裁剪,值越大,移動速度越快
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->filters()
    ->crop(new FFMpeg\Coordinate\Point("t*100", 0, true), new FFMpeg\Coordinate\Dimension(200, 600));

$video->save(new FFMpeg\Format\Video\X264(), 'video_crop.mp4');

轉換視頻格式

  • setKiloBitrate: 設置視頻比特率
  • setAudioChannels: 聲道設置,1單聲道,2雙聲道,3立體聲
  • setAudioKiloBitrate: 設置音頻比特率
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$format = new FFMpeg\Format\Video\X264();

$format->on('progress', function ($video, $format, $percentage) {
    echo "$percentage % transcoded";
});

$format
    ->setKiloBitrate(1000)
    ->setAudioChannels(2)
    ->setAudioKiloBitrate(256);

$video->save($format, 'video.avi');

調整視頻幀率

  • framerate: 可以設置視頻的幀速率
  • 大家應該都知道,視頻其實是由一張張圖片組成的,而一秒中播放30張以上其實肉眼就會把圖片看成視頻了,這里的 30 就是所謂的幀速了,一般設置 60 即可,為了測試這里設置成 1000
<?php
require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

$video = $ffmpeg->open('video.mp4');

$video
    ->filters()
    ->framerate(new \FFMpeg\Coordinate\FrameRate(1000), 120);

$video
    ->save(new FFMpeg\Format\Video\X264(), 'video_rate.mp4');

獲取音視頻信息

  • 可以通過 format 獲取音視頻的所有信息
  • 可以通過 get 獲取指定信息的值
<?php
require 'vendor/autoload.php';

$ffprobe = FFMpeg\FFProbe::create([
    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',
    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',
]);

// 獲取音視頻信息
$videoInfo = $ffprobe->format('video.mp4');

// 也可以通過 get 獲取指定信息的內容,第二個參數為默認值,如果獲取不到該信息的話返回默認值
$duration = $ffprobe
    ->format('audio.mp3')
    ->get('duration', 100);

var_dump($videoInfo);
var_dump($duration);

以上就是PHP調用FFMpeg實現音視頻操作的示例詳解的詳細內容,更多關于PHP FFMpeg音視頻操作的資料請關注腳本之家其它相關文章!

相關文章

最新評論

商南县| 阿拉善盟| 日喀则市| 天长市| 夏津县| 枣庄市| 库尔勒市| 莫力| 新宁县| 沙雅县| 甘谷县| 峡江县| 特克斯县| 万全县| 韶关市| 墨玉县| 阿拉善盟| 天等县| 界首市| 二手房| 苗栗县| 清流县| 闽侯县| 铜山县| 鄂尔多斯市| 海口市| 桦川县| 图片| 灵台县| 习水县| 铅山县| 德化县| 商洛市| 榆树市| 桓仁| 睢宁县| 分宜县| 古丈县| 西乌| 东城区| 新闻|