50のエピソードを含むDVDをロードし(プログラムからVIDEO_TSを選択)、HandBrakeで開くと、そこに50の「タイトル」が表示されています。 320x240出力フォーマットを選択して、変換を開始します。次に、次のタイトルをクリックして、同じことを50回繰り返します。
これをスピードアップする方法はありますか?次のタイトルをクリックしたときに設定が記憶されないためです。プリセットを作成しようとしましたが、プリセットリストから選択するたびにクラッシュしました。
シェルスクリプトを記述して、タイトルごとに HandBrakeCLI を呼び出すことができます。
Linux( ソース ):
$ for i in `seq 4`; do HandBrakeCLI --input /dev/dvd --title $i --preset Normal --output NameOfDisc_Title$i.mp4; done
Windows PowerShell:
for ($title=1; $title -le 4; $title++) {
&"C:\program files\handbrake\HandBrakeCLI.exe" --input D:\ --title $title --preset Normal --output "$title.mp4"
}
グリルからの回答に基づいて:
このスクリプトは固定数のタイトルを使用しませんが、ハンドブレーキがそれらを決定できるようにします。
#!/bin/bash
rawout=$(HandBrakeCLI -i /dev/dvd -t 0 2>&1 >/dev/null)
#read handbrake's stderr into variable
count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)
#parse the variable using grep to get the count
for i in $(seq $count)
do
HandBrakeCLI --input /dev/dvd --title $i --preset Normal --output $i.mp4
done
私の小さな塩を加えて、これはいくつかの章に分割するために思いついたPythonスクリプトです。番号は自動的に抽出されます。
ご了承ください:
次のPythonスクリプトを、スクリプトの引数としてDVDの場所を指定して呼び出すだけです。
#!python
import os
import subprocess
import re
import sys
# Ugly but simple way to get first argument = folder with DVD
# We will get DVD name by removing all / and \
dvd = sys.argv[1]
dvd_name = re.sub(r'.*[/\\]', r'', dvd).rstrip('/').rstrip('\\')
s = subprocess.Popen(
f'HandBrakeCLI -i "{dvd}" -t 0', stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
count = 0
for line in s.stdout:
if re.search(rb"\+ title [0-9]+:", line):
count += 1
print(f'==Extracting {count} chapters from "{dvd}"==')
for i in range(1,count+1):
output = f"{dvd_name}_{i}.mp4"
cmd = f'HandBrakeCLI --input {dvd} --title {i} --preset Normal --output "{output}"'
log = f"encoding_{output}.log"
with open(log, 'wb') as f:
s = subprocess.Popen(cmd, stdout=f, stderr=subprocess.STDOUT)
s.communicate()
if not os.path.isfile(output):
print(f'ERROR during extraction of "{output}"!')
else:
print(f'Successfully extracted Chapter #{i} to "{output}"')
CLIを介してLinux Ubuntuでファイルを抽出することはうまくいきました。以下で使用した行は、MPEG-4と品質を強制するために少し増幅して与えられた構文を繰り返しています。字幕が必要な場合、コマンドライン(CLI)のパラメーターと引数は拡大。
patty@patty:~$ for i in `seq 4`; do HandBrakeCLI -i /media/patty/DVDTITLE -t $i -o DVDTITLE_Title$i.mp4 -e x264 -q 18; done
@ForestPhoenixのcount=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)
行は、最初のチャプターが10秒未満の場合は機能しません。
これはコードの改善です:
rohausgabe=$(HandBrakeCLI -i "$iso" -t 0 2>&1 >/dev/null)
anzahl=$(echo $rohausgabe | grep -Eao "scan: DVD has [0-9]" | awk -F " " '{print $4}')