11

Я загрузил DVD с 50 эпизодами в нем (выбрал VIDEO_TS из программы), теперь, когда я открываю его в HandBrake, он показывает там 50 "титров". Я выбираю выходной формат 320x240 и начинаю конвертировать. Затем я нажимаю на следующий заголовок, делаю то же самое снова, 50 раз.

Есть ли способ ускорить это ?, потому что он не запоминает мои настройки, когда я нажимаю на следующий заголовок. и я попытался сделать пресет, но он вылетает каждый раз, когда я выбираю его из списка пресетов.

6 ответов6

11

Вы можете написать сценарий оболочки для вызова 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"
}
2

Основываясь на ответе Грильса:

Этот сценарий не использует фиксированное количество заголовков, но позволяет ручному тормозу определять их.

#!/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
1

Добавляя немного зерна, это скрипт Python, который я придумал, чтобы разделить на несколько глав. Номер извлекается автоматически.

Обратите внимание, что:

  1. Вам нужен CLI Handbrake (в настоящее время доступен по этому адресу: https://handbrake.fr/downloads2.php)
  2. У вас должна быть папка установки CLI Handbrake в вашем PATH

Вам просто нужно вызвать следующий скрипт 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}"')
0

Вы можете добавить задачи в очередь

Из ссылки 2

Просто измените заголовок, главу или используемый источник и обязательно переименуйте конечный файл. Настройте любые параметры, которые вы хотите. Затем нажмите кнопку "Добавить в очередь" на панели инструментов. Повторите эти шаги для всей серии видео, которые вы хотите конвертировать.

В некоторых комментариях говорится, что у них были проблемы с перезаписью предыдущего файла. Таким образом, вы должны быть уверены, что вы называете их правильно. Убедитесь, что немного поработали, прежде чем оставить его запущенным.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .