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

기술 · 실용 가이드

Linux에서 mpv 동영상을 옮겼나요? 일치하는 이어보기 기록 복구하기

watch_later 백업에서 별도의 복구 기록 모음을 만들고, 일치하지 않는 경로 연결을 살핀 뒤, 유일한 저장 기록을 소모하지 않고 재생을 시험하세요.

알고 있는 이전 동영상 경로가 저장 기록과 일치하고, 새 경로에 별도로 복사된 기록이 배정되는 과정을 보여 주는 자체 제작 편집 도표.
검증한 Linux 경로 연결 절차를 보여 주는 자체 제작 편집용 일러스트입니다. 키가 일치해도 두 파일에 같은 녹화물이 담겼다는 사실까지 입증하지는 않습니다. Watch at Ease

동영상을 옮긴 뒤에도 mpv의 저장된 재생 위치는 백업에 남아 있을 수 있습니다. 그런데 새 경로로 열면 기록을 찾지 못할 수 있습니다. 일반적인 전체 경로 방식의 기록은 미디어 경로에 따라 조회에 쓰는 이름이 결정됩니다. 이전 위치와 새 위치를 알고 있다면 이 가이드의 보조 도구로 기록을 일괄 대조하고 별도의 복구 디렉터리에 복사할 수 있습니다.

이 절차는 Linux에 범위를 한정한 복구 방법이며 mpv 0.41.0과 Python 3.12.14로 검증했습니다. 보조 도구에는 Python 3.9 이상이 필요하며 다른 운영체제에서는 실행을 거부합니다. 보존한 watch_later 디렉터리와 동일한 동영상으로 이어지는 신뢰할 수 있는 경로 연결이 필요합니다. 알 수 없는 이전 이름, 삭제된 녹화물, 편집 내용이 달라진 동영상은 해결되지 않습니다.

1. 경로가 실제로 바뀌었는지 확인하기

mpv를 닫은 상태에서 원래 watch_later 디렉터리 전체를 새 백업 위치로 복사하되 파일 수정 시각을 보존하세요. 7단계의 cp -a 형식을 사용하고 아직 없는 새 백업 대상을 지정합니다. 시각을 새로 설정하는 일반 복사는 이후 mtime 검사의 결과를 바꿀 수 있습니다. --watch-later-directory 재정의를 포함해 실제 설정에서 사용하는 디렉터리를 선택하세요. 현재 Linux 문서는 기본 상태 저장 위치를 ~/.local/state/mpv/watch_later로 안내하며, 오래된 설치에서는 ~/.config/mpv/watch_later에 있을 수 있습니다. 새 설치의 디렉터리가 비어 있다고 해서 이전 기록이 사라졌다는 뜻은 아닙니다.

미디어 경로가 완전히 같다면 먼저 이어보기가 활성화되어 있고 mpv가 복사한 디렉터리를 읽는지 확인하세요. IINA 지원 사례 중에는 복사와 설정으로 해결된 경우가 있습니다. 이 사례가 재설치할 때마다 키를 다시 지정해야 한다는 증거는 아닙니다. 아래 절차는 원래 기록을 보존한 뒤, 알고 있는 이동 또는 이름 변경을 처리하기 위한 것입니다. 마이그레이션을 쉽게 하려고 디렉터리를 제외한 파일명만 쓰는 저장 방식으로 바꾸지 마세요. 기존 전체 경로 키를 변환하지 못하며 파일명이 같은 서로 다른 동영상이 하나의 키를 공유할 수 있습니다.

2. 이전 경로와 새 경로의 대응 관계 확정하기

디렉터리 트리가 그대로라면 정확한 이전 미디어 루트와 새 루트를 기록하세요. 예를 들어 모든 파일명과 하위 디렉터리를 유지한 채 /media/old-drive/Shows가 /mnt/media/Shows로 옮겨졌을 수 있습니다. 이전 루트가 지금도 존재할 필요는 없지만 정확한 표기는 알고 있어야 합니다. 대소문자와 심볼릭 링크를 거치는 표기까지 포함해 mpv가 인식했던 경로를 사용하세요. 추측한 마운트 이름은 신뢰할 수 있는 경로 연결이 아닙니다.

