我正在做一些字幕作業,有些視頻有 1 個字幕軌道,其他視頻有 2 個字幕軌道。對于那些有 2 的人,我使用第二個(索引 = 1)。我正在嘗試用python自動化它。
對于帶有 2 個字幕軌道的檔案,我使用:
-vf "字幕='file.mkv':si=1
對于那些有 1 個字幕軌道的人,我使用:
-vf "字幕='file.mkv':si=0
我正在使用這段代碼:
for mkv in all_mkvs:
try:
subprocess.call(f'ffmpeg -i ... -vf "subtitles='file.mkv':si=1 ...')
except:
subprocess.call(f'ffmpeg -i ... -vf "subtitles='file.mkv':si=0 ...')
但它似乎并不關心例外,只要遇到帶有 1 個字幕的檔案,它就會結束回圈,并且無論如何都會給我錯誤。
Press [q] to stop, [?] for help
[Parsed_subtitles_0 @ 0000011af4912880] Shaper: FriBidi 1.0.10 (SIMPLE) HarfBuzz-ng 2.7.2 (COMPLEX)
[Parsed_subtitles_0 @ 0000011af4912880] Unable to locate subtitle stream in ./test/349.mkv
[AVFilterGraph @ 0000011af623d880] Error initializing filter 'subtitles' with args './test/349.mkv:si=1'
Error reinitializing filters!
Failed to inject frame into filter network: Operation not permitted
Error while processing the decoded data for stream #0:3
Conversion failed!
正如您在上面的錯誤訊息中看到的那樣,它說:“初始化過濾器時出錯 .... si=1”,因為在該特定檔案的情況下它應該是 si=0,這就是我添加例外的原因,但它似乎并不關心它。

所以我試圖抓住那個錯誤并說“好的,在這種情況下,讓我們做 si=0 代替”。
uj5u.com熱心網友回復:
subprocess.call回傳回傳碼,它永遠不會引發。
您可能想要check_call,這將subprocess.CalledProcessError在非零回傳碼上引發 a 。
https://docs.python.org/3/library/subprocess.html
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, **other_popen_kwargs)
運行 args 描述的命令。等待命令完成,然后回傳 returncode 屬性。
subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, **other_popen_kwargs)
運行帶引數的命令。等待命令完成。如果回傳碼為零,則回傳,否則引發 CalledProcessError。CalledProcessError 物件將在 returncode 屬性中具有回傳碼。如果 check_call() 無法啟動行程,它將傳播引發的例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/476271.html
