Rip các chương của DVD để tách các tệp


8

Tôi có một DVD với phim hoạt hình cho trẻ em và có một vài tập trên mỗi người trong số họ. Làm thế nào tôi có thể trích xuất chúng sao cho mỗi tập phim nằm trong một tệp riêng biệt? Tôi nghĩ mỗi tập phim được viết dưới dạng một chương trong một tiêu đề trên DVD.

Câu trả lời:


10

Để trích xuất .VOB cho Tiêu đề 2, Chương 3

Lưu ý rằng '-CHAP 3' và '-ch CHƯƠNG 3-' sẽ sao chép từ chương 3 đến cuối và nếu số chương bạn chỉ định không hợp lệ, tùy chọn sẽ bị bỏ qua và do đó sẽ sao chép tiêu đề đầy đủ.

# 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  

Bạn có thể sử dụng lsdvdđể liệt kê tiêu đề, chương, ô, âm thanh, video, v.v. cho DVD vật lý. Tuy nhiên, dường như không có cách nào để xử lý a .iso. Bạn có thể gắn một .iso , nếu cần.

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

dvdxchapmặt khác, có thể xử lý một .iso, nhưng nó không liệt kê thông tin tiêu đề. Tuy nhiên, bạn có thể chỉ định tiêu đề mà bạn muốn thông tin chương.

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

Khi bạn biết số tiêu đề bạn muốn và biết số lượng ô, bạn có thể kết xuất chúng trong một vòng lặp:

# 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

Trên Ubuntu dvdxchaplà một phần của ogmtoolsgói.
Eborbob

0

Là một tập lệnh sử dụng lsdvd, Python và ffmpegđể trích xuất các Chương trong DVD sang thư mục hiện tại ( 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
}

Sử dụng:

sh extract-chapters.sh PATH_TO_DVD_CONTENTS [TRACK]

Đối với các công cụ không phải POSIX, tôi đã chọn lsdvd, Python và ffmpegvì tất cả các công cụ này đều có trong kho OSS của bản phân phối; các công cụ khác đến từ kho của bên thứ ba (ví dụ dvdbackup, makemkvvv).
palswim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.