<?php
// ffmpeg_log_to_vtt.php
// Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing
// November, 2022

/*
cd: no such file or directory: sounds
user@Users-Air thecommute % cd sound 
user@Users-Air sound % ls -l
total 30168
-rw-r--r--  1 user  admin  1137630  9 Nov 14:26 Playing_with_Filters-Mike_Vekris.mp3
-rw-r--r--  1 user  admin   934968  9 Nov 14:26 Prelude_Melody-Mike_Vekris.mp3
-rw-r--r--  1 user  admin  4384768  9 Nov 14:26 betamax_defender-freesoundtrackmusic.mp3
-rw-r--r--  1 user  admin  2938880  9 Nov 14:26 rampaging_bulldozer-freesoundtrackmusic.mp3
-rw-r--r--  1 user  admin  4528128  9 Nov 14:26 trouble_in_the_laboratory-freesoundtrackmusic.mp3
user@Users-Air sound % ffmpeg -i  Playing_with_Filters-Mike_Vekris.mp3 -i  Prelude_Melody-Mike_Vekris.mp3 -i  betamax_defender-freesoundtrackmusic.mp3 -i  rampaging_bulldozer-freesoundtrackmusic.mp3 -i  trouble_in_the_laboratory-freesoundtrackmusic.mp3 all.mp3
ffmpeg version 4.4.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 13.0.0 (clang-1300.0.29.3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4.1_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
[mp3 @ 0x7fb596808200] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'Playing_with_Filters-Mike_Vekris.mp3':
  Metadata:
    title           : Playing with Filters
    genre           : Other
    artist          : Mike Vekris
  Duration: 00:01:10.85, start: 0.000000, bitrate: 128 kb/s
  Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
[mp3 @ 0x7fb596814400] Estimating duration from bitrate, this may be inaccurate
Input #1, mp3, from 'Prelude_Melody-Mike_Vekris.mp3':
  Metadata:
    title           : Prelude Melody
    genre           : Other
    artist          : Mike Vekris
  Duration: 00:00:58.18, start: 0.000000, bitrate: 128 kb/s
  Stream #1:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
[mp3 @ 0x7fb596813800] Skipping 626 bytes of junk at 459.
[mp3 @ 0x7fb596813800] Estimating duration from bitrate, this may be inaccurate
Input #2, mp3, from 'betamax_defender-freesoundtrackmusic.mp3':
  Metadata:
    copyright       : C.P.Bryan
    TOPE            : freesoundtrackmusic.com
    composer        : C.P.Bryan
    comment         : 
    album           : freesoundtrackmusic.com
    artist          : freesoundtrackmusic.com
    title           : Betamax Denfender 
    genre           : Other
    date            : 2010
  Duration: 00:03:02.65, start: 0.000000, bitrate: 192 kb/s
  Stream #2:0: Audio: mp3, 44100 Hz, stereo, fltp, 192 kb/s
[mp3 @ 0x7fb597021200] Skipping 626 bytes of junk at 1545.
[mp3 @ 0x7fb597021200] Estimating duration from bitrate, this may be inaccurate
Input #3, mp3, from 'rampaging_bulldozer-freesoundtrackmusic.mp3':
  Metadata:
    copyright       : C.P.Bryan
    TOPE            : freesoundtrackmusic.com
    composer        : C.P.Bryan
    comment         : 
    artist          : freesoundtrackmusic.com
    title           : Rampaging Bulldozer
    genre           : Other
    date            : 2009
  Duration: 00:02:02.36, start: 0.000000, bitrate: 192 kb/s
  Stream #3:0: Audio: mp3, 44100 Hz, stereo, fltp, 192 kb/s
[mp3 @ 0x7fb597028000] Skipping 626 bytes of junk at 1503.
[mp3 @ 0x7fb597028000] Estimating duration from bitrate, this may be inaccurate
Input #4, mp3, from 'trouble_in_the_laboratory-freesoundtrackmusic.mp3':
  Metadata:
    copyright       : C.P.Bryan
    TOPE            : freesoundtrackmusic.com
    composer        : C.P.Bryan
    comment         : 
    album           : freesoundtrackmusic.com
    artist          : freesoundtrackmusic.com
    title           : Trouble in the Laboratory
    genre           : Other
    date            : 2010
  Duration: 00:03:08.58, start: 0.000000, bitrate: 192 kb/s
  Stream #4:0: Audio: mp3, 44100 Hz, stereo, fltp, 192 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (mp3float) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to 'all.mp3':
  Metadata:
    TIT2            : Playing with Filters
    TCON            : Other
    TPE1            : Mike Vekris
    TSSE            : Lavf58.76.100
  Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp
    Metadata:
      encoder         : Lavc58.134.100 libmp3lame
size=    1110kB time=00:01:10.97 bitrate= 128.1kbits/s speed=41.7x    
video:0kB audio:1110kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.028598%
user@Users-Air sound % ls -l
total 32392
-rw-r--r--  1 user  admin  1137630  9 Nov 14:26 Playing_with_Filters-Mike_Vekris.mp3
-rw-r--r--  1 user  admin   934968  9 Nov 14:26 Prelude_Melody-Mike_Vekris.mp3
-rw-r--r--  1 user  admin  1136756  9 Nov 14:29 all.mp3
-rw-r--r--  1 user  admin  4384768  9 Nov 14:26 betamax_defender-freesoundtrackmusic.mp3
-rw-r--r--  1 user  admin  2938880  9 Nov 14:26 rampaging_bulldozer-freesoundtrackmusic.mp3
-rw-r--r--  1 user  admin  4528128  9 Nov 14:26 trouble_in_the_laboratory-freesoundtrackmusic.mp3
user@Users-Air sound % ffmpeg -i  Playing_with_Filters-Mike_Vekris.mp3 -i  Prelude_Melody-Mike_Vekris.mp3 -i  betamax_defender-freesoundtrackmusic.mp3 -i  rampaging_bulldozer-freesoundtrackmusic.mp3 -i  trouble_in_the_laboratory-freesoundtrackmusic.mp3  "[0:a][1:a]concat=n=5:v=0:a=1" all.mp3
ffmpeg version 4.4.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 13.0.0 (clang-1300.0.29.3)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4.1_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
[mp3 @ 0x7faf28010a00] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'Playing_with_Filters-Mike_Vekris.mp3':

*/
  $incont='';
  $infile='';
  $curi=-1;
  $arraytitle=[];
  $arraycontent=[];
  $lasttitle="";
  $htmlis="";
  
  if (isset($_POST['infile'])) {
    $infile=str_replace('+',' ',urldecode($_POST['infile']));
    if (strlen($infile) > 500) {
      $incont=$infile;
    } else {
    if (file_exists($infile)) {
      $incont=file_get_contents($infile);
    }
    }
    
    $rep="<p>";
    $inbases=explode(str_replace('+',' ',urldecode($_POST['inbasenameprefix'])), $incont);
    for ($ii=0; $ii<sizeof($inbases); $ii++) {
     if (sizeof(explode(' ', trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]))) == 1) {
      $curi++;
      array_push($arraytitle, "");
      array_push($arraycontent, "");
      if (strpos( str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), ' cd') !== false) {
      $dl=str_replace('+',' ',urldecode($_POST['inbasenamesuffix']));
      $ttc=explode($dl, $inbases[$ii])[1];
      $tocrlf=trim(  explode("\n",    $ttc  )[0]  );
      if (strpos($tocrlf, "/") !== false) {
      $reps=explode("/", $tocrlf);
      $sofar="";
      for ($jj=0; $jj<sizeof($reps); $jj++) {
        if ($sofar == "" && substr((trim($reps[$jj]) . " "),0,1) != '.') {
          $sofar=trim($reps[$jj]);
        }
      }
      
      if ($sofar != "") {
      $rep.=$sofar . "<br>";
      if (sizeof($inbases) > (1 + ii)) { 
       if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) {
        $rep.="<br>*" . $ii . "*<br>";
        $arraycontent[$curi]=$inbases[1 + $ii]; 
        $arraytitle[$curi]=$sofar;
        $lasttitle=$sofar;
       } else {
        $lasttitle=$sofar;
       }
      }

      } else {
      $rep.=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]) . "<br>";
      if (sizeof($inbases) > (1 + ii)) { 
       if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) {
        $rep.="<br>!" . $ii . "!<br>";
        $arraycontent[$curi]=$inbases[1 + $ii]; 
        $arraytitle[$curi]=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       } else {
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       }
      }

      }
      
      
      } else if (strpos($tocrlf, substr("\\",0,1)) !== false) {
      $reps=explode(substr("\\",0,1), $tocrlf);
      $sofar="";
      for ($jj=0; $jj<sizeof($reps); $jj++) {
        if ($sofar == "" && substr((trim($reps[$jj]) . " "),0,1) != '.') {
          $sofar=trim($reps[$jj]);
        }
      }
      
      if ($sofar != "") {
      $rep.=$sofar . "<br>";
      if (sizeof($inbases) > (1 + ii)) { 
       if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) {
        $rep.="<br>^" . $ii . "^<br>";
        $arraycontent[$curi]=$inbases[1 + $ii]; 
        $arraytitle[$curi]=$sofar;
        $lasttitle=$sofar;
       } else {
        $lasttitle=$sofar;
       }
      }

      } else {
      $rep.=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]) . "<br>";
      if (sizeof($inbases) > (1 + ii)) { 
       if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) {
        $rep.="<br>|" . $ii . "|<br>";
        $arraycontent[$curi]=$inbases[1 + $ii]; 
        $arraytitle[$curi]=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       } else {
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       }
      }
 
      }
      
      
      } else {
      $rep.=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]) . "<br>";
      if (sizeof($inbases) > (1 + ii)) { 
       if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) {
        $rep.="<br>!" . $ii . "!<br>";
        $arraycontent[$curi]=$inbases[1 + $ii]; 
        $arraytitle[$curi]=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       } else {
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       }
      }

      }
      } else {
      $rep.=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]) . "<br>";
      if (sizeof($inbases) > (1 + ii)) { 
       if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) {
        $rep.="<br>@" . $ii . "@<br>";
        $arraycontent[$curi]=$inbases[1 + $ii]; 
        $arraytitle[$curi]=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       } else {
        $lasttitle=trim(explode(str_replace('+',' ',urldecode($_POST['inbasenamesuffix'])), $inbases[$ii])[0]);
       }
      }
      
      }
     } else {
      $arraycontent[$curi].=$inbases[$ii];
      if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $arraycontent[$curi])) > 1) {
        $arraytitle[$curi]=$lasttitle;
      }
     }
    }
    
    $postrep=$rep . "<br><br><br><br>";
    $rep="";
    for ($kk=0; $kk<sizeof($arraytitle); $kk++) {
      if ($arraytitle[$kk] != '') {
        $rep.="<br><br>Title: ---- " . $arraytitle[$kk] . "<br><br>";
        if (file_exists($arraytitle[$kk] . ".vtt")) {
         $kkk=0;
         while (file_exists($arraytitle[$kk] . ".vtt" . $kkk)) {
          $kkk++;
         }
         rename($arraytitle[$kk] . ".vtt", $arraytitle[$kk] . ".vtt" . $kkk);
        }
        file_put_contents($arraytitle[$kk] . ".vtt", "WEBVTT FILE\n\n");
        $rep.="<br><br>Content: ---- " . $arraycontent[$kk] . "<br><br>";
        $lefttime="00:00:00.000";
        $righttime="00:00:00.000";
        $rtime="00:00:00.000";
        $lh=0;
        $lm=0;
        $ls=0.0;
        $rh=0;
        $rm=0;
        $rs=0.0;
        $jsonstuff="";
        $titlestuff="";
        $thisv="";
        $lookfor=strtolower(str_replace('+',' ',urldecode($_POST['metatitleprefix'])));
        if (strpos($arraycontent[$kk], "ffmpeg -") !== false) {
        $best=-1;
        while (($best + sizeof(explode("ffmpeg -", $arraycontent[$kk]))) > 0 && strpos(explode("ffmpeg -", $arraycontent[$kk])[$best + sizeof(explode("ffmpeg -", $arraycontent[$kk]))], str_replace('+',' ',urldecode($_POST['metaprefix']))) == false) {
          $best--;
        }
        $tracks=explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), explode("ffmpeg -", $arraycontent[$kk])[$best + sizeof(explode("ffmpeg -", $arraycontent[$kk]))]);
        } else if (strpos($arraycontent[$kk], "ffmpeg.exe -") !== false) {
        $best=-1;
        while (($best + sizeof(explode("ffmpeg.exe -", $arraycontent[$kk]))) > 0 && strpos(explode("ffmpeg.exe -", $arraycontent[$kk])[$best + sizeof(explode("ffmpeg.exe -", $arraycontent[$kk]))], str_replace('+',' ',urldecode($_POST['metaprefix']))) == false) {
          $best--;
        }
        $tracks=explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), explode("ffmpeg.exe -", $arraycontent[$kk])[$best + sizeof(explode("ffmpeg.exe -", $arraycontent[$kk]))]);
        } else if (strpos($arraycontent[$kk], "ffmpeg.exe /") !== false) {
        $best=-1;
        while (($best + sizeof(explode("ffmpeg.exe /", $arraycontent[$kk]))) > 0 && strpos(explode("ffmpeg.exe /", $arraycontent[$kk])[$best + sizeof(explode("ffmpeg.exe /", $arraycontent[$kk]))], str_replace('+',' ',urldecode($_POST['metaprefix']))) == false) {
          $best--;
        }
        $tracks=explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), explode("ffmpeg.exe /", $arraycontent[$kk])[$best + sizeof(explode("ffmpeg.exe /", $arraycontent[$kk]))]);
        } else {
        $tracks=explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $arraycontent[$kk]);
        }
        $llll=1;
        for ($lll=1; $lll<sizeof($tracks); $lll++) {
          $metabit=trim(explode(str_replace('+',' ',urldecode($_POST['durationprefix'])), $tracks[$lll])[0]);
          $durationbit=explode(str_replace('+',' ',urldecode($_POST['durationprefix'])), $tracks[$lll])[1];
          $durationbit=trim(substr($durationbit,0,1) . explode(' ',explode(',',substr($durationbit,1))[0])[0]);
                    
          //if ($lefttime == "00:00:00.000") {
          //  $lefttime=str_replace('9','0',str_replace('8','0',str_replace('7','0',str_replace('6','0',str_replace('5','0',str_replace('4','0',str_replace('3','0',str_replace('2','0',str_replace('1','0', $durationbit   ))))))));
          //  $righttime=$lefttime;
          //}
          $decparts=explode('.', $lefttime);
          $durationparts=explode(str_replace('+',' ',urldecode($_POST['durationdelimiter'])), $durationbit);
          $metabits=explode(str_replace('+',' ',urldecode($_POST['metadelimiter'])), $metabit);
 $postrep.="<br><br> metabitsLength/metabit=" . sizeof($metabits) . "/" . $metabit . "<br><br>";
          for ($mmm=1; $mmm<sizeof($metabits); $mmm++) {
            if ($thisv != "") { 
            $thist=trim(str_replace("\r","",str_replace("\n","",str_replace("\r\n","",str_replace($thisv,"",$metabits[-1 + $mmm])))));
            } else {
            $thist=trim(str_replace("\r","",str_replace("\n","",str_replace("\r\n","",$metabits[-1 + $mmm]))));
            }
            $thisv=trim(str_replace("\r","",str_replace("\n","",str_replace("\r\n","",  explode("\r",explode("\n",explode("\r\n", $metabits[$mmm])[0])[0])[0]   ))));
 $postrep.="<br><br> name/value=" . $thist . "/" . $thisv . "<br><br>";
            if (trim(str_replace("encoder","",str_replace("video","",$thist))) != '' && trim($thisv) != '' && strpos($thist, ' ') === false) {
            if (substr(strtolower($thist),0,strlen($lookfor)) == $lookfor) { // is a good title
               $titlestuff=$thisv;
               if ($jsonstuff == "") {
                 $jsonstuff="{\n" . '"' . $thist . '": "' . $thisv . '"' . "\n}\n";
               } else {
                 $jsonstuff=str_replace('}', '"' . $thist . '": "' . $thisv . '"' . "\n}", str_replace("\n}",",\n}",$jsonstuff));
               }
            } else {
               if ($jsonstuff == "") {
                 $jsonstuff="{\n" . '"' . $thist . '": "' . $thisv . '"' . "\n}\n";
               } else {
                 $jsonstuff=str_replace('}', '"' . $thist . '": "' . $thisv . '"' . "\n}", str_replace("\n}",",\n}",$jsonstuff));
               }
            }
            }
          }
          if (trim($titlestuff) != "") {
          if (strpos(file_get_contents($arraytitle[$kk] . ".vtt"), $titlestuff) === false) {
          if (sizeof($durationparts) == 3) {
          $rh=($lh + $durationparts[0]);
          $rm=($lm + $durationparts[1]);
          $ls+=floatval($durationparts[2]);
          $rs=$ls;
          if ($rs >= 60.0) {  $rs-=60.0; $rm+=1; }
          if ($rm >= 60) {  $rm-=60; $rh+=1; }

            $secs='' . $rs;
            if (strlen(explode('.', $secs)[0]) == 1) { $secs='0' . $secs;  }
            if (sizeof($decparts) == 1 && strpos($secs, '.') !== false) {
              $secs=explode('.', $secs)[0];
            } else if (sizeof($decparts) == 2 && strpos($secs, '.') === false) {
              $secs.='.';
              for ($iu=0; $iu<strlen($decparts[1]); $iu++) {
                $secs.='0';
              }
            } else if (sizeof($decparts) == 2) {
              $presecs=explode('.', $secs);
              $righttime=$presecs[0] . '.';
              for ($iu=1; $iu<=strlen($decparts[1]); $iu++) {
                if ($iu > strlen($presecs[1])) {
                $righttime.='0';
                } else {
                $righttime.=substr(substr($presecs[1], (-1 + $iu)),0,1);
                }
              }
              $secs=$righttime;
            }
            $rtime=substr(('0' . $rh),-2,2) . ":" . substr(('0' . $rm),-2,2) . ":" . $secs;
            $righttime=substr(('0' . $rh),-2,2) . ":" . substr(('0' . $rm),-2,2) . ":" . $secs;


          } else if (sizeof($durationparts) == 2) {
          $rm=($lm + $durationparts[0]);
          $ls+=floatval($durationparts[1]);
          $rs=$ls;
          if ($rs >= 60.0) {  $rs-=60.0; $rm+=1; }
          if ($rm >= 60) {  $rm-=60; $rh+=1; }

            $secs='' . $rs;
            if (strlen(explode('.', $secs)[0]) == 1) { $secs='0' . $secs;  }
            if (sizeof($decparts) == 1 && strpos($secs, '.') !== false) {
              $secs=explode('.', $secs)[0];
            } else if (sizeof($decparts) == 2 && strpos($secs, '.') === false) {
              $secs.='.';
              for ($iu=0; $iu<strlen($decparts[1]); $iu++) {
                $secs.='0';
              }
            } else if (sizeof($decparts) == 2) {
              $presecs=explode('.', $secs);
              $righttime=$presecs[0] . '.';
              for ($iu=1; $iu<=strlen($decparts[1]); $iu++) {
                if ($iu > strlen($presecs[1])) {
                $righttime.='0';
                } else {
                $righttime.=substr(substr($presecs[1], (-1 + $iu)),0,1);
                }
              }
              $secs=$righttime;
            }
            $rtime='' . ($rh * 60 + $rm) . ":" . $secs;
            $righttime=substr(('0' . $rh),-2,2) . ":" . substr(('0' . $rm),-2,2) . ":" . $secs;


          } else if (sizeof($durationparts) == 1) {
          $ls+=floatval($durationparts[0]);
          $rs=$ls;
          if ($rs >= 60.0) {  $rs-=60.0; $rm+=1; }
          if ($rm >= 60) {  $rm-=60; $rh+=1; }
            $secs='' . (($rh * 60 * 60) + ($rm * 60) + $rs);
            if (sizeof($decparts) == 1 && strpos($secs, '.') !== false) {
              $secs=explode('.', $secs)[0];
            } else if (sizeof($decparts) == 2 && strpos($secs, '.') === false) {
              $secs.='.';
              for ($iu=0; $iu<strlen($decparts[1]); $iu++) {
                $secs.='0';
              }
            } else if (sizeof($decparts) == 2) {
              $presecs=explode('.', $secs);
              $righttime=$presecs[0] . '.';
              for ($iu=1; $iu<=strlen($decparts[1]); $iu++) {
                if ($iu > strlen($presecs[1])) {
                $righttime.='0';
                } else {
                $righttime.=substr(substr($presecs[1], (-1 + $iu)),0,1);
                }
              }
              $secs=$righttime;
            }
            $rtime=$secs;
            $righttime=substr(('0' . $rh),-2,2) . ":" . substr(('0' . $rm),-2,2) . ":" . $secs;
          }
          file_put_contents($arraytitle[$kk] . ".vtt", file_get_contents($arraytitle[$kk] . ".vtt") . $llll . "\n" . $lefttime . " --> " . $righttime . "\n" . $titlestuff . "\n" . $jsonstuff . "\n");
          $llll++;
        $lh=$rh;
        $lm=$rm;
        $ls=$rs;
        $lefttime=$righttime;
          }
          }
          $titlestuff="";
          $jsonstuff="";
        }
        
          if ($htmlis == "") {
            $htmlis="<html><head><title>Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing - RJM Programming - November, 2022</title></head><body>
<h1>Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing</h1>
<h3>RJM Programming <a target=_blank title=Restart href=./ffmpeg_log_to_vtt.php>-</a> November, 2022</h3>
            <details><summary style='background-color:yellow;'>Via ffmpeg (and more) log file information ...</summary><p>" . str_replace("\n","<br>",$incont) . "</p></details><br><br>
            <details><summary style='background-color:lightgreen;'>" . $arraytitle[$kk] . ".vtt</summary><p>" . str_replace("\n","<br>",file_get_contents($arraytitle[$kk] . ".vtt")) . "</p></details><br><br>
            </body></html>";
          } else {
            $htmlis=str_replace('</body>', "<details><summary style='background-color:lightgreen;'>" . $arraytitle[$kk] . ".vtt</summary><p>" . str_replace("\n","<br>",file_get_contents($arraytitle[$kk] . ".vtt")) . "</p></details><br><br></body>", $htmlis);
          }
          
      }
      
      if (strpos($_SERVER['SERVER_NAME'], 'rjmprogramming.com.au') !== false) {   
        if (file_exists($arraytitle[$kk] . ".vtt")) {
          unlink($arraytitle[$kk] . ".vtt");
        }   
      }
      
    }
    
    $rep .= "</p>";
    $postrep="";
    $rep="";
    echo $postrep . $rep . $htmlis;
    exit;
  }
