ffmpeg从mp4生成m3u8(恢复选项)

时间:2014-08-19 14:01:25

标签: multithreading video ffmpeg m3u8

我有一个mp4文件或其他文件(非mp4格式),我需要生成ts文件和m3u8播放列表。

我正在使用此命令并且工作正常:

  

ffmpeg -i foo.mp4 -codec copy -vbsf h264_mp4toannexb -map 0 -f segment   -segment_list out.m3u8 -segment_time 10 out%03d.ts

现在我需要同时生成多个ts,所以我需要一个“恢复选项”。

请参阅以下示例:

一个线程(前20秒(0-20))

  

ffmpeg -i foo.mp4 -codec copy -vbsf h264_mp4toannexb -map 0 -f segment   -segment_list out.m3u8 -segment_time 10 out%03d.ts

秒数线程(20秒到40秒)

  

ffmpeg -i foo.mp4 ......

第三个线程(40秒到60秒)

  

ffmpeg -i foo.mp4 ......

我有很多核心处理器来完成这项工作。

在简历中,我需要以最快的方式生成.ts文件和m3u8

我需要帮助或建议解决我的问题。

概念证明我构建了一个使用-ss和-t选项的litle脚本:

<?php

 //generate all the commands using -ss and -t <seconds> 
 $startTime = new DateTime("00:00:00");
 for ($i=1; $i < 20; $i++) {
    $data = $startTime->format('H:i:s');
    $exec = 'ffmpeg  -i "<FILE>" -ss '.$data.' -t 10 -c:v copy -bsf h264_mp4toannexb -flags -global_header -map 0 -f segment -segment_time 10 -segment_start_number '.$i.' -segment_list '.sprintf("%04d", $i).'_test.m3u8 -segment_format mpegts '.$i.'stream%05d.ts';
    shell_exec($exec);
    $startTime->modify('+10 seconds');
    echo "\n";
}

//cycle all m3u8 and creates a master hls playlist
$files = glob('*.{m3u8}', GLOB_BRACE);
sort($files);
$ret = "#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
";
foreach($files as $file) {
    $ret .= shell_exec('sed -n -e 6,7p '. $file);
}
$ret .= "#EXT-X-ENDLIST";

file_put_contents('final.m3u8', $ret);

?>

由于

0 个答案:

没有答案