# CLI Packager: comandos y recuperación

Envasar un vídeo maestro, automatizar con protegidos credenciales, interpretar el progreso y reanudar una carga interrumpida sin recodificar.

El vídeo cifrado y las licencias DRM se entregan por rutas distintas

La CDN entrega el vídeo cifrado. Su backend comprueba el acceso y el servicio de licencias DRM autoriza el descifrado en un dispositivo compatible.

- 01**Almacenamiento / CDN**

Entrega el contenido cifrado al reproductor.

- 02**Su backend**

Comprueba si el espectador tiene permiso y solicita la autorización de reproducción a DRM-X.

- 03**DRM-X**

Valida la autorización de reproducción y procesa la solicitud de licencia DRM.

- 04**Reproductor + dispositivo**

Utiliza el sistema DRM del dispositivo para obtener una licencia y reproducir el contenido cifrado.

Su backend decide el acceso; DRM-X aplica la política firmada. Los medios cifrados y las licencias DRM siguen caminos de entrega separados.

## Abrir el CLI[ ](#open-the-included-cli)

Descargar y extraer la completa Windows Suite de [Package Content](https://6.drm-x.com/console/package-content). Open PowerShell en la carpeta extraída. Comandos a continuación asumen los binarios FFmpeg suministrados, FFprobe y Shaka están al lado `drmx-packager.exe`.

```
.\drmx-packager.exe version
.\drmx-packager.exe help
.\drmx-packager.exe credentials list
.\drmx-packager.exe credentials test --profile "Production"
```

Primero crear el **Producción** perfil en [Desktop Packager](https://docs.drm-x.com/es/packaging/desktop), o reemplazar ese nombre con su propio perfil guardado. Use vista previa.6 o más reciente para la autorización de carga larga renovable.



## Paquete un maestro de 1080p [ ](#package-a-1080p-master)

Reemplazar la ruta de origen, Content ID y la ruta de salida a continuación. La carpeta de salida debe ser nueva o vacía. PowerShell utiliza un backtick al final de una línea continua; no añadir espacios después de ella.

```
.\drmx-packager.exe package `
  --profile "Production" `
  --content_id "training-2026-001" `
  --content_title "Training session" `
  --input_source "D:\Sources\training.mp4" `
  --encoding_ladder "sd,hd,full-hd" `
  --video_codec h264 --encoding_preset fast `
  --rate_control smart-quality-vbr --max_frame_rate 24 `
  --audio_bitrate_kbps 128 --segment_duration 6 `
  --packaging_profile maximum-compatibility `
  --key_protection shaka-standard --encrypt_audio `
  --drm_systems "widevine,fairplay,playready,wiseplay" `
  --ffmpeg ".\ffmpeg.exe" --ffprobe ".\ffprobe.exe" `
  --shaka ".\packager-win-x64.exe" `
  --upload-concurrency 8 `
  -o "D:\Protected\training-2026-001"
```

Esto analiza la fuente, codifica la escalera seleccionada una vez, encripta las salidas configuradas, verifica los manifiestos, elimina las entregas temporales claras y sube el paquete protegido. Una fuente más pequeña que un rang solicitado no es escalada. Para UHD, vea [4K, 8K y videos largos](https://docs.drm-x.com/es/packaging/large-videos).

Para mantener la salida protegida localmente, anexa `--no-upload`. Para utilizar un destino de propiedad del cliente verificado, anexa `--storage_connection_id "YOUR-STORAGE-CONNECTION-ID"`. Su defecto configurado se utiliza cuando se omite esta opción.



## Comprender el progreso y la terminación [#](#understand-progress-and-completion)

Analice
Leer las pistas de origenCódigo
Crear la escaleraEncriptado
Proteger cada salidaVerificar
Manifiestos de verificaciónSubir
Transferencia y publicación

A successful upload reports the verified object count, total bytes, inventory SHA-256 and registered manifest URLs. The last stage includes server verification of object sizes, manifest paths and package KIDs. Keep the Packaging Session ID from the output: it identifies the same package during recovery.

El escritorio consume un progreso estructurado CLI. Para su propia integración, agregue `--progress-format ndjson` y parse uno JSON objeto por línea; campos opcionales como `percent` pueden ser null. Trate un código de salida de proceso no cero como fallo o cancelación, incluso si se completaron fases anteriores.



## Reanude sin reencoding[#](#resume-without-re-encoding)

Utilice `upload` después de completar el cifrado local, incluso después de reiniciar el ordenador o después de que el Packaging Access Token original caducó. Su perfil guardado debe pertenecer al mismo Site ID como el paquete completado. Reemplazar la sesión de ejemplo UUID y carpeta con los valores de su registro.

```
.\drmx-packager.exe upload `
  --profile "Production" `
  --session "11111111-2222-4333-8444-555555555555" `
  --input "D:\Protected\training-2026-001" `
  --upload-concurrency 4
```

**Mantenga toda la raíz de salida**, incluyendo ambas carpetas de formato de cifrado cuando Maximum Compatibilidad creó dos salidas. Para 1AICLOUD, el CLI compara longitudes de byte remotas y metadatos SHA-256, salta objetos que coincidan y continúa el trabajo incompleto. Un objeto multiparto incompleto reinicie ese objeto; objetos ya completados seguir siendo reutilizable cliente.

El cargador retrocede después de tropezar o errores de red temporales y renueva temporalmente 1AICLOUD credenciales manteniendo el mismo destino y prefijo de paquete. Las piezas de grandes objetos fallidos se retrivan independientemente. Comience con 4-8 objetos paralelos; mayor concurrencia no siempre es más rápido. Detenga otro proceso cargando la misma carpeta antes de reanudar.

```
.\drmx-packager.exe upload `
  --session "11111111-2222-4333-8444-555555555555" `
  --input "D:\Protected\training-2026-001" --dry-run
```

Esta ejecución seca sólo lee los recuentos y tamaños de archivos locales; no contacta el almacenamiento, prueba la autorización del servidor o valida el cifrado. La sesión UUID todavía debe ser válida sintácticamente. Los flujos de trabajo basados en la sesión de Legacy pueden utilizar un valido `DRMX_PACKAGING_TOKEN`; la recuperación de archivos guardados es más simple cuando ese token ha expirado.



## Automatizar con entorno protegido credenciales[#](#automate-with-protected-environment-credentials)

Los trabajos no deseados pueden suministrar `DRMX_PACKAGER_SITE_ID`, `DRMX_PACKAGER_ACCESS_KEY` y `DRMX_PACKAGER_KMS_TOKEN` a través de su tienda secreta. Opcionalmente establece `DRMX_PACKAGER_SERVER`. Omit `--profile` en este modo. No escriba real credenciales en scripts, control de fuente, argumentos de comandos o registros.

Ejecutar un paquete de comando por fuente y asignar un único Content ID y destino vacío cada vez. Compruebe el código de salida antes de continuar. `upload` para un paquete completado que falló durante la carga, en lugar de repetir automáticamente `package`. Windows utiliza los ejecutables agrupados mostrados anteriormente. En un Linux aprobado CLI instalación, uso `./drmx-packager`, `./ffmpeg`, `./ffprobe` y `./packager-linux-x64`, con continuaciones de línea apropiadas para conchas.



## Problemas de solución [ ](#troubleshooting)

| Mensaje o síntoma | Siguiente acción | 
| --- | --- |

| Carga temporalmente ocupada o interrumpida | Si se agota el presupuesto de reingreso, mantenga la salida y reanude con la concurrencia 4 o 2. | 

| 401 / falla de validación credencial | Pruebe el perfil guardado, compruebe el Site ID y gire/re-save revoked credenciales. Un espectador DRM License Token no puede autorizar el embalaje. | 

| El producto debe estar vacío | Utilice una nueva carpeta para la codificación; utilice la subida para recuperar un paquete protegido ya completado. | 

| Otra carga puede estar usando esta carpeta protegida | Cerrar el otro proceso de carga. El archivo de bloqueo adyacente puede permanecer después de la salida; sólo un archivo activo bloquea la recuperación. | 

| Largo, comprobación o verificación manifiesta falló | Preserve el registro y la salida. No edite manifiestos ni publique manualmente. Reanude archivos no modificados o soporte de contacto con la sesión ID y redacted error. | 

| UHD rang removed | Las dimensiones fuente son demasiado pequeñas para ese peldaño. Utilice una fuente UHD real para producir UHD salida. |

<!-- Canonical: https://docs.drm-x.com/es/packaging/cli -->
<!-- Language: es -->
