dvd2mkv
von TRex- SNIPPET_TEXT:
-
- #!/bin/bash -e
- # TODO doc
- #
- # Reencodes DVD structures to mkv using a local scratchdir
- #
- # All audio streams and subtitles are copied
- # Video is reencoded with x264 -profile slow -crf 22
- # TODO:
- # - multiple video streams
- # - refining encoding process
- # - try to find subtitle language
- # in case one wants to use avconv....
- FFMPEG=ffmpeg
- function usage {
- echo "Usage: $0 Moviefolder"
- exit 1
- }
- [ "$#" == "1" ] || usage
- export TMP_VID_DIR=/mnt/tmp
- VIDEO_DIR=$(readlink -f "$1")
- function is_dvd {
- if [ -d "$VIDEO_DIR/VIDEO_TS" ]; then
- return 0
- else
- return 1
- fi
- }
- #
- function print {
- echo $@ > /dev/null
- }
- function finish {
- print "exit code $? [$@]"
- [ -f "$TMPVOB" ] && rm "$TMPVOB"
- print .
- }
- trap finish EXIT
- function _process_dvd {
- echo "Working on VIDEO_DIR $VIDEO_DIR"
- echo "Folder recognized as $DIRNAME"
- is_dvd || return 2
- pushd "$VIDEO_DIR/VIDEO_TS/"
- local d_path="$TMP_VID_DIR/$1"
- mkdir -p "$d_path"
- [ -L "$d_path/src" ] || ln -s "$VIDEO_DIR" "$d_path/src"
- local vobs=$(ls *.VOB | sort)
- TMPVOB="$d_path/movie.vob"
- local destfile="$d_path/movie.mkv"
- cat $vobs > "$TMPVOB"
- $FFMPEG \
- -analyzeduration 2G -probesize 2G \
- -i "$d_path/movie.vob" \
- -map 0 -dn \
- -c:v libx264 -preset slow -crf 22 \
- -c:a copy \
- -c:s copy \
- "$destfile" || rm "$destfile"
- mv "$destfile" "$VIDEO_DIR"
- popd
- }
- if [ ! -d "$VIDEO_DIR" ] || ! is_dvd ; then
- # "no (dvd) directory given"
- exit 1
- fi
- DIRNAME="$(basename "$VIDEO_DIR")"
- [ ! -f "$VIDEO_DIR/movie.mkv" ] && is_dvd && _process_dvd "$DIRNAME"
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN