Showing
3 changed files
with
42 additions
and
35 deletions
... | @@ -30,7 +30,7 @@ class ImmerseController extends AdminController | ... | @@ -30,7 +30,7 @@ class ImmerseController extends AdminController |
30 | return Grid::make(new Immerse(), function (Grid $grid) { | 30 | return Grid::make(new Immerse(), function (Grid $grid) { |
31 | // 去掉新增和删除按钮 | 31 | // 去掉新增和删除按钮 |
32 | $grid->disableCreateButton(); | 32 | $grid->disableCreateButton(); |
33 | - $grid->disableFilterButton(); | 33 | +// $grid->disableFilterButton(); |
34 | 34 | ||
35 | $grid->model()->where('user_id','=',1); | 35 | $grid->model()->where('user_id','=',1); |
36 | 36 | ||
... | @@ -55,12 +55,11 @@ class ImmerseController extends AdminController | ... | @@ -55,12 +55,11 @@ class ImmerseController extends AdminController |
55 | $grid->column('temp_id'); | 55 | $grid->column('temp_id'); |
56 | $grid->column('thumbnail')->image(); | 56 | $grid->column('thumbnail')->image(); |
57 | $grid->column('bgm')->display(function ($url){ | 57 | $grid->column('bgm')->display(function ($url){ |
58 | + if ($url == '') return "无"; | ||
58 | if (Str::of($url)->contains('.mp3')) | 59 | if (Str::of($url)->contains('.mp3')) |
59 | return "<a target='_blank' href='". $url ."'>查看</a>"; | 60 | return "<a target='_blank' href='". $url ."'>查看</a>"; |
60 | - elseif (Str::of($url)->contains('.aac')) | ||
61 | - return "<a target='_blank' href='". $url ."'>下载</a>"; | ||
62 | else | 61 | else |
63 | - return "无效路径"; | 62 | + return "<a target='_blank' href='". $url ."'>下载</a>"; |
64 | }); | 63 | }); |
65 | $grid->column('created_at'); | 64 | $grid->column('created_at'); |
66 | $grid->column('updated_at')->sortable(); | 65 | $grid->column('updated_at')->sortable(); | ... | ... |
... | @@ -71,7 +71,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -71,7 +71,7 @@ class AdminMakeImmerse implements ShouldQueue |
71 | /** 音频视频轨都有 */ | 71 | /** 音频视频轨都有 */ |
72 | if ($is_bgm) { | 72 | if ($is_bgm) { |
73 | // 有背景音 融合 | 73 | // 有背景音 融合 |
74 | - $audio = $this->getAbsolutePath($this->getTempPath('.mp3')); | 74 | + $audio = $this->getAbsolutePath($this->getTempPath('.mp3','audio')); |
75 | $cmd = $this->ffmpeg . | 75 | $cmd = $this->ffmpeg . |
76 | ' -y -i ' . escapeshellarg($file) . | 76 | ' -y -i ' . escapeshellarg($file) . |
77 | ' -y -i ' . escapeshellarg($bgm) . | 77 | ' -y -i ' . escapeshellarg($bgm) . |
... | @@ -89,7 +89,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -89,7 +89,7 @@ class AdminMakeImmerse implements ShouldQueue |
89 | } elseif ($media_info['format']['nb_streams'] == 1) { | 89 | } elseif ($media_info['format']['nb_streams'] == 1) { |
90 | /** 只有视频轨 */ | 90 | /** 只有视频轨 */ |
91 | // 生成一段无声音频 | 91 | // 生成一段无声音频 |
92 | - $audio = $this->getAbsolutePath($this->getTempPath('.mp3')); | 92 | + $audio = $this->getAbsolutePath($this->getTempPath('.mp3','audio')); |
93 | $cmd = $this->ffmpeg . | 93 | $cmd = $this->ffmpeg . |
94 | ' -y -f lavfi -i aevalsrc=0:duration=' . escapeshellarg($media_info['format']['duration']) . | 94 | ' -y -f lavfi -i aevalsrc=0:duration=' . escapeshellarg($media_info['format']['duration']) . |
95 | ' -ar 48000 -ab 64k ' . escapeshellarg($audio); | 95 | ' -ar 48000 -ab 64k ' . escapeshellarg($audio); |
... | @@ -114,7 +114,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -114,7 +114,7 @@ class AdminMakeImmerse implements ShouldQueue |
114 | return; | 114 | return; |
115 | } | 115 | } |
116 | 116 | ||
117 | - $thumbnail = $this->getTempPath('.jpg',false); | 117 | + $thumbnail = $this->getTempPath('.jpg','thumbnail'); |
118 | if ($adminMakeVideo->thumbnail == 2){ | 118 | if ($adminMakeVideo->thumbnail == 2){ |
119 | // 截取中间帧作为视频封面 | 119 | // 截取中间帧作为视频封面 |
120 | $frame = ceil($media_info['streams'][0]['nb_frames'] / 2); | 120 | $frame = ceil($media_info['streams'][0]['nb_frames'] / 2); |
... | @@ -136,7 +136,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -136,7 +136,7 @@ class AdminMakeImmerse implements ShouldQueue |
136 | if (!$this->execmd($cmd)) return ; | 136 | if (!$this->execmd($cmd)) return ; |
137 | } | 137 | } |
138 | 138 | ||
139 | - $output = $this->getTempPath('.mp4',false); | 139 | + $output = $this->getTempPath('.mp4','video'); |
140 | $cmd = $this->ffmpeg . ' -y '. | 140 | $cmd = $this->ffmpeg . ' -y '. |
141 | ' -i ' . escapeshellarg($file). | 141 | ' -i ' . escapeshellarg($file). |
142 | ' -i ' . escapeshellarg($watermark). | 142 | ' -i ' . escapeshellarg($watermark). |
... | @@ -180,7 +180,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -180,7 +180,7 @@ class AdminMakeImmerse implements ShouldQueue |
180 | 180 | ||
181 | if ($this->adminMakeVideo->type == 2 && !$is_bgm){ | 181 | if ($this->adminMakeVideo->type == 2 && !$is_bgm){ |
182 | // 没有背景音,单图一张,输出为单图。 | 182 | // 没有背景音,单图一张,输出为单图。 |
183 | - $output = $this->getTempPath('.png',false); | 183 | + $output = $this->getTempPath('.png','thumbnail'); |
184 | $cmd = $this->ffmpeg . ' -y '. | 184 | $cmd = $this->ffmpeg . ' -y '. |
185 | ' -i ' . escapeshellarg($image). | 185 | ' -i ' . escapeshellarg($image). |
186 | ' -i ' . escapeshellarg($watermark). | 186 | ' -i ' . escapeshellarg($watermark). |
... | @@ -191,7 +191,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -191,7 +191,7 @@ class AdminMakeImmerse implements ShouldQueue |
191 | $thumbnail = $output; | 191 | $thumbnail = $output; |
192 | }else{ | 192 | }else{ |
193 | // 有背景音 单图合成视频,时长为音频时长,音频加入背景音 | 193 | // 有背景音 单图合成视频,时长为音频时长,音频加入背景音 |
194 | - $output = $this->getTempPath('.mp4',false); | 194 | + $output = $this->getTempPath('.mp4','video'); |
195 | 195 | ||
196 | // 分析背景音 | 196 | // 分析背景音 |
197 | $mediainfo = $this->mediainfo($bgm); | 197 | $mediainfo = $this->mediainfo($bgm); |
... | @@ -211,7 +211,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -211,7 +211,7 @@ class AdminMakeImmerse implements ShouldQueue |
211 | escapeshellarg($this->getAbsolutePath($output)); | 211 | escapeshellarg($this->getAbsolutePath($output)); |
212 | if (!$this->execmd($cmd)) return ; | 212 | if (!$this->execmd($cmd)) return ; |
213 | 213 | ||
214 | - $thumbnail = $this->getTempPath('.jpg',false); | 214 | + $thumbnail = $this->getTempPath('.jpg','thumbnail'); |
215 | if ($adminMakeVideo->thumbnail == 2){ | 215 | if ($adminMakeVideo->thumbnail == 2){ |
216 | // 将封面分辨率改为指定分辨率 | 216 | // 将封面分辨率改为指定分辨率 |
217 | $cmd = $this->ffmpeg . ' -y ' . | 217 | $cmd = $this->ffmpeg . ' -y ' . |
... | @@ -325,14 +325,13 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -325,14 +325,13 @@ class AdminMakeImmerse implements ShouldQueue |
325 | /** | 325 | /** |
326 | * 获取输出临时文件名 | 326 | * 获取输出临时文件名 |
327 | * @param string $ext | 327 | * @param string $ext |
328 | - * @param bool $is_temp | 328 | + * @param string $dir |
329 | * @return string | 329 | * @return string |
330 | */ | 330 | */ |
331 | - public function getTempPath($ext = '.mp4',$is_temp = true) | 331 | + public function getTempPath($ext = '.mp4',$dir = 'video') |
332 | { | 332 | { |
333 | $filename = "/output_" . time() . rand(0, 10000); | 333 | $filename = "/output_" . time() . rand(0, 10000); |
334 | 334 | ||
335 | - $prefix = $is_temp ? 'temp/' : 'video/'; | ||
336 | $hash_hex = md5($filename); | 335 | $hash_hex = md5($filename); |
337 | // 16进制表示的字符串一共32字节,表示16个二进制字节。 | 336 | // 16进制表示的字符串一共32字节,表示16个二进制字节。 |
338 | // 前16个字符用来第一级求摸,后16个用做第二级 | 337 | // 前16个字符用来第一级求摸,后16个用做第二级 |
... | @@ -340,7 +339,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -340,7 +339,7 @@ class AdminMakeImmerse implements ShouldQueue |
340 | $hash_hex_l2 = substr($hash_hex, 8, 8); | 339 | $hash_hex_l2 = substr($hash_hex, 8, 8); |
341 | $dir_l1 = hexdec($hash_hex_l1) % 256; | 340 | $dir_l1 = hexdec($hash_hex_l1) % 256; |
342 | $dir_l2 = hexdec($hash_hex_l2) % 512; | 341 | $dir_l2 = hexdec($hash_hex_l2) % 512; |
343 | - $dir = $prefix . $dir_l1 . '/' . $dir_l2; | 342 | + $dir = $dir . '/' . $dir_l1 . '/' . $dir_l2; |
344 | 343 | ||
345 | if( !Storage::disk('public')->exists($dir)) Storage::disk('public')->makeDirectory($dir); | 344 | if( !Storage::disk('public')->exists($dir)) Storage::disk('public')->makeDirectory($dir); |
346 | 345 | ||
... | @@ -373,7 +372,7 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -373,7 +372,7 @@ class AdminMakeImmerse implements ShouldQueue |
373 | case 'every_poem': | 372 | case 'every_poem': |
374 | case 'one_poem': | 373 | case 'one_poem': |
375 | $content = $this->adminMakeVideo->poem->content; | 374 | $content = $this->adminMakeVideo->poem->content; |
376 | - $text_file = $this->getAbsolutePath($this->getTempPath('.txt')); | 375 | + $text_file = $this->getAbsolutePath($this->getTempPath('.txt','text')); |
377 | file_put_contents($text_file, $content); | 376 | file_put_contents($text_file, $content); |
378 | $drawtext .= 'drawtext="'. | 377 | $drawtext .= 'drawtext="'. |
379 | 'fontfile=' . escapeshellarg($font_file) . ':' . | 378 | 'fontfile=' . escapeshellarg($font_file) . ':' . |
... | @@ -389,9 +388,11 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -389,9 +388,11 @@ class AdminMakeImmerse implements ShouldQueue |
389 | break; | 388 | break; |
390 | case 'weather': | 389 | case 'weather': |
391 | $content = $this->adminMakeVideo->weather; | 390 | $content = $this->adminMakeVideo->weather; |
391 | + $text_file = $this->getAbsolutePath($this->getTempPath('.txt','text')); | ||
392 | + file_put_contents($text_file, $content); | ||
392 | $drawtext .= 'drawtext="'. | 393 | $drawtext .= 'drawtext="'. |
393 | 'fontfile=' . escapeshellarg($font_file) . ':' . | 394 | 'fontfile=' . escapeshellarg($font_file) . ':' . |
394 | - 'text=' . escapeshellarg($content) . ':' . | 395 | + 'textfile=' . escapeshellarg($text_file) . ':' . |
395 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . | 396 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . |
396 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . | 397 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . |
397 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . | 398 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . |
... | @@ -403,9 +404,11 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -403,9 +404,11 @@ class AdminMakeImmerse implements ShouldQueue |
403 | break; | 404 | break; |
404 | case 'date': | 405 | case 'date': |
405 | $content = Carbon::now()->format('Y年m月d日H时'); | 406 | $content = Carbon::now()->format('Y年m月d日H时'); |
407 | + $text_file = $this->getAbsolutePath($this->getTempPath('.txt','text')); | ||
408 | + file_put_contents($text_file, $content); | ||
406 | $drawtext .= 'drawtext="'. | 409 | $drawtext .= 'drawtext="'. |
407 | 'fontfile=' . escapeshellarg($font_file) . ':' . | 410 | 'fontfile=' . escapeshellarg($font_file) . ':' . |
408 | - 'text=' . escapeshellarg($content) . ':' . | 411 | + 'textfile=' . escapeshellarg($text_file) . ':' . |
409 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . | 412 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . |
410 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . | 413 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . |
411 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . | 414 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . |
... | @@ -416,9 +419,11 @@ class AdminMakeImmerse implements ShouldQueue | ... | @@ -416,9 +419,11 @@ class AdminMakeImmerse implements ShouldQueue |
416 | break; | 419 | break; |
417 | case 'feel': | 420 | case 'feel': |
418 | $content = $this->adminMakeVideo->feel ?: '读此一言,仿佛身临其境。'; | 421 | $content = $this->adminMakeVideo->feel ?: '读此一言,仿佛身临其境。'; |
422 | + $text_file = $this->getAbsolutePath($this->getTempPath('.txt','text')); | ||
423 | + file_put_contents($text_file, $content); | ||
419 | $drawtext .= 'drawtext="'. | 424 | $drawtext .= 'drawtext="'. |
420 | 'fontfile=' . escapeshellarg($font_file) . ':' . | 425 | 'fontfile=' . escapeshellarg($font_file) . ':' . |
421 | - 'text=' . escapeshellarg($content) . ':' . | 426 | + 'textfile=' . escapeshellarg($text_file) . ':' . |
422 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . | 427 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . |
423 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . | 428 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . |
424 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . | 429 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . | ... | ... |
... | @@ -74,7 +74,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -74,7 +74,7 @@ class UserMakeImmerse implements ShouldQueue |
74 | 74 | ||
75 | // 音频还取之前的封面。 | 75 | // 音频还取之前的封面。 |
76 | $thumbnail = Storage::disk('public')->path($this->immerse->thumbnail); | 76 | $thumbnail = Storage::disk('public')->path($this->immerse->thumbnail); |
77 | - $video = Storage::disk('public')->path($this->getTempPath('.mp4',false)); | 77 | + $video = Storage::disk('public')->path($this->getTempPath('.mp4','video')); |
78 | 78 | ||
79 | if ($this->immerse->origin_video_url == '' || $this->immerse->origin_video_url == null) { | 79 | if ($this->immerse->origin_video_url == '' || $this->immerse->origin_video_url == null) { |
80 | // 原官方临境是图片 | 80 | // 原官方临境是图片 |
... | @@ -83,7 +83,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -83,7 +83,7 @@ class UserMakeImmerse implements ShouldQueue |
83 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { | 83 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { |
84 | $audio = $upload_file; | 84 | $audio = $upload_file; |
85 | }else{ | 85 | }else{ |
86 | - $audio = Storage::disk('public')->path($this->getTempPath('.mp3')); | 86 | + $audio = Storage::disk('public')->path($this->getTempPath('.mp3','audio')); |
87 | $bgm = Storage::disk('public')->path($this->immerse->bgm); | 87 | $bgm = Storage::disk('public')->path($this->immerse->bgm); |
88 | $cmd = $this->ffmpeg . ' -y ' . | 88 | $cmd = $this->ffmpeg . ' -y ' . |
89 | ' -i ' . escapeshellarg($upload_file) . | 89 | ' -i ' . escapeshellarg($upload_file) . |
... | @@ -120,7 +120,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -120,7 +120,7 @@ class UserMakeImmerse implements ShouldQueue |
120 | //用户录音超长,截取用户录音 | 120 | //用户录音超长,截取用户录音 |
121 | if ($mediainfo['format']['duration'] > $origin_mediainfo['format']['duration']) { | 121 | if ($mediainfo['format']['duration'] > $origin_mediainfo['format']['duration']) { |
122 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { | 122 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { |
123 | - $audio = Storage::disk('public')->path($this->getTempPath('.mp3')); | 123 | + $audio = Storage::disk('public')->path($this->getTempPath('.mp3','audio')); |
124 | $cmd = $this->ffmpeg . ' -y ' . | 124 | $cmd = $this->ffmpeg . ' -y ' . |
125 | ' -i ' . escapeshellarg($upload_file) . | 125 | ' -i ' . escapeshellarg($upload_file) . |
126 | ' -ss 0 -t ' . escapeshellarg($origin_mediainfo['format']['duration']) . | 126 | ' -ss 0 -t ' . escapeshellarg($origin_mediainfo['format']['duration']) . |
... | @@ -128,7 +128,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -128,7 +128,7 @@ class UserMakeImmerse implements ShouldQueue |
128 | if (!$this->execmd($cmd)) return ; | 128 | if (!$this->execmd($cmd)) return ; |
129 | }else{ | 129 | }else{ |
130 | $bgm = Storage::disk('public')->path($this->immerse->bgm); | 130 | $bgm = Storage::disk('public')->path($this->immerse->bgm); |
131 | - $audio = Storage::disk('public')->path($this->getTempPath('.mp3')); | 131 | + $audio = Storage::disk('public')->path($this->getTempPath('.mp3','audio')); |
132 | $cmd = $this->ffmpeg . ' -y ' . | 132 | $cmd = $this->ffmpeg . ' -y ' . |
133 | ' -i ' . escapeshellarg($upload_file) . | 133 | ' -i ' . escapeshellarg($upload_file) . |
134 | ' -i ' . escapeshellarg($bgm) . | 134 | ' -i ' . escapeshellarg($bgm) . |
... | @@ -141,7 +141,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -141,7 +141,7 @@ class UserMakeImmerse implements ShouldQueue |
141 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { | 141 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { |
142 | $audio = $upload_file; | 142 | $audio = $upload_file; |
143 | }else{ | 143 | }else{ |
144 | - $audio = Storage::disk('public')->path($this->getTempPath('.mp3')); | 144 | + $audio = Storage::disk('public')->path($this->getTempPath('.mp3','audio')); |
145 | $bgm = Storage::disk('public')->path($this->immerse->bgm); | 145 | $bgm = Storage::disk('public')->path($this->immerse->bgm); |
146 | $cmd = $this->ffmpeg . ' -y ' . | 146 | $cmd = $this->ffmpeg . ' -y ' . |
147 | ' -i ' . escapeshellarg($upload_file) . | 147 | ' -i ' . escapeshellarg($upload_file) . |
... | @@ -209,7 +209,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -209,7 +209,7 @@ class UserMakeImmerse implements ShouldQueue |
209 | 209 | ||
210 | // 截取中间帧作为视频封面 | 210 | // 截取中间帧作为视频封面 |
211 | $frame = ceil($mediainfo['streams'][0]['nb_frames'] / 2); | 211 | $frame = ceil($mediainfo['streams'][0]['nb_frames'] / 2); |
212 | - $thumbnail = Storage::disk('public')->path($this->getTempPath('.jpg',false)); | 212 | + $thumbnail = Storage::disk('public')->path($this->getTempPath('.jpg','thumbnail')); |
213 | $cmd = $this->ffmpeg . ' -y ' . | 213 | $cmd = $this->ffmpeg . ' -y ' . |
214 | ' -i ' . escapeshellarg($upload_file) . | 214 | ' -i ' . escapeshellarg($upload_file) . |
215 | ' -i ' . escapeshellarg($watermark) . | 215 | ' -i ' . escapeshellarg($watermark) . |
... | @@ -219,7 +219,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -219,7 +219,7 @@ class UserMakeImmerse implements ShouldQueue |
219 | escapeshellarg($thumbnail); | 219 | escapeshellarg($thumbnail); |
220 | if (!$this->execmd($cmd)) return ; | 220 | if (!$this->execmd($cmd)) return ; |
221 | 221 | ||
222 | - $video = Storage::disk('public')->path($this->getTempPath('.mp4',false)); | 222 | + $video = Storage::disk('public')->path($this->getTempPath('.mp4','video')); |
223 | // 没有背景音 | 223 | // 没有背景音 |
224 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { | 224 | if ($this->immerse->bgm == '' || $this->immerse->bgm == null) { |
225 | $cmd = $this->ffmpeg . ' -y ' . | 225 | $cmd = $this->ffmpeg . ' -y ' . |
... | @@ -325,14 +325,13 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -325,14 +325,13 @@ class UserMakeImmerse implements ShouldQueue |
325 | /** | 325 | /** |
326 | * 获取输出临时文件名 | 326 | * 获取输出临时文件名 |
327 | * @param string $ext | 327 | * @param string $ext |
328 | - * @param bool $is_temp | 328 | + * @param string $dir |
329 | * @return string | 329 | * @return string |
330 | */ | 330 | */ |
331 | - public function getTempPath($ext = '.mp4',$is_temp = true) | 331 | + public function getTempPath($ext = '.mp4', $dir = 'video') |
332 | { | 332 | { |
333 | $filename = "/output_" . time() . rand(0, 10000); | 333 | $filename = "/output_" . time() . rand(0, 10000); |
334 | 334 | ||
335 | - $prefix = $is_temp ? 'temp/' : 'video/'; | ||
336 | $hash_hex = md5($filename); | 335 | $hash_hex = md5($filename); |
337 | // 16进制表示的字符串一共32字节,表示16个二进制字节。 | 336 | // 16进制表示的字符串一共32字节,表示16个二进制字节。 |
338 | // 前16个字符用来第一级求摸,后16个用做第二级 | 337 | // 前16个字符用来第一级求摸,后16个用做第二级 |
... | @@ -340,7 +339,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -340,7 +339,7 @@ class UserMakeImmerse implements ShouldQueue |
340 | $hash_hex_l2 = substr($hash_hex, 8, 8); | 339 | $hash_hex_l2 = substr($hash_hex, 8, 8); |
341 | $dir_l1 = hexdec($hash_hex_l1) % 256; | 340 | $dir_l1 = hexdec($hash_hex_l1) % 256; |
342 | $dir_l2 = hexdec($hash_hex_l2) % 512; | 341 | $dir_l2 = hexdec($hash_hex_l2) % 512; |
343 | - $dir = $prefix . $dir_l1 . '/' . $dir_l2; | 342 | + $dir = $dir . '/' . $dir_l1 . '/' . $dir_l2; |
344 | 343 | ||
345 | if( !Storage::disk('public')->exists($dir)) Storage::disk('public')->makeDirectory($dir); | 344 | if( !Storage::disk('public')->exists($dir)) Storage::disk('public')->makeDirectory($dir); |
346 | 345 | ||
... | @@ -477,7 +476,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -477,7 +476,7 @@ class UserMakeImmerse implements ShouldQueue |
477 | $white = imagecolorallocate($wp, 0xDC, 0x14, 0x3C); //fixme 字体颜色 | 476 | $white = imagecolorallocate($wp, 0xDC, 0x14, 0x3C); //fixme 字体颜色 |
478 | imagettftext($wp, 20, 0, 75, 240, $white, $font, $signature); | 477 | imagettftext($wp, 20, 0, 75, 240, $white, $font, $signature); |
479 | 478 | ||
480 | - $dst = Storage::disk('public')->path($this->getTempPath('.png')); | 479 | + $dst = Storage::disk('public')->path($this->getTempPath('.png','temp')); |
481 | imagepng($wp, $dst); | 480 | imagepng($wp, $dst); |
482 | if(is_resource($end_wallpaper)) imagedestroy($end_wallpaper); | 481 | if(is_resource($end_wallpaper)) imagedestroy($end_wallpaper); |
483 | if(is_resource($_img)) imagedestroy($_img); | 482 | if(is_resource($_img)) imagedestroy($_img); |
... | @@ -504,7 +503,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -504,7 +503,7 @@ class UserMakeImmerse implements ShouldQueue |
504 | case 'every_poem': | 503 | case 'every_poem': |
505 | case 'one_poem': | 504 | case 'one_poem': |
506 | $content = $this->immerse->poem->content; | 505 | $content = $this->immerse->poem->content; |
507 | - $text_file = Storage::disk('public')->path($this->getTempPath('.txt')); | 506 | + $text_file = Storage::disk('public')->path($this->getTempPath('.txt','text')); |
508 | file_put_contents($text_file, $content); | 507 | file_put_contents($text_file, $content); |
509 | 508 | ||
510 | $text_color = $component->text_color ?? 'white'; | 509 | $text_color = $component->text_color ?? 'white'; |
... | @@ -524,7 +523,7 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -524,7 +523,7 @@ class UserMakeImmerse implements ShouldQueue |
524 | break; | 523 | break; |
525 | case 'weather': | 524 | case 'weather': |
526 | $content = $this->immerse->weather; | 525 | $content = $this->immerse->weather; |
527 | - $text_file = Storage::disk('public')->path($this->getTempPath('.txt')); | 526 | + $text_file = Storage::disk('public')->path($this->getTempPath('.txt','text')); |
528 | file_put_contents($text_file, $content); | 527 | file_put_contents($text_file, $content); |
529 | $drawtext .= 'drawtext="'. | 528 | $drawtext .= 'drawtext="'. |
530 | 'fontfile=' . escapeshellarg($font_file) . ':' . | 529 | 'fontfile=' . escapeshellarg($font_file) . ':' . |
... | @@ -540,9 +539,11 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -540,9 +539,11 @@ class UserMakeImmerse implements ShouldQueue |
540 | break; | 539 | break; |
541 | case 'date': | 540 | case 'date': |
542 | $content = Carbon::now()->format('Y年m月d日H时'); | 541 | $content = Carbon::now()->format('Y年m月d日H时'); |
542 | + $text_file = Storage::disk('public')->path($this->getTempPath('.txt','text')); | ||
543 | + file_put_contents($text_file, $content); | ||
543 | $drawtext .= 'drawtext="'. | 544 | $drawtext .= 'drawtext="'. |
544 | 'fontfile=' . escapeshellarg($font_file) . ':' . | 545 | 'fontfile=' . escapeshellarg($font_file) . ':' . |
545 | - 'text=' . escapeshellarg($content) . ':' . | 546 | + 'textfile=' . escapeshellarg($text_file) . ':' . |
546 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . | 547 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . |
547 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . | 548 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . |
548 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . | 549 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . |
... | @@ -553,9 +554,11 @@ class UserMakeImmerse implements ShouldQueue | ... | @@ -553,9 +554,11 @@ class UserMakeImmerse implements ShouldQueue |
553 | break; | 554 | break; |
554 | case 'feel': | 555 | case 'feel': |
555 | $content = $this->immerse->content; | 556 | $content = $this->immerse->content; |
557 | + $text_file = Storage::disk('public')->path($this->getTempPath('.txt','text')); | ||
558 | + file_put_contents($text_file, $content); | ||
556 | $drawtext .= 'drawtext="'. | 559 | $drawtext .= 'drawtext="'. |
557 | 'fontfile=' . escapeshellarg($font_file) . ':' . | 560 | 'fontfile=' . escapeshellarg($font_file) . ':' . |
558 | - 'text=' . escapeshellarg($content) . ':' . | 561 | + 'textfile=' . escapeshellarg($text_file) . ':' . |
559 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . | 562 | 'fontsize=' . $this->calcFontSize($component->font_size) . ':' . |
560 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . | 563 | 'fontcolor=' . $text_color . '@' . $opacity . ':' . |
561 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . | 564 | 'x=' . escapeshellarg(VideoTemp::POSITION_FFMPEG[$component->position][0]) . ':' . | ... | ... |
-
Please register or login to post a comment