J'ai ce que je soupçonne d'être un problème de logique avec un algorithme que j'utilise pour travailler avec le timecode vidéo en PHP. Toute aide est appréciée.Erreur de calcul du code temporel de l'allumeur PHP + Code
L'objectif
Eh bien, fondamentalement, je veux travailler avec timecode et effectuer des calculs
Pour ceux qui ne connaissent timecode il ressemble à ce
01:10:58: 12 ou HH: MM: SS: FF 'AKA' HEURES: MINUTES: SECONDES: CADRES
J'ai utilisé le script de HERE pour m'aider à travailler avec ce format.
Le problème
Maintenant, je peux dire simplement que ce script fonctionne !!! Les calculs de timecode (dans ce cas, les ajouts) sont effectués correctement. Cependant ce script jette sans cesse les erreurs suivantes, mais produit encore la sortie correcte quand je tente de faire le calcul suivant
00: 01: 26: 00 + 00: 02: 00: 12
les erreurs de ce calcul sont présentés ci-dessous
Une erreur PHP a été rencontré
gravité: Avis
Message: Undefined index: clé
Nom du fichier: personnel/tools.php
Numéro de ligne: 169
Une erreur PHP a été rencontré
Gravité: Avis
Message: Indéfini index: clé
Nom de fichier: staff/tools.php
Numéro de ligne: 169
Numéro de ligne 169 est dans la parseInput() fonction
// feed it into the tc array
$i=0;
foreach ($tc AS $key=>$value) {
if (is_numeric($array["$i"])) {
$tc["$key"]= $array["$i"];
if ($tc["$key"] < 10 && $tc["$key"] > 0 && strlen($tc['key'])==1) $tc["$key"]= "0".$tc["$key"];
}
$i++;
}
return $tc;
Maintenant, je dois aussi mentionner que le nombre de fois l'erreur ci-dessus est jeté dépend sur ce que je calcule
00: 00: 00: 00 + 00: 00: 00: 00
renvoie aucune erreur.
01: 01: 01: 01 + 02: 02: 02: 02
produit 8 des erreurs ci-dessus.
À titre de référence, voici le code dans son intégralité
function add_cue_sheet_clips_process()
{
$sheetID = $_POST['sheet_id'];
$clipName = $_POST['clip_name'];
$tcIn = $_POST['tc_in'];
$tcOut = $_POST['tc_out'];
// string $input
// returns an associative array of hours, minutes, seconds, and frames
//
function parseInput ($input) {
// timecode should look something like hh:mm:ss;ff
// allowed separators are : ; . ,
// values may be single or double digits
// hours are least-significant -- 5.4 == 00:00:05;04
$tc= array("frames"=>"00", "seconds"=>"00", "minutes"=>"00", "hours"=>"00");
$punct= array(":", ";", ".", ",");
// too big? too small?
$input= trim($input);
if (strlen($input)>11 || $input=="") {
// invalid input, too long -- bzzt
return $tc;
}
// normalize punctuation
$input= str_replace($punct, ":", $input);
// blow it up and reverse it so frames come first
$array= explode(":", $input);
$array= array_reverse($array);
// feed it into the tc array
$i=0;
foreach ($tc AS $key=>$value) {
if (is_numeric($array["$i"])) {
$tc["$key"]= $array["$i"];
if ($tc["$key"] < 10 && $tc["$key"] > 0 && strlen($tc['key'])==1) $tc["$key"]= "0".$tc["$key"];
}
$i++;
}
return $tc;
}
// array $tc
// returns a float number of seconds
//
function tcToSec($tc) {
$wholeseconds= ($tc['hours']*3600) + ($tc['minutes'] * 60) + ($tc['seconds']);
$partseconds= ($tc['frames']/25);
$seconds= $wholeseconds + $partseconds;
return $seconds;
}
// float $seconds
// bool $subtract
// returns a timecode array
//
function secToTc ($seconds=0, $subtract=0) {
$tc= array("frames"=>"00", "seconds"=>"00", "minutes"=>"00", "hours"=>"00");
$partseconds= fmod($seconds, 1);
$wholeseconds= $seconds - $partseconds;
// frames
if ($subtract==1) $tc['frames']= floor($partseconds * 25);
else $tc['frames']= floor($partseconds * 25);
// hours
$tc['hours']= floor($wholeseconds/3600);
$minsec= ($wholeseconds - ($tc['hours'] * 3600));
// minutes
$tc['minutes']= floor($minsec/60);
// seconds
$tc['seconds']= ($minsec - ($tc['minutes'] * 60));
// padding
foreach ($tc AS $key=>$value) {
if ($value > 0 && $value < 10) $tc["$key"]= "0".$value;
if ($value=="0") $tc["$key"]= "00";
}
return $tc;
}
// array $tc
// returns string of well-formed timecode
//
function tcToString (&$tc) {
return $tc['hours'].":".$tc['minutes'].":".$tc['seconds'].";".$tc['frames'];
}
$timecodeIN = parseInput($tcIn);
$timecodeOUT = parseInput($tcOut);
// normalized inputs...
$tc1 = tcToString($timecodeIN);
$tc2 = tcToString($timecodeOUT);
// get seconds
$seconds1 = tcToSec($timecodeIN);
$seconds2 = tcToSec($timecodeOUT);
$result = $seconds1 + $seconds2;
$timecode3 = secToTc($result, 0);
$timecodeDUR = tcToString($timecode3);
$clipArray = array('clip_name' => $clipName, 'tc_in' => $tcIn, 'tc_out' => $tcOut, 'tc_duration' => $timecodeDUR);
$this->db->insert('tools_cue_sheets_clips', $clipArray);
redirect('staff/tools/add_cue_sheet_clips/'.$sheetID);
}
J'espère que cette information est assez pour quelqu'un pour me aider au-dessus de cela, je serais extrêmement reconnaissant .
Merci,
Tim
Merci beaucoup :) – Tim