翻录DVD的章节以分隔文件


8

我有一张带卡通片的DVD,每个孩子都有几集。我如何撕裂它们,使每个情节都保存在单独的文件中?我认为每一集都作为DVD中一个标题中的一章来写。

Answers:


10

为标题2,第3章提取.VOB

请注意,“-第3章”和“-第3章”将从第3章复制到末尾,并且如果您指定的章号无效,则该选项将被忽略,因此将复制完整标题。

# 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  

您可以lsdvd用来列出物理DVD的标题,章节,单元格,音频,视频等。但是,似乎没有办法处理.iso。如果需要,可以安装.iso

# 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另一方面,可以处理.iso,但不列出标题信息。但是,您可以指定想要其章节信息的标题。

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

当您知道所需的标题编号并知道了单元格的数量时,可以将它们转储为循环:

# 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

在Ubuntu上dvdxchapogmtools软件包的一部分。
Eborbob

0

作为使用lsdvd,Python和ffmpeg将DVD中的章节提取到当前目录(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
}

用法:

sh extract-chapters.sh PATH_TO_DVD_CONTENTS [TRACK]

对于非POSIX工具,我选择了lsdvdPython,ffmpeg因为所有这些都来自发行版的OSS存储库;因此,我选择了Python 。其他工具从第三方仓库(如来dvdbackupmakemkv等)。
palswim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.