Videos reparieren

Defekte Videos kann mencoder reparieren. Mittels apt-get ist dieses Programm schnell installiert.

1
sudo apt-get install mencoder

Der folgende Aufruf versucht das Video input.avi zu reparieren. Das Ergebnis wird unter output.avi gespeichert.

1
mencoder -idx input.avi -ovc copy -oac copy -o output.avi

Dabei stellt mencoder den Index wieder her und kopiert die Film- und Tonspur.

Für die ganze Filmsammlung eignet sich das folgende Script repair_movies.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/sh
 
#functions
f_suffix()
{
	echo "${1##*.}"
}
 
 
#parameters
if [ $# -eq 1 ]
then 
	#parameter
	path="$1"
else
	#default
	path="/data/media/movies"
fi
 
 
#main
find "$path" -not -name '*.fixed.*' \( -iname '*.avi' -or -iname '*.mpg' -or -iname '*.mpeg'  \)  -type f | \
while read i
do
	suffix=$(f_suffix "$i")
	filename_out="${i%.avi}.fixed.${suffix}"
	filename_tmp="${i}.tmp"	
 
	echo "Repair file ${i}"
 
	#remove old temp file
	if [ -f $filename_tmp ]
	then
		echo "rm ${filename_tmp}"
		rm "${filename_tmp}"
 
	fi
 
	if [ -f $filename_out ]
	then
		#file is fixed, remove original file
                echo "rm ${i}"
                rm "${i}"
	else
		#repair video file
		mencoder -idx "$i" -ovc copy -oac copy -o "${filename_tmp}"
 
		#remove source file only, if mencoder was successfully finished
		if [ $? -eq 0 ]
		then
			mv "${filename_tmp}" "${filename_out}"
 
			#delete original movie
			echo "rm ${i}"
			rm "${i}"
		fi
	fi
 
done

Im Moment verarbeitet das Script nur avi, mpeg und mpg Dateien (case insensitiv), lässt sich aber leicht erweitern. Zur Sicherheit kann der Teil, der das Orginalvideo löscht, auskommentiert werden.