VideoThumbnail.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Jobs\VideoPipeline;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Queue\SerializesModels;
  5. use Illuminate\Queue\InteractsWithQueue;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Http\File;
  9. use Cache;
  10. use FFMpeg;
  11. use Storage;
  12. use App\Media;
  13. use App\Jobs\MediaPipeline\MediaStoragePipeline;
  14. class VideoThumbnail implements ShouldQueue
  15. {
  16. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  17. protected $media;
  18. /**
  19. * Create a new job instance.
  20. *
  21. * @return void
  22. */
  23. public function __construct(Media $media)
  24. {
  25. $this->media = $media;
  26. }
  27. /**
  28. * Execute the job.
  29. *
  30. * @return void
  31. */
  32. public function handle()
  33. {
  34. $media = $this->media;
  35. if($media->mime != 'video/mp4') {
  36. return;
  37. }
  38. $base = $media->media_path;
  39. $path = explode('/', $base);
  40. $name = last($path);
  41. try {
  42. $t = explode('.', $name);
  43. $t = $t[0].'_thumb.jpeg';
  44. $i = count($path) - 1;
  45. $path[$i] = $t;
  46. $save = implode('/', $path);
  47. $video = FFMpeg::open($base)
  48. ->getFrameFromSeconds(0)
  49. ->export()
  50. ->toDisk('local')
  51. ->save($save);
  52. $media->thumbnail_path = $save;
  53. $media->save();
  54. } catch (Exception $e) {
  55. }
  56. if($media->status_id) {
  57. Cache::forget('status:transformer:media:attachments:' . $media->status_id);
  58. }
  59. MediaStoragePipeline::dispatch($media);
  60. }
  61. }