videoToHLS.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. set_time_limit(0);
  3. require '../../vendor/autoload.php';
  4. $GLOBALS["videoExt"] = array('mp4', 'wmv');
  5. $GLOBALS["pdfExt"] = array('doc', 'docx', 'ppt', 'pptx', 'pdf');
  6. use NcJoes\OfficeConverter\OfficeConverter;
  7. use Streaming\Representation;
  8. $ffmpeg = Streaming\FFMpeg::create([
  9. 'ffmpeg.binaries' => 'C:\FFmpeg\bin\ffmpeg.exe',
  10. 'ffprobe.binaries' => 'C:\FFmpeg\bin\ffprobe.exe',
  11. 'timeout' => 3600,
  12. ]);
  13. $GLOBALS["ffmpeg"] = $ffmpeg;
  14. $root = '../../assets';
  15. $folder = 'videos';
  16. FindPath($root, $folder, $ffmpeg);
  17. function ConvertVideo($file_path, $ffmpeg)
  18. {
  19. $r_1080p = (new Representation)->setKiloBitrate(4096)->setResize(1920, 1080);
  20. $dir_name = pathinfo($file_path, PATHINFO_DIRNAME);
  21. $file_name = pathinfo($file_path, PATHINFO_FILENAME);
  22. $ext = pathinfo($file_path, PATHINFO_EXTENSION);
  23. if (!file_exists("../." . $dir_name . '/' . $file_name . ".m3u8")) {
  24. $video = $ffmpeg->open("../." . $file_path);
  25. $video->hls()
  26. ->x264()
  27. ->setHlsTime(300)
  28. ->addRepresentations([$r_1080p])
  29. ->save("../." . $dir_name . '/' . $file_name . ".m3u8");
  30. $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(40))
  31. ->save("../." . $dir_name . '/' . $file_name . ".jpg");
  32. $video
  33. ->gif(FFMpeg\Coordinate\TimeCode::fromSeconds(40), new FFMpeg\Coordinate\Dimension(640, 480), 5)
  34. ->save("../." . $dir_name . '/' . $file_name . ".gif");
  35. echo "<span style='color:red;'>";
  36. echo " " . $ext . " ==> m3u8";
  37. echo "</span>";
  38. }
  39. }
  40. function ConvertPdf($file_path)
  41. {
  42. $dir_name = pathinfo($file_path, PATHINFO_DIRNAME);
  43. $file_name = pathinfo($file_path, PATHINFO_FILENAME);
  44. $ext = pathinfo($file_path, PATHINFO_EXTENSION);
  45. if (!file_exists("../." . $dir_name . '/' . $file_name . ".pdf")) {
  46. $converter = new OfficeConverter("../." . $file_path, "./", "soffice.bin ", false);
  47. $converter->convertTo("../." . $dir_name . '/' . $file_name . ".pdf");
  48. echo "<span style='color:red;'>";
  49. echo " " . $ext . " ==> pdf";
  50. echo "</span>";
  51. }
  52. if (!file_exists("../." . $dir_name . '/' . $file_name . ".jpg")) {
  53. $root = $_SERVER['DOCUMENT_ROOT'] . '/BIM-Monitor' . substr($dir_name, 1) . '/' . $file_name;
  54. $im = new imagick();
  55. $im->readimage($root . '.pdf[0]');
  56. $im->setImageFormat('jpg');
  57. $im->writeImage($root . '.jpg');
  58. $im->clear();
  59. $im->destroy();
  60. echo "<span style='color:red;'>";
  61. echo " pdf ==> jpg";
  62. echo "</span>";
  63. }
  64. }
  65. function FindPath($root, $folder, $ffmpeg)
  66. {
  67. $rootPath = $root . '/' . $folder;
  68. $paths = array_diff(scandir($root . '/' . $folder), array('.', '..', 'Thumbs.db'));
  69. natsort($paths);
  70. echo ("<ul>");
  71. foreach ($paths as $path) {
  72. if (str_contains($path, '.')) {
  73. echo ("<li data-jstree='{ " . '"type" : "file"' . " }' >");
  74. $title = explode(".", $path)[0];
  75. $file_path = substr($rootPath, 4) . "/" . $path;
  76. $path = "title:" . $title . "path:" . $file_path . " dir_id:" . $folder;
  77. echo ($path);
  78. $ext = pathinfo($file_path, PATHINFO_EXTENSION);
  79. if (in_array($ext, $GLOBALS["videoExt"])) {
  80. ConvertVideo($file_path, $ffmpeg);
  81. } else if (in_array($ext, $GLOBALS["pdfExt"])) {
  82. ConvertPdf($file_path);
  83. }
  84. echo ("</li>");
  85. } else {
  86. echo ("<li>");
  87. echo ("dir_name: " . $path . "parent: " . $folder);
  88. FindPath($rootPath, $path, $ffmpeg);
  89. echo ("</li>");
  90. }
  91. }
  92. echo ("</ul>");
  93. }