2

是否可以使用 PHP 在上传的视频上录制声音?

4

7 回答 7

4

不,你不能,至少不能只使用 PHP,因为 PHP 本身不提供录制声音和编辑视频所需的库。

要实际录制视频和声音,您需要像ffmpegPHP 有一个方便的扩展)这样的库来进行视频编辑,并在服务器上安装SoX来安装声音。例如,您可以使用exec()PHP 中的函数访问这些程序。但是,实现不会那么简单。

于 2009-11-24T12:56:58.033 回答
3

您可以使用 MLT 库和我的课程。您可以从此链接下载它https://github.com/1fer/mlt

特征

  • 剪切和加入视频
  • 加入带有转场的视频
  • 10 个带有选项的现成过渡
  • 可自定义的擦除过渡
  • 添加背景音频
  • 加水印
  • 添加带有选项的文本覆盖
  • 添加动画文本
  • 在后台运行渲染
  • 获取渲染进度百分比

要在服务器上安装这个融化库,请使用以下命令: sudo apt install melt

查看文档如何使用它,例如,加入剪辑使用以下代码:

require __DIR__ . '/vendor/autoload.php';

$videoProcessing = new Andchir\VideoProcessing([
    'melt_path' => '/usr/bin/melt',
    'session_start' => true
]);

// Join clips

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['joinClips' => [
        $rootPath . '/uploads/tmp/Social.mp4',
        $rootPath . '/uploads/tmp/Dog.mp4',
        $rootPath . '/uploads/tmp/Swans.mp4'
    ]])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out1.mp4');

// Black color and fade transition

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        'colour:black', ['out' => 24],
        $rootPath . '/uploads/tmp/Dog.mp4'
    ]])
    ->addOption(['mix' => 25])
    ->addOption(['mixer' => 'luma'])
    ->addOption(['inputSource' => [
        'colour:black', ['out' => 24]
    ]])
    ->addOption(['mix' => 25])
    ->addOption(['mixer' => 'luma'])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out2.mp4'); 

// Join clips with transition

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Swans.mp4',
        $rootPath . '/uploads/tmp/Dog.mp4'
    ]])
    ->addOption(['mix' => 25])
    ->addOption(['mixer' => 'luma'])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out3.mp4'); 

// Cut clips and join with transition

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Social.mp4', ['in' => 200, 'out' => 275]
    ]])
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Dog.mp4', ['in' => 50, 'out' => 125]
    ]])
    ->addReadyMadeTransition('fade', 25)
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Swans.mp4', ['in' => 50, 'out' => 125]
    ]])
    ->addReadyMadeTransition('shiftRightIn', 25, [
        'width' => 1280,
        'height' => 720
    ])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out4.mp4');  

// Add background audio with delay

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Swans.mp4', ['in' => 50, 'out' => 125]
    ]])
    ->disableAudio()
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Dog.mp4', ['in' => 50, 'out' => 200]
    ]])
    ->addReadyMadeTransition('shiftLeftIn', 25)
    ->addBackgroundAudio($rootPath . '/uploads/tmp/Reformat.mp3', ['in' => 0, 'out' => 150, 'delay' => 50])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out7.mp4');

// Add watermark

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Swans.mp4', ['in' => 50, 'out' => 125]
    ]])
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Dog.mp4', ['in' => 50, 'out' => 200]
    ]])
    ->addWatermark($rootPath . '/uploads/tmp/SampleLogo.png', false, [
        'distort' => 1
    ])
    ->addReadyMadeTransition('shiftLeftIn', 25)
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out8.mp4'); 

// Add text overlay

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Swans.mp4', ['out' => 120]
    ]])
    ->addTextOverlay('This is my best video', true, [
        'fgcolour' => '#004fed',
        'olcolour' => '#fff200',
        'outline' => 3,
        'pad' => '50x0',
        'size' => 80,
        'weight' => 700,
        'style' => 'italic',
        'halign' => 'center',
        'valign' => 'top',
        'family' => 'Ubuntu'
    ])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out10.mp4');

// Animated text

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Swans.mp4', ['out' => 120]
    ]])
    ->addTextOverlay('This is my best video', true, [
        'pad' => '50x0',
        'size' => 80,
        'halign' => 'center',
        'valign' => 'top',
        'family' => 'Ubuntu',
        'slideFrom' => 'bottom',
        'duration' => 50,
        'inOpacity' => 0,
        'outOpacity' => 100
    ])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out11.mp4');

