Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿Has movido tus vídeos de mpv en Linux? Recupera los registros de reanudación correspondientes

Crea un conjunto de recuperación separado a partir de una copia de watch_later, revisa las correspondencias sin resolver y prueba la reproducción sin consumir tu único registro guardado.

Diagrama editorial original que muestra cómo una ruta anterior de vídeo conocida coincide con un registro guardado y cómo una ruta nueva recibe una copia separada del registro.
Ilustración editorial original del procedimiento verificado de correspondencia de rutas en Linux; una clave coincidente no demuestra que dos archivos contengan la misma grabación. Watch at Ease

Una posición guardada de mpv puede seguir en tu copia de seguridad después de mover el vídeo, pero dejar de encontrarse cuando abres la nueva ruta. En los registros habituales basados en la ruta completa, el nombre que se busca depende de la ruta del archivo multimedia. Si conoces la ubicación anterior y la nueva, el script auxiliar de esta guía puede localizar esos registros por lotes y copiarlos a un directorio de recuperación separado.

Este procedimiento de recuperación tiene un alcance limitado a Linux y se ha verificado con mpv 0.41.0 y Python 3.12.14; el script requiere Python 3.9 o posterior y rechaza otros sistemas operativos. Necesitas conservar un directorio watch_later y disponer de una correspondencia fiable con los mismos vídeos. Los nombres anteriores desconocidos, las grabaciones eliminadas y los montajes diferentes de un vídeo quedan sin resolver.

1. Comprueba si la ruta realmente ha cambiado

Con mpv cerrado, copia todo el directorio watch_later original a una ubicación nueva de copia de seguridad, conservando las fechas y horas de modificación de los archivos. Sigue el modelo de cp -a del paso 7 y utiliza un destino nuevo; una copia normal que cambie esas fechas y horas puede alterar la comprobación posterior de mtime. Utiliza el directorio de tu configuración real, incluido cualquier ajuste --watch-later-directory. La documentación actual de Linux sitúa los datos de estado en ~/.local/state/mpv/watch_later de forma predeterminada; las instalaciones antiguas pueden tenerlos en ~/.config/mpv/watch_later. Que el directorio de la nueva instalación esté vacío no demuestra que los registros anteriores hayan desaparecido.

Si el archivo multimedia conserva exactamente la misma ruta, comprueba primero que la reanudación esté activada y que mpv esté leyendo el directorio copiado. Un caso de soporte de IINA se resolvió mediante la copia y la configuración; eso no demuestra que cada reinstalación requiera generar nuevas claves. El procedimiento siguiente sirve para un traslado o cambio de nombre conocido, una vez que hayas conservado los registros originales. No cambies al almacenamiento basado solo en el nombre del archivo como atajo de migración: no convierte las claves existentes basadas en rutas completas y puede hacer que vídeos diferentes con el mismo nombre compartan una clave.

2. Establece la correspondencia entre las rutas anteriores y las nuevas

Si la estructura de directorios no ha cambiado, anota la raíz anterior exacta de los archivos multimedia y la nueva. Por ejemplo, /media/old-drive/Shows puede haberse convertido en /mnt/media/Shows, conservando todos los nombres de archivo y subdirectorios. La raíz anterior no tiene que seguir existiendo, pero debes conocer su escritura exacta. Utiliza la ruta tal como la veía mpv, incluidas las mayúsculas y minúsculas y cualquier ruta que pasara por un enlace simbólico; adivinar el nombre de un punto de montaje no proporciona una correspondencia fiable.

El script acepta rutas absolutas de Linux normalizadas, sin ./, ../, separadores repetidos, NUL, retornos de carro ni saltos de línea. No deduce la normalización de versiones anteriores, no revierte hashes anónimos ni encuentra una película renombrada por su contenido. Saber que una ruta produce un hash guardado es necesario, pero también debes saber que el archivo correspondiente es la misma grabación y el mismo montaje. Si un título se ha sustituido o editado, una posición temporal antigua puede dejar de señalar la misma escena.

3. Guarda y revisa el script auxiliar completo

Abre una terminal en una carpeta de trabajo nueva y comprueba python3 --version. Utiliza Python 3.9 o posterior en Linux. El siguiente comando descarga el código fuente completo sin ejecutarlo; si no tienes curl, guarda la misma dirección desde el navegador con el nombre 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"

