_image_converter.py · _audio_converter.py · _llm_caption.py · _transcribe_audio.py · _exiftool.py圖片與音訊的 converter 都「看工具存在與否決定輸出」:EXIF 中繼資料需要 exiftool;
描述/OCR 需要 llm_client;轉錄需要 SpeechRecognition。所以「空輸出」、
「降級」都是這兩個 converter 的正常行為(案例頁有實測)。
convert 兩段式:
exiftool_metadata() 抽出 ImageSize / Title / DateTimeOriginal / GPSPosition 等。llm_client + llm_model 時 _get_llm_description 把圖 base64 成
data:image/...;base64,... URI,呼叫 OpenAI 相容 chat.completions
取描述,輸出 # Description:。兩者都缺 → 回傳空 Markdown。LLM 呼叫失敗會回 None(不炸)。
EXIF 抽取後依副檔名判斷格式(wav/mp3/mp4),呼叫 transcribe_audio();
只有 MissingDependencyException 會被吞掉(降級成只有 metadata)。
其他例外(如 SpeechRecognition 的 UnknownValueError)會向外傳播——這是案例頁
「純音調檔失敗」的根源。
以 -j(JSON)輸出跑 exiftool - 從 stdin 讀 bytes;
_parse_version 檢查版本夠新。找不到 exiftool 就安靜回 None——這就是
「沒裝 exiftool 就沒有 EXIF 輸出」的原因。
PPTX 的圖片 alt 描述與 ImageConverter 共用這條路——預設 prompt 「Write a detailed caption for this image.」。
用 speech_recognition 的 recognize_google(預設走 Google Web Speech API)。
依賴沒裝時拋 MissingDependencyException(audio converter 會吞);語音聽不懂時拋
UnknownValueError(不會被吞,會讓整個轉換失敗)。