在我的應用程式中,我使用 FFmpeg 將視頻打包為 HLS 格式的 Web 交付。在開發程序中,我撰寫了以下 for 回圈以創建 master.m3u8 播放串列。基本上,這作業正常,除了我目前不明白的一件事。如果我有多個視頻作業,如何使這項作業完全相同。意思是,我在 [0] 位置有一份作業,在 [1] 有第二份作業?
for agroup_name, agroup in a_groups.items():
streaminf = f'#EXT-X-STREAM-INF:BANDWIDTH={int(job["config"]["output_options"]["stream_bandwidth_multiplier"] * (job["video"][0]["bitrate"] max(audio["bitrate"] for audio in agroup)))}'
streaminf = f',RESOLUTION={str(job["video"][0]["width"])}x{str(job["video"][0]["height"])}'
streaminf = f',CODECS="{",".join([job["video"][0]["hls"]["codec"], *set(map(lambda x: x["hls"]["codec"], agroup))])}"'
streaminf = f',AUDIO="{agroup_name}"'
if has_subtitles:
# We expect only one subtitle group -> Will always be [0]
subtitle_group_name = list(s_groups.values())[0][0]
streaminf = f',SUBTITLES="{build_groupname(subtitle_group_name["hls"]["group_id"][0], "subtitle")}"'
write_file_newlines(file, [
streaminf,
build_name(job["video"][0]) "/master.m3u8",
""
])
目前,輸出如下所示:
#EXT-X-STREAM-INF:BANDWIDTH=12238336,RESOLUTION=3840x1606,CODECS="avc1.640033,ac-3",AUDIO="a-0",SUBTITLES="s-0"
v-h264/master.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=11815936,RESOLUTION=3840x1606,CODECS="avc1.640033,mp4a.40.2",AUDIO="a-1",SUBTITLES="s-0"
v-h264/master.m3u8
但最終它必須看起來像這樣。所有這些資訊都包含在視頻作業元素中:
#EXT-X-STREAM-INF:BANDWIDTH=12238336,RESOLUTION=3840x1606,CODECS="avc1.640033,ac-3",AUDIO="a-0",SUBTITLES="s-0"
v-h264/master.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=11815936,RESOLUTION=3840x1606,CODECS="avc1.640033,mp4a.40.2",AUDIO="a-1",SUBTITLES="s-0"
v-h264/master.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=15238336,RESOLUTION=3840x1606,CODECS="hev1.1.6.L93.B0,ac-3",AUDIO="a-0",SUBTITLES="s-0"
v-hevc/master.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=14815936,RESOLUTION=3840x1606,CODECS="hev1.1.6.L93.B0,mp4a.40.2",AUDIO="a-1",SUBTITLES="s-0"
v-hevc/master.m3u8
所以我不知何故需要回圈作業,但這個總數讓我很痛苦^^
提前致謝
uj5u.com熱心網友回復:
如果position [0]手段job["video"][0]和position [1]手段,job["video"][1]那么你應該使用外for回圈for item in job['video']:和稍后使用item,而不是job["video"][0]
像這樣的東西:
for item in job['video']:
for agroup_name, agroup in a_groups.items():
streaminf = f'#EXT-X-STREAM-INF:BANDWIDTH={int(job["config"]["output_options"]["stream_bandwidth_multiplier"] * (item["bitrate"] max(audio["bitrate"] for audio in agroup)))}'
streaminf = f',RESOLUTION={item["width"]}x{item["height"]}'
streaminf = f',CODECS="{",".join([item["hls"]["codec"], *set(map(lambda x: x["hls"]["codec"], agroup))])}"'
streaminf = f',AUDIO="{agroup_name}"'
if has_subtitles:
# We expect only one subtitle group -> Will always be [0]
subtitle_group_name = list(s_groups.values())[0][0]
streaminf = f',SUBTITLES="{build_groupname(subtitle_group_name["hls"]["group_id"][0], "subtitle")}"'
write_file_newlines(file, [
streaminf,
build_name(item) "/master.m3u8",
""
])
如果您[0]與其他變數一起使用,那么您可能需要for i in range(len(job['video'])): 并稍后使用[i]injob['video'][i]和other_variable[i]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/478307.html
上一篇:僅使用for回圈計算行距離矩陣
