Rippen Sie Kapitel einer DVD, um Dateien zu trennen


8

Ich habe eine DVD mit Cartoons für Kinder und es gibt ein paar Folgen auf jeder von ihnen. Wie kann ich sie so rippen, dass sich jede Episode in einer separaten Datei befindet? Ich denke, jede Episode ist als Kapitel innerhalb eines Titels auf der DVD geschrieben.

Antworten:


10

So extrahieren Sie die .VOB für Titel 2, Kapitel 3

Beachten Sie, dass '-Kapitel 3' und '-Kapitel 3-' von Kapitel 3 bis zum Ende kopiert werden. Wenn die von Ihnen 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 lsdvdTitel, Kapitel, Zellen, Audio, Video usw. für eine physische DVD auflisten. Es scheint jedoch keine Möglichkeit zu geben, a zu verarbeiten .iso. Sie können bei Bedarf eine .iso-Datei bereitstellen .

# 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]}

dvdxchapAuf der anderen Seite kann a verarbeitet werden .iso, es werden jedoch keine Titelinformationen aufgelistet. Sie können jedoch den Titel angeben, von dem Sie Kapitelinformationen erhalten möchten.

  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

Unter Ubuntu dvdxchapist Teil des ogmtoolsPakets.
Eborbob

0

Als Skript, das lsdvdPython verwendet, und ffmpegum die Kapitel auf 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
}

Verwendungszweck:

sh extract-chapters.sh PATH_TO_DVD_CONTENTS [TRACK]

Für die Nicht-POSIX-Tools habe ich lsdvdPython gewählt, und ffmpegweil alle diese Tools in den OSS-Repositorys der Distribution enthalten waren. andere Werkzeuge kamen aus Dritt Repositories (zB dvdbackup, makemkvusw.).
Palswim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.