fix : ffmpeg_slice_media 根据seek_head处理切割点时间为相对时间
This commit is contained in:
parent
40e0089308
commit
2551702443
|
|
@ -448,6 +448,7 @@ class VideoUtils:
|
||||||
|
|
||||||
if not is_streams:
|
if not is_streams:
|
||||||
ffmpeg_cmd.input(media_path)
|
ffmpeg_cmd.input(media_path)
|
||||||
|
seek_head = 0
|
||||||
else:
|
else:
|
||||||
seek_head = media_markers[0].start.total_seconds()
|
seek_head = media_markers[0].start.total_seconds()
|
||||||
seek_tail = media_markers[-1].end.total_seconds()
|
seek_tail = media_markers[-1].end.total_seconds()
|
||||||
|
|
@ -462,7 +463,7 @@ class VideoUtils:
|
||||||
segment.end = segment.end - timedelta(seconds=seek_head)
|
segment.end = segment.end - timedelta(seconds=seek_head)
|
||||||
logger.info(f"Only using {seek_head}s --> {seek_tail}s = {duration}s")
|
logger.info(f"Only using {seek_head}s --> {seek_tail}s = {duration}s")
|
||||||
ffmpeg_cmd.input(local_m3u8_path,
|
ffmpeg_cmd.input(local_m3u8_path,
|
||||||
ss=seek_head,
|
# ss=seek_head,
|
||||||
t=duration,
|
t=duration,
|
||||||
protocol_whitelist="file,http,https,tcp,tls")
|
protocol_whitelist="file,http,https,tcp,tls")
|
||||||
# reconnect="1", # 自动重连
|
# reconnect="1", # 自动重连
|
||||||
|
|
@ -477,19 +478,22 @@ class VideoUtils:
|
||||||
|
|
||||||
metadata = VideoUtils.ffprobe_media_metadata(media_path)
|
metadata = VideoUtils.ffprobe_media_metadata(media_path)
|
||||||
for index, marker in enumerate(media_markers):
|
for index, marker in enumerate(media_markers):
|
||||||
|
start = marker.start.total_seconds() - seek_head
|
||||||
|
end = marker.end.total_seconds() - seek_head
|
||||||
|
|
||||||
# 处理指定的输出分辨率
|
# 处理指定的输出分辨率
|
||||||
if options.width and options.height:
|
if options.width and options.height:
|
||||||
filter_complex.extend(
|
filter_complex.extend(
|
||||||
[
|
[
|
||||||
f"[v:0]trim=start={marker.start.total_seconds()}:end={marker.end.total_seconds()},scale={options.width}:{options.height},setpts=PTS-STARTPTS[cut{index}]",
|
f"[v:0]trim=start={start}:end={end},scale={options.width}:{options.height},setpts=PTS-STARTPTS[cut{index}]",
|
||||||
f"[a:0]atrim=start={marker.start.total_seconds()}:end={marker.end.total_seconds()},asetpts=PTS-STARTPTS[acut{index}]",
|
f"[a:0]atrim=start={start}:end={end},asetpts=PTS-STARTPTS[acut{index}]",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
filter_complex.extend(
|
filter_complex.extend(
|
||||||
[
|
[
|
||||||
f"[v:0]trim=start={marker.start.total_seconds()}:end={marker.end.total_seconds()},setpts=PTS-STARTPTS[cut{index}]",
|
f"[v:0]trim=start={start}:end={end},setpts=PTS-STARTPTS[cut{index}]",
|
||||||
f"[a:0]atrim=start={marker.start.total_seconds()}:end={marker.end.total_seconds()},asetpts=PTS-STARTPTS[acut{index}]",
|
f"[a:0]atrim=start={start}:end={end},asetpts=PTS-STARTPTS[acut{index}]",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
ffmpeg_cmd.option('filter_complex', ';'.join(filter_complex))
|
ffmpeg_cmd.option('filter_complex', ';'.join(filter_complex))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue