| 20032 | return merged |
| 20033 | |
| 20034 | def _parse_fps_value(raw_fps): |
| 20035 | if raw_fps in (None, "", "N/A"): |
| 20036 | return None |
| 20037 | txt = str(raw_fps).strip().replace(",", ".") |
| 20038 | if not txt: |
| 20039 | return None |
| 20040 | if "/" in txt: |
| 20041 | parts = txt.split("/", 1) |
| 20042 | if len(parts) >= 2: |
| 20043 | try: |
| 20044 | num = float(parts[0]) |
| 20045 | den = float(parts[1]) |
| 20046 | if den and den > 0: |
| 20047 | return round(num / den, 6) |
| 20048 | except Exception: |
| 20049 | pass |
| 20050 | try: |
| 20051 | return round(float(txt), 6) |
| 20052 | except Exception: |
| 20053 | return None |
| 20054 | |
| 20055 | def _extract_rotation(stream): |
| 20056 | if not isinstance(stream, dict): |