보조 도구는 ./, ../, 연속 구분자, NUL, 캐리지 리턴 또는 줄바꿈이 없는 정돈된 Linux 절대 경로만 받습니다. 이전 버전의 정규화 방식을 추정하거나, 익명 해시를 역산하거나, 내용을 보고 이름이 바뀐 동영상을 찾지는 않습니다. 경로가 저장된 해시를 만든다는 사실은 필요조건이지만, 연결한 파일이 동일한 녹화물이며 편집 내용도 같다는 점 역시 알아야 합니다. 동영상이 교체되거나 편집되었다면 이전 시점이 더는 같은 장면을 가리키지 않을 수 있습니다.

3. 보조 도구 전체를 저장하고 살펴보기

새 작업 폴더에서 터미널을 열고 python3 --version을 확인하세요. Linux에서 Python 3.9 이상을 사용합니다. 다음 명령은 소스 전체를 실행하지 않고 다운로드합니다. curl을 사용할 수 없다면 브라우저에서 같은 주소를 열어 recover-mpv-watch-later-v1.py라는 이름으로 저장하세요.

curl --fail --location "https://watchatease.com/guide-tools/recover-mpv-watch-later-v1.py" --output "recover-mpv-watch-later-v1.py"

소스를 읽은 다음 sha256sum "recover-mpv-watch-later-v1.py"를 실행하세요. 이 버전의 SHA-256은 e9b71043f6e0f1600387cf3b4760c84c1df673b866e62725ec5f5b93331d1d78이어야 합니다. 해시가 다르면 이 가이드에서 검증한 바이트가 아닙니다. 멈추고 다운로드를 확인하세요. 보조 도구는 mpv를 실행하거나 백업을 편집하지 않습니다.

4. 이동한 트리 또는 명시적인 이름 변경 미리보기

아래 예시 경로를 모두 자신의 경로로 바꾸세요. 백업은 보존한 상태 기록 복사본이며 recovered-state는 그 밖에 있는, 아직 존재하지 않는 새 디렉터리입니다. 출력 경로의 상위 디렉터리는 먼저 만들되 recovered-state 자체는 만들지 마세요. 계획하고 복사하는 동안 백업과 현재 미디어를 변경하지 않습니다. 이 루트 모드 명령은 현재 트리를 열거하고 그에 대응하는 이전 경로를 구성합니다. --write가 없으면 JSON 보고서만 출력합니다. 검증한 Python 실행 환경에서는 자동 트리 검색이 디렉터리 심볼릭 링크 안으로 들어가지 않습니다. 그런 디렉터리를 통해 접근하는, 경로를 알고 있는 파일은 명시적인 매핑을 사용하세요.

python3 "recover-mpv-watch-later-v1.py" --backup "/home/you/mpv-backup/watch_later" --output "/home/you/mpv-recovery/recovered-state" --old-root "/media/old-drive/Shows" --new-root "/mnt/media/Shows"

실제로 이름을 바꾼 경우에는 mapping.json이라는 UTF-8 파일을 만들고 [{"oldPath":"/media/old-drive/Shows/old-name.mkv","newPath":"/mnt/media/Shows/new-name.mkv"}]와 같은 배열을 넣으세요. 알고 있는 경로 연결마다 객체 하나를 추가하고 필요한 곳에는 일반적인 JSON 이스케이프를 적용합니다. 이때는 아래의 대체 명령을 사용합니다. --mapping은 어느 루트 인수와도 함께 사용할 수 없습니다.

python3 "recover-mpv-watch-later-v1.py" --backup "/home/you/mpv-backup/watch_later" --output "/home/you/mpv-recovery/recovered-state" --mapping "mapping.json"

5. 적용하기 전에 보고서 읽기

