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


12

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

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

回答:


12

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

これにGUIオプションはありませんか?そのWindowsスクリプトの例について。$ titleが数字ではない場合はどうすればよいですか?そのコードが何をするかわからない。説明する気?
ルーキー

1
GUIオプション:あり:キューに追加->すべて追加。ただし、(実験的)としてマークされており、試したときに機能しませんでした。
グリルス

$ titleは数字ではありません:$ titleは常に数字です。これがDVDの仕組みです。説明:まあ、それは1から4までカウントするforループであり、カウントごとにいくつかのパラメーターを指定してHandBrakeCLI.exeを実行します。「HandBrakeCLI.exe --help」をチェックして、パラメーターの意味を確認してください。
グリルス

他に何を知りたいかわかりません。具体的な質問をして、答えます。
グリルス

おかげで、今ではよく理解できました。コマンドラインパラメータだけで、それができます!
ルーキー

3

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

カウント値を正しくしたい場合は、-min-duration 0をHandBrakeCLIに渡す必要があることに注意してください。そうしないと、一部のDVDが不足します。たとえば、テストDVDには10秒のトラック1があり、最終出力では無視されます。
-Kaithar

2

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

ご了承ください:

  1. Handbrake CLIが必要です(現在、このアドレスで入手可能です:https : //handbrake.fr/downloads2.php
  2. PATHに Handbrake CLIのインストールフォルダーが必要です。

DVDの場所をスクリプトの引数として使用して、次のPythonスクリプトを呼び出すだけです。

#!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}"')

0

Linux UbuntuでCLIを介してファイルを抽出すると、うまくいきました。以下で使用した行は、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

count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)@ForestPhoenix の行は、最初の章が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}')

1
スーパーユーザーへようこそ。このサイトを最大限に活用するには、superuser.com / Tourのツアーに参加してください。この回答については、質問が英語の場合、英語で回答してください。私が書いた最初のコマンドの後、最初の項目が10秒未満の場合、->は機能しません。次に、「より良い」ものを示しました
-SDsolar

@SDsolar:この答えは建設的だったので翻訳しようとしました。私は14年前にドイツ語の勉強をやめたので、誤訳していないことを願っています:)
ジャン-フランソワT.

-1

タスクをキューに追加できます

リンク2から

先に進み、使用中のタイトル、チャプター、またはソースを変更し、宛先ファイルの名前を変更してください。必要な設定を調整します。次に、ツールバーの[キューに追加]ボタンをクリックします。変換する動画のバッチ全体に対してこれらの手順を繰り返します。

コメントのいくつかは、以前のファイルの上書きに問題があったと言っています。そのため、適切な名前を付ける必要があります。実行したままにする前に、いくつかの作業を確認してください。


キューに追加しても繰り返しの問題は解消されません。クリックして次のタイトルを選択し、解像度を変更し、「キューを追加」をクリックして、繰り返します。まったく同じ設定ですべてのタイトルを一度に変換するだけです。これはチャプターで
ルーキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.