![Rippen Sie Kapitel einer DVD in separate Dateien](https://rvso.com/image/23930/Rippen%20Sie%20Kapitel%20einer%20DVD%20in%20separate%20Dateien.png)
Ich habe eine DVD mit Zeichentrickfilmen für Kinder und auf jeder davon sind mehrere Episoden. Wie kann ich sie so rippen, dass jede Episode in einer separaten Datei ist? Ich glaube, jede Episode ist als Kapitel innerhalb eines Titels auf der DVD geschrieben.
Antwort1
So extrahieren Sie die .VOB-Datei für Titel 2, Kapitel 3
Beachten Sie, dass mit „-Kapitel 3“ und „-Kapitel 3-“ von Kapitel 3 bis zum Ende kopiert wird. Wenn die angegebene Kapitelnummer ungültig ist, wird die Option ignoriert und daher der vollständige Titel kopiert.
# physical DVD
mplayer dvd://2 -chapter 3-3 -dumpstream -dumpfile ~/3.VOB
# DVD .iso image
mplayer dvd://2 -dvd-device "$dvd_iso" -chapter 3-3 -dumpstream -dumpfile ~/3.VOB
Sie können lsdvd
Titel, Kapitel, Zelle, Audio, Video usw. für eine physische DVD auflisten. Es scheint jedoch keine Möglichkeit zu geben, eine zu verarbeiten .iso
. Sie könntenMounten Sie eine ISO-Datei, falls erforderlich.
# count Titles, and count Cells per title.
# eg. ${cell[1]} is the Count of Cells for the first title
# ${cell[titles]} is the Count of Cells for the last title
eval $(lsdvd | sed -n 's/Title: \([0-9]\+\), .* Chapters: \([0-9]\+\), Cells: .*/cells[$((10#\1))]=$((10#\2));/p')
titles=${#cells[@]}
title_num=2
from_cell=1
to_cell=${cell[title_num]}
dvdxchap
kann dagegen ein verarbeiten .iso
, listet aber keine Titelinformationen auf. Sie können jedoch den Titel angeben, von dem Sie Kapitelinformationen wünschen.
title_num=2
from_cell=1
# physical DVD
to_cell="$(dvdxchap -t $title_num /dev/dvd | sed -n 's/^CHAPTER\([0-9]\+\).*/\1/p' | sed -n '$p')"
# DVD .iso image
to_cell="$(dvdxchap -t $title_num "$dvd_iso"| sed -n 's/^CHAPTER\([0-9]\+\).*/\1/p' | sed -n '$p')"
Wenn Sie die gewünschte Titelnummer und die Anzahl der Zellen kennen, können Sie sie in einer Schleife ausgeben:
# physical DVD
for ((c=$from_cell; c<$to_cell; c++)) ;do
mplayer dvd://$title_num -chapter $c-$c -dumpstream -dumpfile ~/$c.VOB
done
# DVD .iso image
for ((c=$from_cell; c<$to_cell; c++)) ;do
mplayer dvd://$title_num -dvd-device "$dvd_iso" -chapter $c-$c -dumpstream -dumpfile ~/$c.VOB
done
Antwort2
Als Skript lsdvd
, das Python verwendet, ffmpeg
um die Kapitel einer DVD in das aktuelle Verzeichnis ( extract-chapters.sh
) zu extrahieren:
#!/bin/sh
_genpy () {
if [ -n "$2" ]; then
lsdvd -x -Oy -t "$2" "$1"
else
lsdvd -x -Oy "$1"
fi
# Process in Python
cat <<EOF
for t in lsdvd['track']:
for c in t['chapter']:
print '{}\t{}\t{}\t{}'.format(t['vts'], t['ix'], c['ix'], c['length'])
EOF
}
_genpy "$@" 2> /dev/null | python | {
dvd_pos=0
while read line
do
dvd_file=$(printf '%02d' $(echo "$line" | cut -f1))
dvd_tr=$(echo "$line" | cut -f2)
dvd_cp=$(echo "$line" | cut -f3)
dvd_len=$(echo "$line" | cut -f4)
file_name="${dvd_tr}.${dvd_cp}.mkv"
cat "$1/VIDEO_TS/VTS_${dvd_file}"_*.VOB | ffmpeg -ss "$dvd_pos" -i - -t "$dvd_len" -c:v libvpx -c:a libvorbis -loglevel error "$file_name"
echo "Created $file_name"
dvd_pos=$(echo "$dvd_pos + $dvd_len" | bc)
done
}
Verwendung:
sh extract-chapters.sh PATH_TO_DVD_CONTENTS [TRACK]