Advertisement
abmelnikov

Dasha's helper

Mar 12th, 2025
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.06 KB | None | 0 0
  1. import fitparse
  2. from fitencode import FitEncoder
  3. from datetime import datetime, timedelta
  4.  
  5. def modify_fit_tempo(input_path, output_path, speed_factor=1.25):
  6.     # Чтение исходного FIT-файла
  7.     fitfile = fitparse.FitFile(input_path)
  8.     records = []
  9.     laps = []
  10.     file_id_msg = None
  11.     start_time = None
  12.  
  13.     # Сбор всех сообщений
  14.     for msg in fitfile.get_messages():
  15.         if msg.name == 'file_id':
  16.             file_id_msg = msg
  17.         elif msg.name == 'record':
  18.             records.append(msg)
  19.         elif msg.name == 'lap':
  20.             laps.append(msg)
  21.  
  22.     # Определение начального времени
  23.     if records:
  24.         start_time = records[0].get_value('timestamp')
  25.  
  26.     # Модификация записей
  27.     modified_records = []
  28.     for record in records:
  29.         data = record.get_values()
  30.         timestamp = data['timestamp']
  31.        
  32.         # Корректировка временных меток
  33.         if start_time:
  34.             elapsed = (timestamp - start_time).total_seconds()
  35.             new_elapsed = elapsed / speed_factor  # Уменьшаем время на 20%
  36.             new_timestamp = start_time + timedelta(seconds=new_elapsed)
  37.             data['timestamp'] = new_timestamp
  38.        
  39.         # Корректировка скорости
  40.         if 'speed' in data:
  41.             data['speed'] *= speed_factor  # Увеличиваем скорость на 25%
  42.        
  43.         modified_records.append(data)
  44.  
  45.     # Создание нового FIT-файла
  46.     with FitEncoder(auto_define=True) as encoder:
  47.         # Запись сообщения file_id
  48.         if file_id_msg:
  49.             encoder.write(file_id_msg.get_values())
  50.        
  51.         # Запись модифицированных записей
  52.         for record in modified_records:
  53.             encoder.write(record)
  54.        
  55.         # Запись модифицированных кругов (laps)
  56.         for lap in laps:
  57.             lap_data = lap.get_values()
  58.             # Корректировка времени начала/окончания круга
  59.             if 'start_time' in lap_data and start_time:
  60.                 elapsed_start = (lap_data['start_time'] - start_time).total_seconds()
  61.                 lap_data['start_time'] = start_time + timedelta(seconds=elapsed_start / speed_factor)
  62.             if 'end_time' in lap_data and start_time:
  63.                 elapsed_end = (lap_data['end_time'] - start_time).total_seconds()
  64.                 lap_data['end_time'] = start_time + timedelta(seconds=elapsed_end / speed_factor)
  65.             # Корректировка средней скорости
  66.             if 'avg_speed' in lap_data:
  67.                 lap_data['avg_speed'] *= speed_factor
  68.             encoder.write(lap_data)
  69.        
  70.         # Сохранение в файл
  71.         with open(output_path, 'wb') as f:
  72.             f.write(encoder.read())
  73.  
  74. # Использование
  75. modify_fit_tempo('original.fit', 'modified.fit', speed_factor=1.25)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement