Rip bab DVD untuk memisahkan file

8

Saya punya DVD dengan kartun untuk anak-anak dan ada beberapa episode di setiap dari mereka. Bagaimana saya bisa menyalinnya sedemikian rupa sehingga setiap episode dalam file yang terpisah? Saya pikir setiap episode ditulis sebagai bab dalam satu judul di DVD.

Grzenio
sumber

Jawaban:

10

Untuk mengekstrak. VOB untuk Judul 2, Bab 3

Perhatikan bahwa '-bab 3' dan '-bab 3' akan menyalin dari bab 3 sampai akhir, dan jika nomor bab yang Anda tentukan tidak valid, opsi diabaikan, dan karenanya akan menyalin judul lengkap.

# 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  

Anda dapat menggunakan lsdvddaftar judul, bab, sel, audio, video, dll untuk DVD fisik. Namun, sepertinya (?) Tidak memiliki cara untuk memproses a .iso. Anda dapat memasang .iso , jika perlu.

# 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, di sisi lain, dapat memproses a .iso, tetapi tidak mencantumkan info judul. Namun, Anda dapat menentukan judul dari mana Anda menginginkan informasi bab.

  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')"   

Saat Anda tahu nomor judul yang Anda inginkan, dan tahu jumlah sel, Anda bisa membuangnya dalam satu lingkaran:

# 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
Peter.O
sumber
Di Ubuntu dvdxchapadalah bagian dari ogmtoolspaket.
Eborbob
0

Sebagai skrip yang menggunakan lsdvd, Python, dan ffmpeguntuk mengekstrak Bab dalam DVD ke direktori saat ini ( extract-chapters.sh):

#!/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
}

Pemakaian:

sh extract-chapters.sh PATH_TO_DVD_CONTENTS [TRACK]
palswim
sumber
Untuk alat-alat non-POSIX, saya memilih lsdvd, Python, dan ffmpegkarena semua itu ada dalam repositori OSS distribusi; alat lain berasal dari repositori pihak ketiga (mis dvdbackup. makemkv, dll.)
palswim