def run(self): self.root.mainloop() class TextRedirector: def (self, log_function): self.log_function = log_function
The converter handles standard PS2 disc layouts and properly extracts the ISO9660 filesystem from the BIN/CUE format. Ps2 Bin Cue To Iso
def convert_bin_cue_to_iso(self, cue_path, output_path=None): """Main conversion function""" try: # Parse CUE file print(f"Parsing CUE file: {cue_path}") tracks = self.parse_cue_file(cue_path) if not tracks: raise ValueError("No tracks found in CUE file") # Determine output path if output_path is None: output_path = Path(cue_path).with_suffix('.iso') # Open output ISO file with open(output_path, 'wb') as iso_file: # Process each file in the CUE for file_info in tracks: bin_path = Path(cue_path).parent / file_info['file'] if not bin_path.exists(): raise FileNotFoundError(f"BIN file not found: {bin_path}") print(f"Processing: {bin_path}") with open(bin_path, 'rb') as bin_file: # Process each track in the file for track in file_info['tracks']: print(f" Track {track['number']} ({track['type']})") # Find INDEX 01 (start of track data) index01 = None for idx in track['indexes']: if idx['number'] == 1: index01 = idx break if not index01: print(f" Warning: No INDEX 01 found for track {track['number']}") continue # Calculate sectors in this track next_track_start = None # Find next track's start offset for next_track in file_info['tracks']: if next_track['number'] > track['number']: for idx in next_track['indexes']: if idx['number'] == 1: next_track_start = idx['offset'] break break if next_track_start: sector_count = next_track_start - index01['offset'] else: # Last track, need to calculate from file size bin_file.seek(0, 2) file_size = bin_file.tell() total_sectors = file_size // self.sector_size sector_count = total_sectors - index01['offset'] if sector_count > 0: # Extract ISO data from sectors iso_data = self.extract_sector_data( bin_file, index01['offset'], sector_count ) iso_file.write(iso_data) print(f" Written {sector_count} sectors ({len(iso_data)} bytes)") print(f"\nβ Conversion complete! ISO saved to: {output_path}") return True except Exception as e: print(f"β Error during conversion: {str(e)}") return False def main(): """Command line interface""" if len(sys.argv) < 2: print("Usage: python ps2_bin_cue_to_iso.py <input.cue> [output.iso]") print("\nExample:") print(" python ps2_bin_cue_to_iso.py game.cue") print(" python ps2_bin_cue_to_iso.py game.cue output.iso") sys.exit(1) def run(self): self