adobe - pro - ¿Cómo convertir un archivo F4F a MP4?
titles pack premiere pro templates (3)
Finalmente encontramos un método simple para fusionar y convertir archivos .f4f -> .flv , en el que solo el cuadro ''mdat'' es útil. Aquí está el código php:
<?php
function ReadInt24($str, $pos)
{
return intval(bin2hex(substr($str, $pos, 3)), 16);
}
function ReadInt32($str, $pos)
{
return unpack("N", substr($str, $pos, 4))[1];
}
echo "/nKSV Adobe HDS Downloader/n/n";
$flvHeader = hex2bin("464c5601050000000900000000");
$firstVideoPacket = true;
$prevTagSize = 4;
$fragCount = 0;
isset($argv[1]) ? $baseFilename = $argv[1] : $baseFilename = "";
$baseFilename ? $outputFile = "$baseFilename.flv" : $outputFile = "Joined.flv";
while (true)
{
if (file_exists("$baseFilename" . $fragCount + 1 . ".f4f"))
$fragCount++;
else
break;
}
echo "Found $fragCount fragments/n";
$flv = fopen("$outputFile", "wb");
fwrite($flv, $flvHeader, 13);
for ($i = 1; $i <= $fragCount; $i++)
{
$frag = file_get_contents("$baseFilename$i.f4f");
preg_match(''/(.{4})mdat[/x08/x09/x12]/i'', $frag, $mdat, PREG_OFFSET_CAPTURE);
$fragLen = ReadInt32($mdat[1][0], 0) - 8;
$frag = substr($frag, $mdat[1][1] + 8, $fragLen);
$pos = 0;
while ($pos < $fragLen)
{
$packetType = $frag[$pos];
$packetSize = ReadInt24($frag, $pos + 1);
$packetTS = ReadInt24($frag, $pos + 4);
$totalTagLen = 11 + $packetSize + $prevTagSize;
if (($packetType == "/x08" && $packetSize > 4) or ($packetType == "/x09" && $packetSize > 40) or ($packetType == "/x09" && $firstVideoPacket))
{
if ($packetType == "/x09" && $firstVideoPacket)
$firstVideoPacket = false;
fwrite($flv, substr($frag, $pos, $totalTagLen), $totalTagLen);
}
$pos += $totalTagLen;
}
}
fclose($flv);
echo "Finished/n";
?>
Sabemos que F4F es el formato de archivo MP4 fragmentado de Adobe para HTTP Dynamic Streaming . Una herramienta llamada F4F Packager podría convertir un archivo F4V en varios archivos F4F y un archivo de manifiesto (F4M).
Mi pregunta es, ¿cómo convertir esos archivos F4F a un archivo F4V o MP4?
Una respuesta más completa está disponible aquí: https://github.com/K-S-V/Scripts/blob/master/AdobeHDS.php .
Las cosas serias pasan alrededor de la línea 1046 . Este script maneja más casos que la respuesta superior actual. No publicaré el script completo aquí ya que es un poco largo.
Por desgracia, también es un script PHP, aunque es posible que deba volver a escribir esto en Java en un par de semanas. Si es así, publicaré un enlace a la reescritura de Java cuando haya terminado.
livestreamer y youtube-dl son compatibles con streams HDS. Aquí hay un ejemplo de livestreamer:
$ livestreamer -O ''hds://radio_chym-lh.akamaihd.net/z/KIT967_1@183249/manifest.f4m'' 48k >out.m4a
Esta es una estación de radio por internet. Para el video, solo se necesita un cambio en 48k
y la extensión de archivo de out.m4a
.