Laravel 下使用 FFMpeg 处理多媒体文件

说明FFmpeg 做音频格式转换, 这里做个笔记.
  • 这个项目最初是由Fabrice Bellard发起的,而现在是由Michael Niedermayer在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。Wiki
  • 还有 DirectShow/VFW 的 ffdshow(external project) 和 QuickTime 的 Perian (external project) 也采用了FFmpeg。 PHP-FFMpeg 是 FFMpeg 和 FFProbe 命令的 PHP 面对对象 Wrapper.$ffmpeg = FFMpegFFMpeg::create(array( 'ffmpeg.binaries' => '/opt/local/ffmpeg/bin/ffmpeg', 'ffprobe.binaries' => '/opt/local/ffmpeg/bin/ffprobe', 'timeout' => 3600, // The timeout for the underlying process 'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use ), $logger);$video = $ffmpeg->open('video.mpeg'); $format = new FormatVideoX264(); $format->on('progress', function ($video, $format, $percentage) { echo "$percentage % transcoded"; }); $format -> setKiloBitrate(1000) // 视频码率 -> setAudioChannels(2) // 音频声道 -> setAudioKiloBitrate(256); // 音频码率 // 保存为 $video->save($format, public_path().'/uploads/video/video.avi');// 在视频 42 秒的地方截图 $frame = $video->frame(FFMpegCoordinateTimeCode::fromSeconds(42)); $frame->save('image.jpg');$video->filters()->rotate($angle)->synchronize(); 参数的选项从下面选取:
  • FFMpegFiltersVideoRotateFilter::ROTATE_180 : 180° $video ->filters() ->resize($dimension, $mode, $useStandards) ->framerate($framerate, $gop) ->synchronize();$video->filters()->resize($dimension, $mode, $useStandards);文档$video->filters()->framerate($framerate, $gop);文档$video->filters()->clip(FFMpegCoordinateTimeCode::fromSeconds(30), FFMpegCoordinateTimeCode::fromSeconds(15));文档$audio = $ffmpeg->open('track.mp3'); $format = new FFMpegFormatAudioFlac(); $format->on('progress', function ($audio, $format, $percentage) { echo "$percentage % transcoded"; }); $format -> setAudioChannels(2) -> setAudioKiloBitrate(256); $audio->save($format, public_path().'/uploads/video/track.flac');$audio->filters()->resample(16000); 转换为 16khz 采样率, 单声道的 wav 文件$audio_path = public_path().'/uploads/audio/'; $random_string = str_random(10); $amr_filename = $random_string.'.amr'; $wav_filename = $random_string.'.wav'; Input::file('audio_file')->move($audio_path, $amr_filename); $audio = $ffmpeg->open($audio_path.$amr_filename); $format = new FFMpegFormatAudioWav(); $format->setAudioChannels(1); $audio->filters()->resample('16000'); $audio->save($format, $audio_path.$wav_filename);

    另外, 还有一个很棒的项目 sonus, 专门为 Laravel 框架而写的, 唯一遗憾的是未能支持 filters.

    转载请注明:代码家园 » Laravel 下使用 FFMpeg 处理多媒体文件

  • 也许你会喜欢和关注与本文内容高度相关的文章:

    PHP中使用php5-ffmpeg撷取视频图片实例

    评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)