86 lines
2.6 KiB
PHP
86 lines
2.6 KiB
PHP
<?php
|
|
|
|
require_once __DIR__ . "/vendor/autoload.php";
|
|
|
|
const SWFMILL_BINARY = "swfmill";
|
|
const TWIP_SIZE = 20;
|
|
const ADVANCED_MOTION_INTERPOLATION = true;
|
|
|
|
ob_start();
|
|
passthru(escapeshellarg(SWFMILL_BINARY) . " swf2xml " . escapeshellarg($argv[1]) . " stdout");
|
|
$contents = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
$swf = new \DOMDocument();
|
|
$swf->loadXML($contents);
|
|
|
|
$soundStream = "";
|
|
|
|
$fp = fopen($argv[2], "w+");
|
|
|
|
|
|
|
|
$headerTag = $swf->getElementsByTagName("Header")->item(0);
|
|
if ($headerTag instanceof DOMElement) {
|
|
$processor = new \swf2ass\SWFProcessor($headerTag);
|
|
$assRenderer = new \swf2ass\ass\ASSRenderer($processor->getFrameRate(), $processor->getViewPort());
|
|
|
|
$keyFrameInterval = 10 * $processor->getFrameRate(); //kf every 10 seconds
|
|
$frameOffset = 0;
|
|
while(($frame = $processor->nextFrameOutput()) !== null){
|
|
$audio = $processor->getAudio();
|
|
if($audio !== null and $frameOffset === 0){
|
|
if($audio->start === null){
|
|
continue;
|
|
}
|
|
$frameOffset = $audio->start;
|
|
}
|
|
|
|
$frame->setFrameOffset($frameOffset);
|
|
|
|
$rendered = $frame->getFrame()->render(0, [], \swf2ass\ColorTransform::identity(), \swf2ass\MatrixTransform::identity());
|
|
$drawCalls = 0;
|
|
$drawItems = 0;
|
|
$clipCalls = 0;
|
|
$clipItems = 0;
|
|
foreach ($rendered->getObjects() as $object){
|
|
if($object->clip !== null){
|
|
++$clipCalls;
|
|
$clipItems += count($object->clip->edges);
|
|
}
|
|
foreach ($object->drawPathList->commands as $path){
|
|
++$drawCalls;
|
|
$drawItems += count($path->commands->edges);
|
|
}
|
|
}
|
|
echo "=== frame ".$frame->getFrameNumber()." ~ $frameOffset : Depth count: " . count($frame->getFrame()->getDepthMap()) . " :: Object count: " . count($rendered->getObjects()) ." :: Paths: $drawCalls draw calls, $drawItems items :: Clips: $clipCalls draw calls, $clipItems items" . PHP_EOL;
|
|
|
|
foreach ($assRenderer->renderFrame($frame, $rendered) as $line){
|
|
fwrite($fp, $line . "\n");
|
|
}
|
|
|
|
if($frame->getFrameNumber() > 0 and $frame->getFrameNumber() % $keyFrameInterval === 0){
|
|
foreach ($assRenderer->flush() as $line){
|
|
fwrite($fp, $line . "\n");
|
|
}
|
|
}
|
|
|
|
}
|
|
foreach ($assRenderer->flush() as $line){
|
|
fwrite($fp, $line . "\n");
|
|
}
|
|
|
|
/*foreach (\swf2ass\Utils::processSWF($headerTag, $soundStream) as $line) {
|
|
fwrite($fp, $line);
|
|
};*/
|
|
}
|
|
|
|
/*
|
|
if($soundStream !== ""){
|
|
file_put_contents($argv[2] . ".mp3", $soundStream);
|
|
}*/
|
|
|
|
fclose($fp);
|
|
|
|
|