Last active
February 5, 2024 23:01
-
-
Save Behinder/af3a7ee8bbc4224e31a3a0fc45fcef46 to your computer and use it in GitHub Desktop.
Cut commercials from Channels DVR recording
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function czyLokalnaEdycja($id) | |
{ | |
$json=file_get_contents("http://localhost:8089/dvr/files/".$id."/comskip/status"); | |
$obj = json_decode($json,true); | |
return $obj["HasLocalComskipResults"]; | |
} | |
// Główne zmienne | |
$id = $argv[1]; | |
$channelsfolder = "/Volumes/T7/ChannelsDVR/"; | |
$docelowyfolder = "/Volumes/T7/ChannelsDVR/Przetworzone"; | |
$comskiplog = "/Volumes/T7/ChannelsDVR/Logs/comskip/".$id; | |
$pliklogu = $comskiplog . "/video.ffsplit"; | |
$apiurl = "http://localhost:8089/dvr/files/".$id; | |
//pobieramy curlem JSON | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_URL, $apiurl); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //to musi byc inaczej nam zwroci 1 | |
$costam = curl_exec($ch); | |
//Dekodowanie JSONa | |
$zdekodowany = json_decode($costam,true); | |
$sciezka = $zdekodowany["Path"]; | |
$sciezkadopliku = $channelsfolder . $sciezka; | |
$tablicakomend=[]; | |
$poczatekkomendy = 'ffmpeg6 -i "'.$sciezkadopliku.'" '; | |
if (czyLokalnaEdycja($id) == 0) { | |
// procedura jeśli nie było lokalnej edycji reklam | |
foreach (file($pliklogu) as $linia) { | |
$linia = str_replace("-c copy", "-c:v h264", $linia); | |
$komenda = $poczatekkomendy . $linia; | |
array_push($tablicakomend, $komenda); | |
} | |
$tworzkomendeconcat = 'for s in segment*.ts ;do echo "file ${s}" >> concat.txt ; done'; | |
$komendascal ="ffmpeg6 -f concat -i concat.txt -c copy output.mp4"; | |
array_push($tablicakomend,$tworzkomendeconcat); | |
array_push($tablicakomend,$komendascal); | |
//zmiana nazwy pliku | |
$nazwapliku = basename($sciezka,".mpg"); | |
array_push($tablicakomend,'mv output.mp4 "'.$nazwapliku.'.mp4"'); | |
array_push($tablicakomend,"rm segment*.ts && rm concat.txt"); | |
echo "Wykonujemy komendy \n"; | |
foreach ($tablicakomend as $polecenie) { | |
shell_exec($polecenie); | |
} | |
} else { | |
$nrsegmentu=0; | |
echo "Wycinanie reklam wg. ręcznego zaznaczenia \n"; | |
$json = file_get_contents("http://localhost:8089/dvr/files/".$id."/comskip/info?source=local&apply_edits=true%22"); | |
$obj = json_decode($json,true); | |
$bloki = $obj["Blocks"]; //tablica elementów | |
$czaspoczatkowy=0; | |
$czaskoncowy = $obj["Run"]["Duration"]*60; | |
$poczateksegmentu = 1; | |
// warunek sprawdzający czy pierwszy blok to reklama | |
// jesli tak to poczatekreklam = 0 żeby pierwsza linia nie byla wtedy dodawana | |
// | |
if ($bloki[0]["IsCommercial"] == 1) { | |
$poczatekreklam =0; | |
} else { | |
$poczatekreklam = 1; | |
} | |
foreach ($bloki as $kafelek) { | |
$nrsegmentustring=str_pad($nrsegmentu, 3,"0",STR_PAD_LEFT); | |
// sprawdzamy każdy kafelek osobno | |
if ($kafelek["IsCommercial"] ==false) { | |
$poczatekreklam = 1; | |
//fragment programu | |
if ($poczateksegmentu == 1) { | |
$czaspoczatkowy = $kafelek["TimeStart"]; | |
$czaskoncowy = $kafelek["TimeEnd"]; | |
} else { | |
$czaskoncowy = $kafelek["TimeEnd"]; | |
} | |
$poczateksegmentu = 0; | |
} else { | |
//znaleziono reklame -- kolejny segment bedzie znowu 1 | |
$poczateksegmentu = 1; | |
// generujemy komendę którą wpiszemy do tablicy | |
if ($poczatekreklam == 1) { | |
$linia = '-c:v h264 -c:a aac -ss '.$czaspoczatkowy.' -to '.$czaskoncowy . ' segment'.$nrsegmentustring.'.ts'; | |
$nrsegmentu=$nrsegmentu + 1; | |
// generujemy komendę | |
$komenda = $poczatekkomendy . $linia ; | |
//zapisujemy komendę do tablicy | |
array_push($tablicakomend,$komenda); | |
$poczatekreklam = 0; | |
} | |
} | |
} // koniec for-each | |
$tworzkomendeconcat = 'for s in segment*.ts ;do echo "file ${s}" >> concat.txt ; done'; | |
$komendascal ="ffmpeg6 -f concat -i concat.txt -c copy output.mp4"; | |
array_push($tablicakomend,$tworzkomendeconcat); | |
array_push($tablicakomend,$komendascal); | |
//zmiana nazwy pliku | |
$nazwapliku = basename($sciezka,".mpg"); | |
array_push($tablicakomend,'mv output.mp4 "'.$nazwapliku.'.mp4"'); | |
array_push($tablicakomend,"rm segment*.ts && rm concat.txt"); | |
print_r($tablicakomend); | |
echo "Wykonujemy komendy \n"; | |
foreach ($tablicakomend as $polecenie) { | |
shell_exec($polecenie); | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment