#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="

"; $inbases=explode(str_replace('+',' ',urldecode($_POST['inbasenameprefix'])), $incont); for ($ii=0; $ii"; if (sizeof($inbases) > (1 + ii)) { if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) { $rep.="
*" . $ii . "*
"; $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]) . "
"; if (sizeof($inbases) > (1 + ii)) { if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) { $rep.="
!" . $ii . "!
"; $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"; if (sizeof($inbases) > (1 + ii)) { if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) { $rep.="
^" . $ii . "^
"; $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]) . "
"; if (sizeof($inbases) > (1 + ii)) { if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) { $rep.="
|" . $ii . "|
"; $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]) . "
"; if (sizeof($inbases) > (1 + ii)) { if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) { $rep.="
!" . $ii . "!
"; $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]) . "
"; if (sizeof($inbases) > (1 + ii)) { if (sizeof(explode(str_replace('+',' ',urldecode($_POST['metaprefix'])), $inbases[1 + $ii])) > 1) { $rep.="
@" . $ii . "@
"; $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 . "



"; $rep=""; for ($kk=0; $kk
"; 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.="

Content: ---- " . $arraycontent[$kk] . "

"; $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
"; for ($mmm=1; $mmm
"; 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($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($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($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="Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing - RJM Programming - November, 2022

Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing

RJM Programming - November, 2022

Via ffmpeg (and more) log file information ...

" . str_replace("\n","
",$incont) . "



" . $arraytitle[$kk] . ".vtt

" . str_replace("\n","
",file_get_contents($arraytitle[$kk] . ".vtt")) . "



"; } else { $htmlis=str_replace('', "
" . $arraytitle[$kk] . ".vtt

" . str_replace("\n","
",file_get_contents($arraytitle[$kk] . ".vtt")) . "



", $htmlis); } } if (strpos($_SERVER['SERVER_NAME'], 'rjmprogramming.com.au') !== false) { if (file_exists($arraytitle[$kk] . ".vtt")) { unlink($arraytitle[$kk] . ".vtt"); } } } $rep .= "

"; $postrep=""; $rep=""; echo $postrep . $rep . $htmlis; exit; } ?> Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing

Take ffmpeg logs and extract a decent vtt file for audio/video track element cue processsing

RJM Programming - November, 2022



Output Basename Prefixing DelimiterOutput Basename Suffixing Delimiter
Metadata Prefixing StringMetadata Name Value DelimiterMetadata Title Value Case Insensitive Start String
Duration Prefixing StringDuration Time Part Delimiter