?>
<html>
<head>
<title>Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing</title>
<script type='text/javascript'>

</script>
</head>
<body onload="if (document.URL.indexOf('?submit=') != -1) { document.getElementById('mysub').click();  }">
<h1>Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing</h1>
<h3>RJM Programming - November, 2022</h3>
<form id=myform onsubmit=" var ins=document.getElementsByTagName('textarea'); if (document.getElementById(ins[0].id).value == '') { document.getElementById(ins[0].id).value=('' + document.getElementById(ins[0].id).placeholder); }   ins=document.getElementsByTagName('input'); for (var ii=0; ii<ins.length; ii++) { if (document.getElementById(ins[ii].id).value == '' && document.getElementById(ins[ii].id).type == 'text') { document.getElementById(ins[ii].id).value=('' + document.getElementById(ins[ii].id).placeholder); } } return true;" action=./ffmpeg_log_to_vtt.php method=POST>
<textarea name=infile id=infile title='Or paste in your ffmpeg log file data' placeholder='all_bar_thecommute.txt' value='' style="background-color:yellow;"></textarea><br><br>
<table border=2 cellpadding=10 cellspacing=10>
<tr><th>Output Basename Prefixing Delimiter</th><th>Output Basename Suffixing Delimiter</th></tr>
<tr><td><input name=inbasenameprefix id=inbasenameprefix type=text placeholder='user@Users-Air' value=''></input></td><td><input name=inbasenamesuffix id=inbasenamesuffix type=text placeholder='% cd' value=''></input></td></tr>
</table>
<table border=2 cellpadding=10 cellspacing=10>
<tr><th>Metadata Prefixing String</th><th>Metadata Name Value Delimiter</th><th>Metadata Title Value Case Insensitive Start String</th></tr>
<tr><td><input name=metaprefix id=metaprefix type=text placeholder='Metadata:' value=''></input></td><td><input name=metadelimiter id=metadelimiter type=text placeholder=':' value=''></input></td><td><input name=metatitleprefix id=metatitleprefix type=text placeholder='tit' value=''></input></td></tr>
</table>
<table border=2 cellpadding=10 cellspacing=10>
<tr><th>Duration Prefixing String</th><th>Duration Time Part Delimiter</th></tr>
<tr><td><input name=durationprefix id=durationprefix type=text placeholder='Duration:' value=''></input></td><td><input name=durationdelimiter id=durationdelimiter type=text placeholder=':' value=''></input></td></tr>
</table>
<br><br><br>
<input id=mysub type=submit value="Create VTTs" style="background-color:lightgreen;"></input>
</form>
</body>
</html>