Lee el código y ejecuta después sha256sum "recover-mpv-watch-later-v1.py". Para esta versión, el SHA-256 debe ser e9b71043f6e0f1600387cf3b4760c84c1df673b866e62725ec5f5b93331d1d78. Si el hash es distinto, esta guía no ha verificado esos bytes; detente y comprueba la descarga. El script no inicia mpv ni modifica la copia de seguridad.

4. Previsualiza un árbol trasladado o cambios de nombre explícitos

Sustituye todas las rutas de ejemplo siguientes por las tuyas. La copia de seguridad contiene los datos de estado que has conservado; recovered-state es un directorio nuevo, todavía inexistente y situado fuera de ella. Crea primero el directorio padre del destino, pero deja recovered-state sin crear. Mantén sin cambios la copia de seguridad y los archivos multimedia actuales durante la planificación y la copia. Este comando en modo de raíces enumera el árbol actual y construye las rutas anteriores correspondientes; sin --write solo imprime un informe JSON. En el entorno de ejecución de Python verificado, el recorrido automático del árbol no entra en enlaces simbólicos a directorios; utiliza correspondencias explícitas para los archivos conocidos a los que se acceda a través de esos directorios.

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"

Para los cambios de nombre reales, crea un archivo UTF-8 llamado mapping.json que contenga una matriz como [{"oldPath":"/media/old-drive/Shows/old-name.mkv","newPath":"/mnt/media/Shows/new-name.mkv"}]. Añade un objeto por cada correspondencia conocida, con los escapes habituales de JSON cuando sean necesarios. Utiliza la invocación alternativa siguiente; --mapping no puede combinarse con ninguno de los argumentos de raíz.

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. Lee el informe antes de aplicarlo

Una fila ready indica que la ruta anterior ha coincidido con un archivo de estado regular en UTF-8 que contiene un único valor start finito y no negativo. Comprueba sus campos oldPath, newPath y position. no-matching-position-record significa que no ha coincidido ningún registro de posición utilizable; current-media-missing significa que una correspondencia explícita apunta a un archivo que no existe. unmatchedBackupHashNames enumera otros registros cuyo nombre es un hash; algunos pueden ser marcadores de redirección de directorios o listas de reproducción. No interpretes cada nombre sin correspondencia como un vídeo perdido.

Interpreta mtimeGateWouldMatch como una comprobación de política separada y opcional. El valor predeterminado de --resume-playback-check-mtime en mpv es no; un registro guardado con ese valor no tiene por qué llevar la fecha y hora de modificación del archivo multimedia. Por tanto, false no implica por sí solo daños ni un traslado incorrecto. El script conserva la fecha y hora existentes del registro y copiará una fila ready aunque este campo sea false. No cambia la fecha y hora del archivo multimedia para forzar una coincidencia.

Elige la política de reproducción antes de hacer la prueba. Si tu procedimiento habitual comprueba mtime, conserva yes y exige que la comprobación se supere; un resultado false detiene esa vía normal de recuperación. Solo después de haber confirmado de forma independiente que se trata del mismo vídeo sin editar puedes utilizar no con otra copia desechable para diagnosticar la posición guardada. Eso no corrige la coherencia temporal ni hace que una sesión posterior con yes funcione. La vía predeterminada con no que se muestra más abajo también exige conocer la identidad del archivo, como se indica en el paso 2. Si hay orígenes repetidos, claves de destino en conflicto, entradas mal formadas o datos de estado no admitidos, debes revisar el error o la fila sin correspondencia, en lugar de escoger un registro por conveniencia.

6. Escribe un conjunto de recuperación separado

Cuando la previsualización describa las correspondencias previstas, repite la misma invocación añadiendo --write. Mantén las mismas rutas y la misma modalidad de correspondencia. Para el ejemplo en modo de raíces:

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

