Note di supporto · Docker

Perché il sottotitolo generato da Quven non è accanto al film in Docker

Un tester ha generato un sottotitolo in Docker e non trovava il file accanto al film. Il mount in sola lettura aveva rifiutato la copia, e la 1.1.22 cambia quel default.

Schema di un sottotitolo generato conservato nel volume quven-data, con la copia accanto al film rifiutata da un mount dei media in sola lettura

Questa settimana un tester che usa Quven Server in Docker su Ubuntu ci ha scritto con una domanda a cui non avevamo risposto da nessuna parte. Aveva chiesto al player un sottotitolo per un film che non ne aveva. Il server lo ha generato dal parlato, il player lo ha elencato come generato dall’audio e lo ha riprodotto. Poi ha aperto la cartella del film sull’host, aspettandosi di trovare il file dei sottotitoli accanto al video, e non c’era niente. Dov’era finito?

La risposta era nel log del server, in due righe che arrivano una dopo l’altra. La prima dice che il sottotitolo generato è stato salvato per il flusso audio scelto. La seconda è un avviso: la copia portabile di un sottotitolo trascritto non ha potuto essere scritta, e il server tiene la propria. Sotto c’è il motivo, IOException: Read-only file system, su un percorso dentro /media.

Due copie, e ne serve una sola

Quando Quven produce un sottotitolo, conserva il risultato in un archivio suo. In un’installazione normale quell’archivio sta nella cartella dei dati dell’applicazione; nel container sta dentro il volume quven-data. Tutti i client riproducono il sottotitolo da lì, ed è per questo che il player del tester lo elencava e lo riproduceva senza problemi.

A parte, il server prova a scrivere una seconda copia accanto al video, come un normale file a fianco. Quella copia serve a te, e Quven non la rilegge mai: permette al testo di viaggiare con il film se sposti la cartella su un’altra macchina o la passi a qualcuno che Quven non lo usa. Se la copia non si può scrivere, il server registra l’avviso di cui sopra e va avanti. Non c’è un’impostazione per questo, perché la riproduzione non ne dipende in nessun modo.

Vale per ogni sottotitolo che Quven produce, in qualunque modo sia stato prodotto. Una traccia tradotta in un’altra lingua, un sottotitolo grafico riconosciuto in testo e una traccia che hai corretto nell’editor delle battute seguono tutti la stessa strada: salvati nel volume dei dati, e copiati accanto al film quando la cartella lo permette.

Perché la cartella non lo permetteva

Il file Compose pubblicato fino alla 1.1.21 monta i tuoi media con read_only: true. Era una scelta voluta: è la garanzia che il server può catalogare e riprodurre la libreria senza poterne modificare un byte, qualunque cosa succeda dentro il container. Quella riga però blocca anche la copia accanto al film, e la nostra guida non lo diceva. Il tester aveva seguito la guida alla lettera, e la guida aveva lasciato fuori quel pezzo.

Cosa abbiamo cambiato

Dalla 1.1.22 il file Compose pubblicato monta i tuoi media in modo che quella copia possa arrivare. La garanzia non è sparita, è passata nelle tue mani. QUVEN_MEDIA_READ_ONLY=true nel tuo .env richiude il montaggio, e siccome quell’impostazione vive in un file che non sovrascriviamo mai, sopravvive all’aggiornamento successivo. Cancellare una riga da compose.yaml non lo faceva, dato che la guida ti chiede di riscaricare quel file a ogni release.

Due cose vale la pena saperle comunque tu lo lasci. Il container gira con l’utente 10001, quindi la cartella dei media sull’host deve essere scrivibile da quell’uid. Senza, la copia fallisce di nuovo, con un errore di permessi invece che di file system in sola lettura. E Quven continua a non toccare i tuoi file video: quello che scrive accanto a loro è il sottotitolo che ha fatto per te, con il nome del film a cui appartiene, che è l’unica cosa che abbia mai scritto dentro la cartella di una libreria e l’unica che scriverà nella tua. Non ci finisce altro.

Se sei su un bundle più vecchio

Apri compose.yaml, togli la riga read_only: true sotto il bind dei media, rendi la cartella scrivibile dall’uid 10001 e ricrea il container con docker compose up -d. Aggiornare fa la stessa cosa senza la modifica, e continua a farla, cosa che una modifica a un file che riscarichi a ogni release non può promettere.

Domande frequenti

Il sottotitolo generato funziona lo stesso se la copia accanto al film fallisce?

Sì. Il server tiene il sottotitolo nel suo archivio dentro il volume dei dati, e tutti i client lo riproducono da lì. La copia accanto al film è un extra di cui puoi fare a meno, e l’avviso nel log è l’unico segno che è stata saltata.

Quali sottotitoli sono interessati?

Tutti quelli che Quven produce: trascritti dall’audio, tradotti in un’altra lingua, riconosciuti da una traccia grafica o corretti nell’editor delle battute. Sono salvati nello stesso modo e copiati accanto al film nello stesso modo.

Come faccio ad avere i file accanto ai miei video?

Dalla 1.1.22 in poi arrivano da soli, purché la cartella dei media sia scrivibile dall’uid 10001. Su un bundle più vecchio, togli read_only: true dal bind dei media in compose.yaml e ricrea il container con docker compose up -d. Senza una cartella scrivibile la copia fallisce di nuovo, con un errore di permessi.

Comunità

Commenti

0 commenti

Verrà mostrato pubblicamente con il commento.

Gli invii degli ospiti registrano dati limitati di rete e dispositivo per prevenire abusi. Consulta l’Informativa privacy.

Non ci sono ancora commenti. Inizia la conversazione.

Conferma azione

Riporta a casa la tua libreria.

Gratis per uso domestico e tua da eseguire sul tuo hardware. Si installa in pochi minuti.