2009-05-21 16 views
8

Ho un server con molti file video. Dopo un ripristino, ho notato che il checksum di un paio di file è cambiato. Dal momento che non ho checksum per tutti i file, volevo scrivere uno script per verificare l'integrità del file. È semplice per gli archivi (tar t, unzip -t, rar t, ecc.) O immagini (convert image.jpg /tmp/test.png).Come posso convalidare un file video da uno script?

Quali opzioni devo passare a mplayer o vlc o qualsiasi altro strumento video su Linux per ottenere lo stesso effetto (vale a dire convalidare il contenuto del file senza dover guardare l'intero video)?

+0

Il video è danneggiato (non verrà riprodotto) se non ha lo stesso checksum ? Solo curioso di sapere perché ne hai bisogno, così posso imparare. – johnny

+0

Come sospetti che i file siano corrotti? Trovare la "causa principale" di questi problemi potrebbe essere il tempo speso meglio. Vedere la mia risposta di seguito per ulteriori suggerimenti sulla convalida del file. – slacy

+0

@johnny: eseguo il backup del mio server su harddisk. Sembra che uno dei dischi rigidi di backup abbia avuto un problema. Il checksum del file è cambiato quando l'ho ripristinato dal backup. Non sono sicuro del motivo per cui è successo, ma suppongo che un errore in 1 TB di dati sia qualcosa che può accadere. –

risposta

1

Poiché mplayer ha opzioni per convert from one video format to another che potrebbero essere sufficienti per un tale test, supponendo che mencoder restituisca un errore se non è in grado di decodificare il file di input (non l'ho verificato). Questo potrebbe funzionare simile al test immagine lei ha citato (convertire image.jpg /tmp/test.png)

+0

Quali opzioni dovrei usare? –

+0

@Aaron Digulla Il collegamento che ho fornito sopra menziona "mencoder -ovc lavc -oac lavc -o ". Non sono sicuro che funzioni con i tuoi file di input, comunque. Potrebbe essere necessario sperimentare. – lothar

-1

vi consiglio di usare sha1sum, uno strumento a riga di comando che probabilmente avete già (e se no, probabilmente hai anche md5sum, che andrebbe bene per questo lavoro) ... Tutto quello che devi fare è confrontare lo stdout di sha1sum prima e dopo il ripristino ...

+1

Lo faccio, ora. Ma questo non mi dice se il file è già corrotto o meno. –

5

Sembra che quello che vuoi fare è:

mplayer -vo null -ao null input.file 

e quindi analizzare l'output e restituire il valore per vedere se potrebbe effettivamente riprodurre & decodificare il flusso. Ci vorrà del tempo (ma essere più veloce del tempo reale). Se volete qualcosa di ancora più veloce, qui ci sono alcuni più suggerimenti:

Una semplice cosa sta per essere quello di fare un

mplayer -identify -vo null -ao null 

sul file, e quindi analizzare l'output e guardare il valore di ritorno per qualcosa che sembra ragionevole.

Per quanto riguarda il checksum non corretto, sarà difficile sapere se questo è un problema per il tuo lettore multimediale o meno (mplayer, vlc, totem, ecc.). Un buon lettore multimediale tollererà molti errori a livello di bit o byte con un impatto minimo sulla riproduzione risultante. Un lettore multimediale molto rigido uscirà quando vedrà codec errati & codec byte.

Per verificare i byte (contenitore) involucro, si potrebbe fare qualcosa di simile

mencoder -ovc copy -oac copy input.file -o output.file 

Il problema è che mencoder vorranno creare un file .avi per l'output. Se i tuoi input sono .avi, allora funzionerà alla grande.

è possibile eseguire un simile ffmpeg a riga di comando, in questo modo:

ffmpeg -acodec copy -vcodec copy input.file output.file 

Se i file sono file .mp4, si potrebbe desiderare di dare un'occhiata a MP4Box (http://www.videohelp.com/tools/mp4box) per fare un compito simile. Gli strumenti di matroska sono anche buoni per questo genere di cose. (http://www.matroska.org/)

+1

Potrebbe essere necessario aggiungere -benchmark alla riga di comando di mplayer, per consentirgli di andare più veloce del tempo reale. – rix0rrr

2

Se si lavora con i file MP4 si consiglia di dare un'occhiata al progetto mpeg4ip, in particolare gli strumenti come mp4videoinfo o mp4info.Questo potrebbe essere sufficiente per soddisfare le tue esigenze ed è molto veloce.

Dalla prima pagina:

  • mp4dump Utility per scaricare file MP4 meta-informazioni in forma di testo
  • mp4trackdump Utility per scaricare informazioni sui brani file MP4 in forma di testo
  • mp4info Utilità per visualizzare il riepilogo file MP4
  • mp4videoinfo Utility per scaricare informazioni sui file video MP4 traccia
  • avidump Utility per visualizzare AVI riepilogo dei file
  • yuvdump Utility per visualizzare un file raw video sullo schermo
  • mpeg_ps_info Utility per visualizzare i flussi in un program stream MPEG o VOB file
  • mpeg_ps_extract Utility per estrarre flussi elementari in un file di flusso programma MPEG o VOB

Ecco alcuni esempio di output di una MP4 preso sul mio Nokia N95:

manoa:Movies stu$ mp4info 20081017001.mp4 
mp4info version 1.5.0.1 
20081017001.mp4: 
Track Type Info 
1 video MPEG-4 Unknown Profile(4), 3.620 secs, 2700 kbps, 640x480 @ 23.480663 fps 
2 audio MPEG-4 AAC LC, 3.797 secs, 97 kbps, 48000 Hz 
manoa:Movies stu$ 
manoa:Movies stu$ 
manoa:Movies stu$ mp4videoinfo 20081017001.mp4 
mp4videoinfo version 1.5.0.1 
tracks 1 
mp4file 20081017001.mp4, track 1, samples 85, timescale 30000 
sampleId  1, size 24110 time 0(0) VOP-I 
sampleId  2, size 9306 time 4076(135) VOP-P 
sampleId  3, size 13071 time 5104(170) VOP-P 
... (a bunch more frames and a bit of info) ... 
sampleId  59, size 8702 time 64975(2165) VOP-P 
sampleId  60, size 8826 time 65980(2199) VOP-P 
sampleId  61, size 9819 time 66966(2232) GOV VOP-I 
sampleId  62, size 5591 time 67986(2266) VOP-P 
... (a bunch more frames and a bit of info) ... 
sampleId  83, size 10188 time 105546(3518) VOP-P 
sampleId  84, size 6533 time 106585(3552) VOP-P 
sampleId  85, size 6032 time 107601(3586) VOP-P 
manoa:Movies stu$ 
2

corto di guardare tutti i video, non c'è modo "perfetto" per fare questo.

I file video sono abbastanza robusti - come un esperimento ho preso un file casuale video MPEG-4, aperto in un editor esadecimale e ha iniziato a cambiare byte .. mplayer e Quicktime ancora giocato indietro senza errori.

ho dovuto cancellare migliaia di byte prima di ottenere qualsiasi errore dal MPlayer:

... 
[mpeg4 @ 0x6762b0]marker does not match f_code 
[mpeg4 @ 0x6762b0]marker does not match f_code 
[mpeg4 @ 0x6762b0]concealing 852 DC, 852 AC, 852 MV errors 
[mpeg4 @ 0x6762b0]header damaged: 0.055 16/ 16 15% 1% 3.5% 0 0 
Error while decoding frame! 

Non sarebbe difficile scrivere uno script che viene eseguito mplayer su ogni video, e controlla l'output per i messaggi di errore/avvisi, ma a meno che i byte modificati non siano nell'intestazione del file o molti dati siano stati modificati, non li troverai mai tutti

Problemi correlati