// Rendering

$videoProcessing
    ->setProfile('hdv_720_25p')
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Swans.mp4', ['out' => 120]
    ]])
    ->disableAudio()
    ->addOption(['inputSource' => [
        $rootPath . '/uploads/tmp/Dog.mp4', ['out' => 120]
    ]])
    ->addReadyMadeTransition('shiftLeftIn', 25)
    ->addBackgroundAudio($rootPath . '/uploads/tmp/Reformat.mp3', ['out' => 215])
    ->setOutputVideoOptions($rootPath . '/uploads/tmp/out.mp4');

// Start rendering in background

$progressLogPath = $videoProcessing->render();  

// Rendering progress

$percent = $videoProcessing->getRenderingPercent();

您还可以制作一些滤镜效果,如 Instagram 等。在此处阅读更多信息: https ://www.mltframework.org/plugins/PluginsFilters/

于 2019-12-10T17:06:20.773 回答
0

我会说不,因为我不知道 PHP 的任何硬件层(客户端)......它可能使用 AJAX,但我不这么认为。

但是 PHP 可能能够用提供的声音文件覆盖视频,如果你找到一个库,这应该可以工作。

于 2009-11-24T12:54:40.097 回答
0

奇怪的想法。
PHP 用于服务器端脚本,但只能在客户端录制语音(需要声卡/编解码器)
PHP 没有。
如果您在客户端询问 JavaScript,它可能会更加相关。但是,如果 Adob​​e Flash 技术,最适合此类任务的使用和功能齐全的东西。如果您没有注意到它——如果您右键单击某个 Flash 横幅,您会看到一个属性页面,在该页面的其他功能上方您可以看到语音记录。

于 2009-11-24T13:00:19.320 回答
0

从技术上讲,您可以编写一个与 C 库绑定以进行音频/视频编辑的 PHP 插件。但是,这可能不是最好的路径。更好的选择是从 PHP 调用 ffmpeg/mencoder/... 进程。

于 2009-12-05T23:36:53.960 回答
0

PHP 用于服务器端脚本,但只能在客户端录制语音(需要声卡/编解码器)

PHP 对此一无所知。

于 2016-04-15T08:15:21.950 回答
0

您可以使用 PHP 使用第三方服务(如 Shotstack 视频编辑 API)来编辑视频。他们有一个PHP 库,可让您执行各种视频编辑和操作。

该库以 Composer 包的形式提供,因此您可以使用以下方式安装它:

composer require shotstack/shotstack-sdk-php

下面的代码是修剪视频剪辑起点和终点的示例:

<?php

require 'vendor/autoload.php';

use Shotstack\Client\Api\EditApi;
use Shotstack\Client\Configuration;
use Shotstack\Client\Model\Edit;
use Shotstack\Client\Model\Output;
use Shotstack\Client\Model\Timeline;
use Shotstack\Client\Model\Track;
use Shotstack\Client\Model\Clip;
use Shotstack\Client\Model\VideoAsset;

$config = Configuration::getDefaultConfiguration()
    ->setHost('https://api.shotstack.io/stage')
    ->setApiKey('x-api-key', 'REGISTER FOR A KEY');

$client = new EditApi(null, $config);

$videoAsset = new VideoAsset();
$videoAsset
    ->setSrc('https://s3-ap-southeast-2.amazonaws.com/shotstack-assets/footage/skater.hd.mp4')
    ->setTrim(3);

$videoClip = new Clip();
$videoClip
    ->setAsset($videoAsset)
    ->setLength(8)
    ->setStart(0);

$track = new Track();
$track->setClips([$videoClip]);

$timeline = new Timeline();
$timeline->setTracks([$track]);

$output = new Output();
$output
    ->setFormat('mp4')
    ->setResolution('hd');

$edit = new Edit();
$edit
    ->setTimeline($timeline)
    ->setOutput($output);

$render = $client->postRender($edit)->getResponse();

sleep(30);

$video = $client->getRender($render->getId())->getResponse();

if ($video->getStatus() === 'done') {
    echo $video->getUrl();
}

该图书馆是开源的,但它本身的平台是一项付费服务​​,提供免费帐户选项。

于 2021-09-20T00:53:49.170 回答