web-dev-qa-db-ja.com

HandBrakeでDVDから50のエピソードを50の.mp4に簡単に変換する方法は?

50のエピソードを含むDVDをロードし(プログラムからVIDEO_TSを選択)、HandBrakeで開くと、そこに50の「タイトル」が表示されています。 320x240出力フォーマットを選択して、変換を開始します。次に、次のタイトルをクリックして、同じことを50回繰り返します。

これをスピードアップする方法はありますか?次のタイトルをクリックしたときに設定が記憶されないためです。プリセットを作成しようとしましたが、プリセットリストから選択するたびにクラッシュしました。

12
Rookie

シェルスクリプトを記述して、タイトルごとに 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"
}
12
Grilse

グリルからの回答に基づいて:

このスクリプトは固定数のタイトルを使用しませんが、ハンドブレーキがそれらを決定できるようにします。

#!/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
3
ForestPhoenix

私の小さな塩を加えて、これはいくつかの章に分割するために思いついたPythonスクリプトです。番号は自動的に抽出されます。

ご了承ください:

  1. Handbrake CLIが必要です(現在このアドレスで利用可能: https://handbrake.fr/downloads2.php
  2. [〜#〜]パス[〜#〜]にHandbrake CLIのインストールフォルダが必要です

次の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}"')
2

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
0
mark bower

@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}')
0
kpfroemel