1
0

VideoThumbnail.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. use App\Util\Media\Blurhash;
  15. class VideoThumbnail implements ShouldQueue
  16. {
  17. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  18. protected $media;
  19. /**
  20. * Create a new job instance.
  21. *
  22. * @return void
  23. */
  24. public function __construct(Media $media)
  25. {
  26. $this->media = $media;
  27. }
  28. /**
  29. * Execute the job.
  30. *
  31. * @return void
  32. */
  33. public function handle()
  34. {
  35. $media = $this->media;
  36. if($media->mime != 'video/mp4') {
  37. return;
  38. }
  39. $base = $media->media_path;
  40. $path = explode('/', $base);
  41. $name = last($path);
  42. try {
  43. $t = explode('.', $name);
  44. $t = $t[0].'_thumb.jpeg';
  45. $i = count($path) - 1;
  46. $path[$i] = $t;
  47. $save = implode('/', $path);
  48. $video = FFMpeg::open($base)
  49. ->getFrameFromSeconds(0)
  50. ->export()
  51. ->toDisk('local')
  52. ->save($save);
  53. $media->thumbnail_path = $save;
  54. $media->save();
  55. $blurhash = Blurhash::generate($media);
  56. if($blurhash) {
  57. $media->blurhash = $blurhash;
  58. $media->save();
  59. }
  60. } catch (Exception $e) {
  61. }
  62. if($media->status_id) {
  63. Cache::forget('status:transformer:media:attachments:' . $media->status_id);
  64. }
  65. MediaStoragePipeline::dispatch($media);
  66. }
  67. }