-
Notifications
You must be signed in to change notification settings - Fork 0
/
Filmwandler_zu_MKV-Kontainer.sh
executable file
·208 lines (176 loc) · 7.22 KB
/
Filmwandler_zu_MKV-Kontainer.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#!/bin/sh
#!/usr/bin/env bash
#------------------------------------------------------------------------------#
#
# Dieses Skript verändert nur den Kontainer.
#
# Es wurde entworfen, um die vorhandenen AVI-Filme mit defektem Index,
# schnell anschauen zu können.
#
# Aus Kompatibilitäts-Gründen wäre die Unterstützung von AC-3 sehr hilfreich.
# Aber leider unterstützt der MP4-Kontainer keinen AC-3 (a52) - Codec,
# deshalb wird der MKV-Kontainer verwendet.
#
#------------------------------------------------------------------------------#
#
# Matroska: https://de.wikipedia.org/wiki/Containerformat
#
# Es werden folgende Programme von diesem Skript verwendet:
# - ffmpeg
#
#------------------------------------------------------------------------------#
#VERSION="v2022072100" # erstellt, um die vorhandenen AVI-Filme mit defektem Index, schnell anschauen zu können
#VERSION="v2022120400" # jetzt wird der Titel und Kommentar nicht mehr zwangsläufig überschrieben
#VERSION="v2022120500" # einen Schönheitskorrekturen vorgenommen
#VERSION="v2022120800" # jetzt werden auch alle Tonspuren mit kopiert
#VERSION="v2022122600" # jetzt werden auch alle Untertitel mit kopiert + kleine Fehler behoben
#VERSION="v2023010500" # kleine Fehler behoben
VERSION="v2023021900" # jetzt wird das Ziel ungefragt überschrieben
#set -x
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
STARTZEITPUNKT="$(date +'%s')"
AVERZ="$(dirname ${0})" # Arbeitsverzeichnis, hier liegen diese Dateien
#------------------------------------------------------------------------------#
# Format
ENDUNG="mkv"
FORMAT="matroska"
#==============================================================================#
################################################################################
###
#------------------------------------------------------------------------------#
if [ -z "${1}" ] ; then
${0} -h
exit 10
fi
while [ "${#}" -ne "0" ]; do
case "${1}" in
-q)
FILMDATEI="${2}" # Name für die Quelldatei
shift
;;
-titel)
EIGENER_TITEL="${2}" # Titel/Name des Filmes
shift
;;
-k)
KOMMENTAR="${2}" # Kommentar/Beschreibung des Filmes
shift
;;
-z)
ZIELDATEI="${2}" # Name für die Zieldatei
shift
;;
-h)
echo
echo "HILFE:
# ein Beispiel mit minimaler Anzahl an Parametern
${0} -q Film.avi
# ein komplettes Beispiel
${0} -q Film.avi -titel \"Der Filmname\" -k \"Ein Kommentar zum Film / FSK 12\"
"
exit 30
;;
*)
if [ "$(echo "${1}"|egrep '^-')" ] ; then
echo "Der Parameter '${1}' wird nicht unterstützt!"
export STOP="Ja"
fi
shift
;;
esac
done
#==============================================================================#
### Programm
PROGRAMM="$(which ffmpeg)"
if [ "x${PROGRAMM}" = "x" ] ; then
PROGRAMM="$(which avconv)"
fi
if [ "x${PROGRAMM}" = "x" ] ; then
echo "Weder avconv noch ffmpeg konnten gefunden werden. Abbruch!"
exit 40
fi
#==============================================================================#
### Trivialitäts-Check
if [ -r "${FILMDATEI}" ] ; then
FILM_NAME="${FILMDATEI}"
else
echo "Der Film '${FILMDATEI}' konnte nicht gefunden werden. Abbruch!"
exit 60
fi
if [ x = "x${ZIELDATEI}" ] ; then
ZIEL_DATEI="${FILM_NAME}.${ENDUNG}"
else
MKV="$(echo "${ZIELDATEI}" | grep -E '[.]mkv$')"
if [ x = "x${MKV}" ] ; then
ZIEL_DATEI="${ZIELDATEI}.${ENDUNG}"
else
ZIEL_DATEI="${ZIELDATEI}"
fi
fi
#------------------------------------------------------------------------------#
## -probesize 18446744070G # I64_MAX
## -analyzeduration 18446744070G # I64_MAX
#KOMPLETT_DURCHSUCHEN="-probesize 18446744070G -analyzeduration 18446744070G"
## Value 19807040624582983680.000000 for parameter 'analyzeduration' out of range [0 - 9.22337e+18]
## Value 19807040624582983680.000000 for parameter 'analyzeduration' out of range [0 - 9.22337e+18]
## -probesize 9223370Ki
## -analyzeduration 9223370Ki
KOMPLETT_DURCHSUCHEN="-probesize 9223372036G -analyzeduration 9223372036G"
#------------------------------------------------------------------------------#
### Parameter zum reparieren defekter Container
#REPARATUR_PARAMETER="-fflags +genpts"
REPARATUR_PARAMETER="-fflags +genpts+igndts"
#==============================================================================#
transkodieren()
{
echo
echo "1:
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i \"${FILMDATEI}\" -c:v copy -c:a copy -c:s copy -dn -map 0 -f ${FORMAT} -y \"${ZIEL_DATEI}\"
" | tee -a "${ZIEL_DATEI}".txt
echo
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i "${FILMDATEI}" -c:v copy -c:a copy -c:s copy -dn -map 0 -f ${FORMAT} -y "${ZIEL_DATEI}"
}
#------------------------------------------------------------------------------#
transkodieren_titel()
{
echo
echo "2:
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i \"${FILMDATEI}\" -c:v copy -c:a copy -c:s copy -c:d copy -map 0 -metadata title=\"${EIGENER_TITEL}\" -f ${FORMAT} -y \"${ZIEL_DATEI}\"
" | tee -a "${ZIEL_DATEI}".txt
echo
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i "${FILMDATEI}" -c:v copy -c:a copy -c:s copy -c:d copy -map 0 -metadata title="${EIGENER_TITEL}" -f ${FORMAT} -y "${ZIEL_DATEI}"
}
#------------------------------------------------------------------------------#
transkodieren_kommentar()
{
echo
echo "3:
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i \"${FILMDATEI}\" -c:v copy -c:a copy -c:s copy -c:d copy -map 0 -metadata description=\"${KOMMENTAR}\" -f ${FORMAT} -y \"${ZIEL_DATEI}\"
" | tee -a "${ZIEL_DATEI}".txt
echo
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i "${FILMDATEI}" -c:v copy -c:a copy -c:s copy -c:d copy -map 0 -metadata description="${KOMMENTAR}" -f ${FORMAT} -y "${ZIEL_DATEI}"
}
#------------------------------------------------------------------------------#
transkodieren_titel_kommentar()
{
echo
echo "4:
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i \"${FILMDATEI}\" -c:v copy -c:a copy -c:s copy -c:d copy -map 0 -metadata title=\"${EIGENER_TITEL}\" -metadata description=\"${KOMMENTAR}\" -f ${FORMAT} -y \"${ZIEL_DATEI}\"
" | tee -a "${ZIEL_DATEI}".txt
echo
${PROGRAMM} ${KOMPLETT_DURCHSUCHEN} ${REPARATUR_PARAMETER} -i "${FILMDATEI}" -c:v copy -c:a copy -c:s copy -c:d copy -map 0 -metadata title="${EIGENER_TITEL}" -metadata description="${KOMMENTAR}" -f ${FORMAT} -y "${ZIEL_DATEI}"
}
#==============================================================================#
if [ "x${EIGENER_TITEL}" = x ] ; then
if [ "x${KOMMENTAR}" = x ] ; then
transkodieren
else
transkodieren_kommentar
fi
else
if [ "x${KOMMENTAR}" = x ] ; then
transkodieren_titel
else
transkodieren_titel_kommentar
fi
fi