View difference between Paste ID: SRHihAED and jVuHXA2f
SHOW: | | - or go back to the newest paste.
1-
#!/bin/bash
1+
#!/bin/sh
2
3-
if [ -z $1 ]; then
3+
# License: Beerware 2017
4-
 echo "no file given"
4+
# Author: Xyberviri
5-
exit 0
5+
# Purpose: to make it easier to rip .iso files into .mkv files.
6
# If you find this script useful you can buy me a beer here: https://www.paypal.me/xyberviri
7
# wget https://pastebin.com/raw/SRHihAED -O- | tr -d '\r' >iso2mkv.sh;chmod +x iso2mkv.sh
8-
if [ -z $2 ]; then
8+
9-
    outFilePrefix="$(echo $1 | sed 's=.*/==;s/.iso//I')"
9+
# Usage info
10
show_help() {
11-
    outFilePrefix=$2
11+
cat << EOF
12
Usage: ${0##*/} [-hv] [-s STARTING TITLE] [-e ENDING TITLE] [-o OUTFILE OFFSET] [-f OUTFILE] [FILE]...
13
    Export titles from FILE to OUTFILE, FILE should be a .iso format.
14-
if [ -z $3 ]; then
14+
15-
    outTitleOffset=1
15+
    -h          display this help and exit
16
    -f OUTFILE  name out output file, DEFAULTS to the input FILE.mkv
17-
    outTitleOffset=$3
17+
    -s #        starting title, DEFAULT 1
18
    -e #        ending title, DEFAULTs to last title
19
    -o #        offset the exported title to this, useful when dealing
20-
rawout=$(HandBrakeCLI --min-duration 0 -i $1 -t 0 2>&1 >/dev/null)
20+
                with multi dvd seasons. This option also forces OUTFILE##.mkv behaviour.
21
    -i          inspect the .iso and lists title index, lengths and total title counts.
22
23-
echo $count
23+
./iso2mkv.sh -e 4 -f SomeShowSeason1E  dvd.iso
24-
echo $rawout | grep -Eao "\\+ duration: [0-9]+:[0-9]+:[0-9]+"
24+
..exports titles 1 - 4 to files SomeShowSeason1E{01-04}.mkv
25
26-
for i in $(seq $count)
26+
./iso2mkv.sh -s 5 -e 10 dvd.iso
27
..exports titles 5 - 10 to files  dvd{05-10}.mkv
28-
    title=$(printf "%02d" $outTitleOffset)
28+
29-
    ((outTitleOffset++))
29+
./iso2mkv.sh -e 10 -o 11 dvd2.iso
30-
    echo -e "\n\n\nExtracting title $i as '${outFilePrefix}${title}.mkv'\n\n\n"
30+
..exports titles 1 - 10 to files  dvd2{11-20}.mkv
31-
    HandBrakeCLI -i $1 -t $i --preset Normal --output ${outFilePrefix}${title}.mkv
31+
32
./iso2mkv.sh -e 1 dvd.iso
33
..exports titles 1 as dvd.mkv
34-
echo -e "\n\n\niso2mkv complete!"
34+
35
36
This script requires handbrake, install with the following:
37-
#prereqs:
37+
    add-apt-repository ppa:stebbins/handbrake-releases
38-
#sudo add-apt-repository ppa:stebbins/handbrake-releases
38+
    apt-get update
39-
#sudo apt-get update
39+
    apt-get install handbrake-cli
40-
#apt-get install handbrake-cli libdvdcss2
40+
41
Customize the export on the very last line of the script
42-
#It's worth noting that if you want that count value to be right you'll need to pass --min-duration 0
42+
Handbrake CLI here:
43-
#to HandBrakeCLI otherwise you'll come up short on some DVDs.
43+
https://handbrake.fr/docs/en/1.0.0/cli/cli-guide.html
44-
#default is the track length needs to be >10 seconds
44+
45-
#https://handbrake.fr/docs/en/1.0.0/cli/cli-guide.html
45+
EOF
46-
#version 2 of this script: https://pastebin.com/SRHihAED
46+
}
47
48
# Initialize our own variables:
49
output_file=""
50
verbose=0
51
offset=0
52
title_start=1
53
title_end=0
54
inspect=0
55
autonumber=0
56
57
OPTIND=1
58
# Resetting OPTIND is necessary if getopts was used previously in the script.
59
# It is a good idea to make OPTIND local if you process options in a function.
60
61
while getopts hvif:o:s:e: opt; do
62
    case $opt in
63
        h)
64
            show_help
65
            exit 0
66
            ;;
67
        v)  verbose=$((verbose+1))
68
            ;;
69
        i)  inspect=$((inspect+1))
70
            ;;
71
        f)  output_file=$OPTARG
72
            ;;
73
        o)  offset=$OPTARG
74
            ((autonumber++))
75
            ;;
76
        s)  title_start=$OPTARG
77
            ;;
78
        e)  title_end=$OPTARG
79
            ;;
80
        *)
81
            show_help >&2
82
            exit 1
83
            ;;
84
    esac
85
done
86
shift "$((OPTIND-1))"   # Discard the options and sentinel --
87
88
#input file
89
FILE="$@"
90
if [ -f "$FILE" ]
91
then
92
   printf 'iso2mkv: <%s>\n' "$FILE"
93
else
94
   echo "File $FILE does not exist" >&2
95
   exit 0
96
fi
97
98
#output filename
99
if [ -z $output_file ]; then
100
    output_file="$(echo $FILE | sed 's=.*/==;s/.iso//I')"
101
fi
102
103
#count number of titles in iso
104
rawout=$(HandBrakeCLI --min-duration 0 -i $FILE -t 0 2>&1 >/dev/null)
105
count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)
106
title_list=$(echo $rawout | grep -Eao "\\+ duration: [0-9]+:[0-9]+:[0-9]+"| sed 's/+\sduration://g')
107
108
#inspect to spit out the title lengths so we know what titles we want to export.
109
if [ $inspect -gt 0 ]
110
then
111
 tIndex=1
112
 for title in $title_list; do
113
   printf 'Title: %2s %s\n' "$tIndex" "$title"
114
   ((tIndex++))
115
 done
116
 exit 0
117
fi
118
119
#bound title end to max count
120
if [ $title_end -lt 1 ] || [ $title_end -gt $count ]
121
then
122
   title_end=$count
123
fi
124
125
#bound title_start to title_end
126
if [ $title_start -gt $title_end ]
127
then
128
   title_start=$title_end
129
fi
130
131
#set offset to 1 if we haven't overridden it.
132
if [ $offset -lt 1 ]
133
then
134
   offset=$title_start
135
fi
136
137
#enable auto numbering if exporting more then 1 title
138
if [ $title_end -ne $title_start ]
139
then
140
  ((autonumber++))
141
fi
142
143
#set the file name
144
filename="${output_file}.mkv"
145
146
#loop from $title_start to $title_end
147
for i in $(seq $title_start $title_end)
148
do
149
    #override filename because we have more then one title, or -o was used.
150
    if [ $autonumber -gt 0 ]
151
    then
152
        filename="${output_file}$(printf "%02d" $offset).mkv"
153
        ((offset++))
154
    fi
155
    echo -e "\tExtracting title $i as '${filename}'\n"
156
    HandBrakeCLI -i "$FILE" -t $i --preset Normal --output "${filename}"
157
done