Una ejecución correcta informa de APPLIED_TO_NEW_DIRECTORY y escribe recovery-report.json junto a los registros copiados. Conserva los bytes y la fecha y hora de modificación de cada registro aceptado. Si no hay registros utilizables, el directorio de destino ya existe o se produce un error en las comprobaciones previas, se detiene. Un fallo de I/O durante la copia puede dejar un directorio nuevo incompleto; conserva el error y utiliza otro destino sin usar para la ejecución corregida. No combines resultados parciales ni consideres que la mera existencia de una carpeta demuestra que el proceso ha terminado.

7. Prueba con una copia desechable y guarda después un estado nuevo

Crea una copia separada de recovered-state llamada resume-test con el comando siguiente, que conserva las fechas y horas de modificación; ese destino no debe existir previamente. Conserva también esas fechas y horas en todas las copias de trabajo o prueba posteriores. Mantén intactos recovered-state y la copia de seguridad original. El comando mpv siguiente utiliza la vía predeterminada sin comprobación de mtime del paso 5, después de haber confirmado que se trata del mismo vídeo sin editar. Si tu procedimiento comprueba mtime, cambia esa opción a yes y exige que la comprobación se supere. La prueba desactiva tu configuración habitual y la carga automática de scripts, y activa expresamente la reanudación. Sustituye todas las rutas de ejemplo.

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"

Comprueba que sea la grabación prevista y que se reanude en la escena esperada. Incluye ejemplos representativos de archivos renombrados y de archivos con el mismo nombre en directorios distintos. mpv consume un registro de reanudación cargado al inicializar la reproducción, por lo que una segunda prueba necesita otra copia o una posición recién guardada. Cuando la vía elegida funcione, utiliza Shift+Q para guardar un estado nuevo con esa misma política; salir de forma normal no equivale a esa operación, salvo que esté configurado el guardado al salir.

Cuando la comprobación controlada funcione, prueba una copia de trabajo con tu configuración habitual de mpv y un --watch-later-directory explícito que apunte a esa copia. Mantén la política de mtime elegida: si guardas con no, ese registro no queda preparado para una sesión futura con yes. La configuración, los scripts y las opciones guardadas pueden afectar a la reproducción habitual. Conserva el informe de recuperación y la copia de seguridad original hasta haber comprobado las posiciones que necesitas y que el guardado de estados nuevos funcione. Este procedimiento no integra automáticamente el resultado en un directorio de estado activo existente.

8. Reconoce cuándo detenerte y qué demuestran las pruebas

Si la reproducción empieza desde cero, compara primero la ruta probada, el directorio de estado elegido, el informe y el resultado de la comprobación de fecha y hora de modificación. Una diferencia en la escritura de la ruta o una comprobación de mtime activada pueden explicar que no se encuentre el registro; una discrepancia no demuestra que la copia de seguridad esté dañada. Las rutas anteriores desconocidas, los registros del modo basado en el nombre del archivo, los valores start ausentes y los montajes modificados quedan fuera del alcance de recuperación de este script. Los comentarios copiados con los nombres de archivo anteriores y las demás opciones guardadas no se reescriben, por lo que no restaura menús del historial de reproducción, selecciones g-w, el orden de las listas de reproducción ni rutas de subtítulos externos.

Ejecutamos el script exacto en Linux con un binario de terceros que se identifica como mpv 0.41.0, no con un paquete respaldado oficialmente por mpv. Un registro generado por el propio reproductor reanudó un vídeo conocido y renombrado a los cuatro segundos. Otra prueba controlada con dos archivos utilizó posiciones guardadas sintéticas de dos y ocho segundos; ambos vídeos con el mismo nombre se reanudaron en sus posiciones respectivas. Se superaron las 13 aserciones del script, incluidas las de previsualización sin cambios, conflictos, destino ocupado y hashes de la copia de seguridad sin modificar. Otra prueba del reproductor, con 12 aserciones, comprobó la búsqueda de registros, mtime y el consumo del registro. Son pruebas controladas con archivos multimedia generados, no una recreación de la instalación de un usuario original ni una afirmación de compatibilidad con Windows/macOS.

Diagrama editorial original que separa la copia de seguridad intacta, el conjunto de estados recuperados y la copia desechable para probar la reproducción.
Ilustración editorial original: prueba con una copia desechable porque mpv consume un registro de reanudación cargado. La finalización de la copia y el éxito de la reproducción se comprueban por separado. Watch at Ease