api_video_tool.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. set_time_limit(0);
  3. require '../../vendor/autoload.php';
  4. $GLOBALS["videoExt"] = array('mp4', 'avi');
  5. $GLOBALS["pdfExt"] = array('doc', 'docx', 'ppt', 'pptx', 'pdf');
  6. $isAJAX = false;
  7. $GLOBALS["output"] = "";
  8. $GLOBALS["ajax"] = [];
  9. use NcJoes\OfficeConverter\OfficeConverter;
  10. use Streaming\Representation;
  11. $ffmpeg = Streaming\FFMpeg::create([
  12. 'ffmpeg.binaries' => 'C:\FFmpeg\bin\ffmpeg.exe',
  13. 'ffprobe.binaries' => 'C:\FFmpeg\bin\ffprobe.exe',
  14. 'timeout' => 3600,
  15. ]);
  16. $GLOBALS["ffmpeg"] = $ffmpeg;
  17. $root = '../../assets/API/Universal';
  18. //$root = '../../上傳測試/Revit';
  19. $folder = 'Revit/拖放元件';
  20. if (isset($_POST["APIName"])) {
  21. $folder = $APIName;
  22. $root .= ('/'.$_POST['software']);
  23. $isAJAX = true;
  24. }
  25. FindPath($root, $folder, $ffmpeg);
  26. if (!$isAJAX) {
  27. echo ($GLOBALS["output"]);
  28. }else{
  29. echo (implode(",",$GLOBALS["ajax"]));
  30. }
  31. function ConvertVideo($file_path, $ffmpeg)
  32. {
  33. $r_1080p = (new Representation)->setKiloBitrate(4096)->setResize(1920, 1080);
  34. $dir_name = pathinfo($file_path, PATHINFO_DIRNAME);
  35. $file_name = pathinfo($file_path, PATHINFO_FILENAME);
  36. $ext = pathinfo($file_path, PATHINFO_EXTENSION);
  37. if (!file_exists("../." . $dir_name . '/' . $file_name . ".m3u8")) {
  38. $video = $ffmpeg->open("../." . $file_path);
  39. $video->hls()
  40. ->x264()
  41. ->setHlsTime(300)
  42. ->addRepresentations([$r_1080p])
  43. ->save("../." . $dir_name . '/' . $file_name . ".m3u8");
  44. $GLOBALS["output"] .= "<span style='color:red;'>";
  45. $GLOBALS["output"] .= " " . $ext . " ==> m3u8";
  46. $GLOBALS["output"] .= "</span>";
  47. array_push($GLOBALS["ajax"],$file_name);
  48. }
  49. }
  50. function FindPath($root, $folder, $ffmpeg)
  51. {
  52. $rootPath = $root . '/' . $folder;
  53. $paths = array_diff(scandir($root . '/' . $folder), array('.', '..', 'Thumbs.db'));
  54. natsort($paths);
  55. $GLOBALS["output"] .= ("<ul>");
  56. foreach ($paths as $path) {
  57. if (str_contains($path, '.')) {
  58. $GLOBALS["output"] .= ("<li data-jstree='{ " . '"type" : "file"' . " }' >");
  59. $title = explode(".", $path)[0];
  60. $file_path = substr($rootPath, 4) . "/" . $path;
  61. $path = "title:" . $title . "path:" . $file_path . " dir_id:" . $folder;
  62. $GLOBALS["output"] .= ($path);
  63. $ext = pathinfo($file_path, PATHINFO_EXTENSION);
  64. if (in_array($ext, $GLOBALS["videoExt"])) {
  65. ConvertVideo($file_path, $ffmpeg);
  66. } else if (in_array($ext, $GLOBALS["pdfExt"])) {
  67. //ConvertPdf($file_path);
  68. }
  69. $GLOBALS["output"] .= ("</li>");
  70. } else {
  71. $GLOBALS["output"] .= ("<li>");
  72. $GLOBALS["output"] .= ("dir_name: " . $path . "parent: " . $folder);
  73. FindPath($rootPath, $path, $ffmpeg);
  74. $GLOBALS["output"] .= ("</li>");
  75. }
  76. }
  77. $GLOBALS["output"] .= ("</ul>");
  78. }