diff --git a/automation/vapoursynth/aegisub_vs.py b/automation/vapoursynth/aegisub_vs.py index c05e37d26b..65449a42bd 100644 --- a/automation/vapoursynth/aegisub_vs.py +++ b/automation/vapoursynth/aegisub_vs.py @@ -123,6 +123,7 @@ def make_keyframes_filename(filename: str) -> str: lwindex_re1 = re.compile(r"Index=(?P-?[0-9]+),POS=(?P-?[0-9]+),PTS=(?P-?[0-9]+),DTS=(?P-?[0-9]+),EDI=(?P-?[0-9]+)") lwindex_re2 = re.compile(r"Key=(?P-?[0-9]+),Pic=(?P-?[0-9]+),POC=(?P-?[0-9]+),Repeat=(?P-?[0-9]+),Field=(?P-?[0-9]+)") streaminfo_re = re.compile(r"Codec=(?P[0-9]+),TimeBase=(?P[0-9\/]+),Width=(?P[0-9]+),Height=(?P[0-9]+),Format=(?P[0-9a-zA-Z]+),ColorSpace=(?P[0-9]+)") +videoindex_re = re.compile(r"(?P[0-9+]+)") class LWIndexFrame: pts: int @@ -152,13 +153,19 @@ def info_from_lwindex(indexfile: str) -> Dict[str, List[int]]: with open(indexfile, encoding="latin1") as f: index = f.read().splitlines() + videoindex_str = next(l for l in index if l.startswith("")) + videoindex_match = videoindex_re.match(videoindex_str) + if not videoindex_match: + raise ValueError("Invalid lwindex format: Invalid ActiveVideoStreamIndex line") + videoindex = int(videoindex_match.group("VideoStreamIndex")) + # The picture list starts after the last tag indexstart, indexend = (len(index) - index[::-1].index("")), index.index("") frames = [LWIndexFrame(index[i:i+2]) for i in range(indexstart, indexend, 2)] - frames = [f for f in frames if f.index == 0] # select the first stream + frames = [f for f in frames if f.index == videoindex] # select the first stream frames.sort(key=int) - streaminfo = streaminfo_re.match(index[index.index("") + 1]) # info of first stream + streaminfo = streaminfo_re.match(index[index.index(f"") + 1]) # info of first stream if not streaminfo: raise ValueError("Invalid lwindex format") diff --git a/src/video_provider_vs.cpp b/src/video_provider_vs.cpp index 3533e221ed..236668fe1c 100644 --- a/src/video_provider_vs.cpp +++ b/src/video_provider_vs.cpp @@ -209,7 +209,7 @@ VapourSynthVideoProvider::VapourSynthVideoProvider(agi::fs::path const& filename } } - if (numtc != -1) { + if (numtc != -1 && vi->numFrames > 1) { const int64_t *tcs = vs.GetAPI()->mapGetIntArray(clipinfo, tc_key, &err1); const char *tcs_path = vs.GetAPI()->mapGetData(clipinfo, tc_key, 0, &err2); if (err1 && err2)