Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import fitparse
- from fitencode import FitEncoder
- from datetime import datetime, timedelta
- def modify_fit_tempo(input_path, output_path, speed_factor=1.25):
- # Чтение исходного FIT-файла
- fitfile = fitparse.FitFile(input_path)
- records = []
- laps = []
- file_id_msg = None
- start_time = None
- # Сбор всех сообщений
- for msg in fitfile.get_messages():
- if msg.name == 'file_id':
- file_id_msg = msg
- elif msg.name == 'record':
- records.append(msg)
- elif msg.name == 'lap':
- laps.append(msg)
- # Определение начального времени
- if records:
- start_time = records[0].get_value('timestamp')
- # Модификация записей
- modified_records = []
- for record in records:
- data = record.get_values()
- timestamp = data['timestamp']
- # Корректировка временных меток
- if start_time:
- elapsed = (timestamp - start_time).total_seconds()
- new_elapsed = elapsed / speed_factor # Уменьшаем время на 20%
- new_timestamp = start_time + timedelta(seconds=new_elapsed)
- data['timestamp'] = new_timestamp
- # Корректировка скорости
- if 'speed' in data:
- data['speed'] *= speed_factor # Увеличиваем скорость на 25%
- modified_records.append(data)
- # Создание нового FIT-файла
- with FitEncoder(auto_define=True) as encoder:
- # Запись сообщения file_id
- if file_id_msg:
- encoder.write(file_id_msg.get_values())
- # Запись модифицированных записей
- for record in modified_records:
- encoder.write(record)
- # Запись модифицированных кругов (laps)
- for lap in laps:
- lap_data = lap.get_values()
- # Корректировка времени начала/окончания круга
- if 'start_time' in lap_data and start_time:
- elapsed_start = (lap_data['start_time'] - start_time).total_seconds()
- lap_data['start_time'] = start_time + timedelta(seconds=elapsed_start / speed_factor)
- if 'end_time' in lap_data and start_time:
- elapsed_end = (lap_data['end_time'] - start_time).total_seconds()
- lap_data['end_time'] = start_time + timedelta(seconds=elapsed_end / speed_factor)
- # Корректировка средней скорости
- if 'avg_speed' in lap_data:
- lap_data['avg_speed'] *= speed_factor
- encoder.write(lap_data)
- # Сохранение в файл
- with open(output_path, 'wb') as f:
- f.write(encoder.read())
- # Использование
- modify_fit_tempo('original.fit', 'modified.fit', speed_factor=1.25)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement