我正在寻找基于带宽创建一个指向其他m3u8文件的m3u8文件,类似这样
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:4
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000,RESOLUTION=480x270
480x270.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,RESOLUTION=640x360
640x360.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2000000,RESOLUTION=1280x720
1280x720.m3u8
#EXT-X-ENDLIST
我希望能够使用ffmpeg做到这一点,但我似乎找不到任何关于这样做的信息。这可能是错误的方式,所以如果有人能指出我正确的方向,将非常感激。
答案 0 :(得分:3)
2018年1月更新
您现在可以使用var_stream_map
和-g <size> -sc_threshold 0
直接使用FFmpeg创建主播放列表。请参阅documentation。
您无法直接使用FFmpeg(尚未)创建HLS主播放列表。您可以为多个比特率编码相同的来源并获取每个变体播放列表,但您必须自己提供主数据。
当然,生成的流必须对齐,所以你要么:
使用固定的GOP尺寸(--keyint <size> --min-keyint <size> --scenecut -1
,x264 @if (@CodeSection == @Batch) @then
@ECHO off
setlocal enabledelayedexpansion
rem // invoke JScript chimera to get the YYYYMMDD of the previous work day
for /f %%I in ('cscript /nologo /e:JScript "%~f0"') do set "prevbusday=%%I"
echo %prevbusday%
pause
type NUL > test.msl
For /L %%G IN (3,1,9) DO (
For /L %%H IN (0,1,59) DO (
set "h=0%%H"
type NUL > test.msl
ECHO %prevbusday%0%%G!h:~-2!
set "id=%prevbusday%0%%G!h:~-2!"
(echo OPENVIEW SERVERID 'Mobius Server ' REPORTID 'TestReports ' VERSIONID ' !id! 'SECTIONID ' 0000-000 Name of Report' PAGE 1)>> test.msl
(echo EXPORT ASCII FILE 'C:\New folder\check.rpt' CURSEC GROUP '')>> test.msl
(echo CLOSE) >> test.msl
PING 1.1.1.1 -w 1000 -n 1
Start test.msl
PING 1.1.1.1 -w 1000 -n 1
start passwordinjector.vbs
PING 1.1.1.1 -w 500 -n 1
IF EXIST "C:\New folder\check.rpt" (
echo It exists!
taskkill /IM MAINRDW.exe /f >nul 2>&1
PING 1.1.1.1 -w 1000 -n 1
Start Trial.msl
PING 1.1.1.1 -w 1000 -n 1
start passwordinjector.vbs
PING 1.1.1.1 -w 3000 -n 1
Del "C:\Desktop\New folder\check.rpt"
exit
) ELSE (
echo It doesn't exist :(
PING 1.1.1.1 -w 500 -n 1
taskkill /IM MAINRDW.exe /f >nul 2>&1
)
)
)
pause
goto :EOF
@end // end batch / begin JScript chimera
var day = 1000 * 60 * 60 * 24,
yesterday = new Date().getDay() - 1,
prevbusday = new Date(!yesterday?new Date()-day*3:(yesterday<0?new Date()- day*2:new Date()-day)),
y = [
prevbusday.getFullYear(),
('0' + (prevbusday.getMonth() + 1)).match(/\d\d$/)[0],
('0' + prevbusday.getDate()).match(/\d\d$/)[0]
]
WSH.Echo(y.join(''));
)
如果适用,请每隔一次传递2-pass encoding using the same first pass statfile。如果您在所需比特率的中间使用生成stat文件进行再现,则效果会更好,因为会有一些精度损失。