Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

MediaMonkey 4 재생 횟수와 마지막 재생 시간을 Strawberry로 옮기기

MM4 경로를 매핑하고 두 통계를 미리 본 뒤 Linux에서 검사된 Strawberry 데이터베이스 복사본을 만듭니다.

MediaMonkey와 Strawberry 복사본으로 새 출력을 만들고 원본은 유지하는 오리지널 그림.
오리지널 일러스트: 일관된 복사본에서 별도 데이터베이스를 만들고 사용 중인 프로필은 바꾸지 않습니다. Watch at Ease

같은 음악을 Strawberry에서 스캔해도 MediaMonkey 4 기록은 돌아오지 않습니다. 원본 MM.DB에서 PlayCounter와 LastTimePlayed를 읽어 기존 곡과 일치시키고 playcount와 lastplayed만 새 DB 복사본에 씁니다.

새로 스캔하고 사용하지 않은 대상(playcount 0, lastplayed -1, 열이 있으면 skipcount 0)에만 씁니다. 라이브 프로필, 평점, 재생목록, 개별 이벤트, 누락 음원은 다루지 않습니다.

일관된 복사본 준비

두 플레이어를 종료하고 MM.DB와 strawberry.db 복사본을 만들며 원본을 보관합니다. -wal/-shm/-journal 옆 입력은 거부되며 삭제해 우회하지 않습니다.

원본 MM4 DB와 미사용 대상을 씁니다. https://watchatease.com/guide-tools/mm4-to-strawberry-v1.0.1.zip 을 받고 압축 전 SHA-256을 확인합니다. 테스트는 생성 데이터입니다.

볼륨 검사와 매핑

실행: python3 mm4_to_strawberry.py inspect --mm-db MM.DB --strawberry-db strawberry.db

:\Music\Album\Track.flac만으로 볼륨을 알 수 없습니다. 반환 IDMedia를 사용하고 mapping.json version 1에서 IDMedia 7의 :\Music을 /home/YOU/Music처럼 겹치지 않게 매핑합니다.

모호한 일치 중단

원시 :\ 형식만 지원하며 드라이브/UNC 복원, 대소문자·Unicode 통합, 아티스트/제목 추측은 하지 않습니다.

중복 URL, 같은 실제 파일을 가리키는 두 기록, cue, 누락 곡, 모호한 일치는 중단합니다. plan을 편집하지 말고 경로를 고칩니다.

모든 변경 미리 보기

실행: python3 mm4_to_strawberry.py preview --mm-db MM.DB --strawberry-db strawberry.db --mapping mapping.json --confirm-mm4-utc --out-dir preview-mm4

새 디렉터리 plan.json을 확인합니다. 정상은 종료 0, 중단은 2입니다. 날짜 범위는 1970-01-01부터 생성 시각+5분까지입니다. 양수 날짜 없음은 중단, 0회 날짜 있음은 유지, 없음은 skipped-no-supported-history입니다.

같은 plan 적용과 검증

실행: python3 mm4_to_strawberry.py apply --plan preview-mm4/plan.json --out-dir migrated-mm4

apply는 preview를 다시 계산합니다. 데이터베이스, mapping, script, 오디오 식별 metadata 또는 판단이 바뀌면 plan은 무효입니다. 성공하면 사용 중인 profile을 덮어쓰지 않고 migrated-mm4/strawberry.db와 verification.json을 만듭니다.

보고서는 입력·출력 SHA-256, 행 수와 plan checksum을 기록하고 전체 통계 vector, 다른 모든 table/schema, 추가 쓰기 trigger를 검사하며 PRAGMA quick_check와 전체 PRAGMA integrity_check를 실행합니다. 원본 hash가 그대로인지도 확인합니다.

격리 시험과 범위 준수

반환된 database를 별도 OS 계정이나 격리된 Strawberry data directory에서 시험합니다. 거부되면 원본을 보존하고 schema/build를 조사하며 version 번호를 바꿔 강제하지 않습니다.

57개 synthetic test는 inspect-preview-apply, 고정 schema-11 songs fixture, 무관한 field/FTS/playlist 보존, 모호성 및 변경 입력 거부, 4개 timezone의 1,000개 날짜 변환을 다룹니다. 모든 release나 실제 MM4 library를 증명하지는 않습니다.

기존 local song의 playcount와 lastplayed만 옮깁니다. rating, playlist, 개별 event, 사용 중인 library 병합, 누락된 audio, 모든 MM3/MM5 지원은 범위 밖입니다.

MM4 통계의 경로 매핑, 미리 보기, 적용, 검증을 보여 주는 오리지널 그림.
오리지널 일러스트: 정확한 일치를 미리 보고 같은 plan을 적용한 뒤 검증 보고서를 읽습니다. Watch at Ease