ready 행은 이전 경로가 유한한 0 이상의 start 값 하나를 담은 일반 UTF-8 상태 파일과 일치했음을 뜻합니다. oldPath, newPath, position을 확인하세요. no-matching-position-record는 쓸 수 있는 위치 기록이 일치하지 않았다는 뜻이고, current-media-missing은 명시적인 경로 연결이 존재하지 않는 파일을 가리킨다는 뜻입니다. unmatchedBackupHashNames에는 해시로 이름 붙은 나머지 기록이 나열됩니다. 이 중에는 디렉터리나 재생목록 리디렉션 마커도 있을 수 있습니다. 일치하지 않는 모든 이름을 잃어버린 동영상으로 해석하지 마세요.

mtimeGateWouldMatch는 별도의 선택적인 정책 검사로 읽으세요. mpv의 --resume-playback-check-mtime 기본값은 no이며, 이 기본값으로 저장한 기록은 미디어 파일의 수정 시각을 갖고 있지 않아도 됩니다. 따라서 false만으로 손상이나 잘못된 이동을 뜻하지는 않습니다. 보조 도구는 기록의 기존 시각을 보존하며 이 필드가 false여도 ready 행을 복사합니다. 억지로 일치시키려고 미디어 시각을 바꾸지 않습니다.

시험하기 전에 재생 정책을 선택하세요. 기존 작업 방식에서 mtime 검사를 사용했다면 yes를 유지하고 검사를 통과하도록 요구해야 합니다. false이면 그 일반적인 복구 경로를 일단 멈춥니다. 동일하고 편집되지 않은 동영상임을 별도로 확인한 뒤에만 또 다른 일회용 복사본에서 no로 저장 위치를 진단할 수 있습니다. 이렇게 해도 시각의 일관성이 복구되거나 나중에 yes 세션이 작동하게 되는 것은 아닙니다. 아래의 기본값 no 경로도 2단계의 동일한 미디어라는 확실한 조건이 필요합니다. 중복되는 원본, 충돌하는 대상 키, 잘못된 입력, 지원하지 않는 상태 항목이 있으면 편리한 기록을 고를 것이 아니라 오류 또는 일치하지 않는 행을 검토해야 합니다.

6. 별도의 복구 기록 모음 하나 쓰기

미리보기가 의도한 경로 연결을 보여 주면 같은 명령에 --write를 추가해 다시 실행하세요. 경로와 매핑 방식은 그대로 유지합니다. 루트 모드 예시는 다음과 같습니다.

python3 "recover-mpv-watch-later-v1.py" --backup "/home/you/mpv-backup/watch_later" --output "/home/you/mpv-recovery/recovered-state" --old-root "/media/old-drive/Shows" --new-root "/mnt/media/Shows" --write

성공하면 APPLIED_TO_NEW_DIRECTORY를 보고하고 복사한 기록 옆에 recovery-report.json을 씁니다. 채택한 각 기록의 바이트와 수정 시각을 보존합니다. 사용할 수 있는 기록이 없거나, 출력 디렉터리가 이미 있거나, 사전 검사 오류가 있으면 멈춥니다. 복사 중 I/O 오류가 나면 부분적으로만 만들어진 새 디렉터리가 남을 수 있습니다. 오류를 보관하고, 문제를 수정한 뒤 다시 실행할 때는 아직 사용하지 않은 다른 대상을 지정하세요. 부분 결과를 합치거나 폴더가 존재한다는 이유만으로 완료되었다고 판단하지 마세요.

7. 일회용 복사본으로 시험한 뒤 새 상태 저장하기

아래 명령으로 recovered-state를 resume-test라는 별도의 복사본으로 만드세요. 이 명령은 수정 시각을 보존하며 대상은 아직 존재하지 않아야 합니다. 이후 만드는 모든 작업용 또는 시험용 복사본도 수정 시각을 보존하세요. recovered-state와 원본 백업은 그대로 둡니다. 아래 mpv 명령은 동일하고 편집되지 않은 동영상임을 확인한 뒤, 5단계의 기본값 no인 mtime 경로를 사용합니다. 기존 작업 방식에서 mtime 검사를 쓴다면 해당 옵션을 yes로 바꾸고 통과 여부를 확인하세요. 이 시험은 평소 설정과 자동 스크립트 불러오기를 비활성화하고 이어보기를 명시적으로 활성화합니다. 예시 경로는 모두 바꾸세요.

cp -a -- "/home/you/mpv-recovery/recovered-state" "/home/you/mpv-recovery/resume-test"

mpv --no-config --load-scripts=no --ytdl=no --resume-playback=yes --resume-playback-check-mtime=no --watch-later-directory="/home/you/mpv-recovery/resume-test" "/mnt/media/Shows/episode.mkv"

의도한 녹화물이며 예상한 장면에서 이어지는지 확인하세요. 대표적인 이름 변경 파일과 서로 다른 디렉터리에 있는 동일한 이름의 파일을 포함합니다. mpv는 재생을 초기화하면서 불러온 이어보기 기록을 소모하므로 두 번째 시험에는 다른 복사본 또는 새로 저장한 위치가 필요합니다. 선택한 경로가 성공하면 Shift+Q로 같은 정책 아래 새 상태를 저장하세요. 종료 시 저장을 설정하지 않았다면 일반 종료는 같은 동작이 아닙니다.

조건을 통제한 확인이 성공하면 평소 mpv 설정을 사용하고 --watch-later-directory를 작업용 복사본으로 명시해 그 복사본을 시험하세요. 선택한 mtime 정책을 유지합니다. no로 저장해도 나중의 yes 세션을 위해 그 기록이 준비되지는 않습니다. 설정, 스크립트, 저장된 옵션은 일반적인 재생에 영향을 줄 수 있습니다. 필요한 위치를 확인하고 새 저장 기록이 작동할 때까지 복구 보고서와 원본 백업을 보관하세요. 이 절차는 결과를 기존의 실제 사용 중인 상태 디렉터리에 자동으로 합치지 않습니다.

8. 멈춰야 할 때와 시험으로 확인한 범위 알기

재생이 처음부터 시작되면 우선 시험한 경로, 선택한 상태 디렉터리, 보고서, 수정 시각 결과를 대조하세요. 달라진 경로 표기나 켜진 mtime 검사가 조회 실패의 이유일 수 있습니다. 불일치가 백업 손상을 입증하지는 않습니다. 알 수 없는 이전 경로, 파일명만으로 저장하는 방식의 기록, start 값이 없는 항목, 편집 내용이 달라진 영상은 이 도구의 복구 주장 범위 밖입니다. 복사된 이전 파일명 주석과 다른 저장 옵션을 다시 쓰지 않으므로 시청 기록 메뉴, g-w 선택, 재생목록 순서, 외부 자막 경로는 복구하지 않습니다.

검증에서는 이 보조 도구의 정확한 바이트를 Linux에서 실행했고, mpv 0.41.0이라고 보고하는 제3자 바이너리를 사용했습니다. mpv가 공식적으로 권장한 패키지는 아닙니다. mpv가 직접 생성한 기록으로 이름을 바꾼 알려진 동영상을 4초에서 이어볼 수 있었습니다. 별도의 두 파일 시험 데이터에는 2초와 8초라는 인위적인 저장 위치를 사용했으며, 이름이 같은 두 동영상이 각각의 위치에서 이어졌습니다. 모의 실행 동작, 충돌, 이미 사용 중인 출력 경로, 변하지 않은 백업 해시를 포함해 보조 도구의 13개 검증 항목이 모두 통과했습니다. 별도의 12개 항목 플레이어 시험은 조회, mtime, 기록 소모를 확인했습니다. 이는 생성한 미디어로 조건을 통제한 시험이며, 원래 사용자의 설치 환경을 재현한 것이나 Windows/macOS 호환성 주장이 아닙니다.

그대로 보존한 백업, 복구한 상태 기록 모음, 일회용 재생 시험 복사본을 구분하는 자체 제작 편집 도표.
자체 제작 편집용 일러스트: mpv는 불러온 이어보기 기록을 소모하므로 일회용 복사본으로 시험하세요. 복사 완료와 재생 성공은 별도로 확인해야 합니다. Watch at Ease