Jak łatwo przekonwertować 50 odcinków z DVD na 50 .mp4 za pomocą HandBrake?


12

Załadowałem DVD z 50 odcinkami (wybrałem VIDEO_TS z programu), teraz kiedy otwieram go w HandBrake, pokazuje tam 50 „tytułów”. Wybieram format wyjściowy 320 x 240 i zaczynam konwertować. Następnie klikam do następnego tytułu, robię to samo, 50 razy.

Czy jest jakiś sposób, aby to przyspieszyć ?, ponieważ nie zapamiętuje moich ustawień po kliknięciu następnego tytułu. i próbowałem zrobić preset, ale zawiesza się za każdym razem, gdy wybieram go z listy presetów.

Odpowiedzi:


12

Możesz napisać skrypt powłoki, aby wywołać HandBrakeCLI dla każdego tytułu.

Linux ( źródło ):

$ 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"
}

Czy nie ma w tym opcji GUI? o tym przykładzie skryptu Windows; co mam zrobić, jeśli tytuł $ nie jest liczbą? nie jestem pewien, co robi ten kod. chcesz wyjaśnić?
Świeżak

1
Opcja GUI: tak jest: Dodaj do kolejki -> Dodaj wszystko. Jest on jednak oznaczony jako (eksperymentalny) i nie działał, gdy go wypróbowałem.
Grilse

$ title nie jest liczbą: $ title zawsze będzie liczbą. Tak działa DVD. Objaśnienie: cóż, jest to pętla for, która liczy od 1 do 4, i dla każdej liczby wykonuje HandBrakeCLI.exe z pewnymi parametrami. Sprawdź „HandBrakeCLI.exe --help”, aby zobaczyć, co oznaczają parametry.
Grilse

Nie jestem pewien, co jeszcze chcesz wiedzieć. Zapytaj o coś konkretnego, a ja odpowiem.
Grilse

Dzięki, teraz rozumiem to lepiej. Więc chodzi tylko o parametry wiersza poleceń, mogę to zrobić!
Świeżak

3

Na podstawie odpowiedzi Grilse:

Ten skrypt nie używa stałej liczby tytułów, ale pozwala na ich określenie przez hamulec ręczny.

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

Warto zauważyć, że jeśli chcesz, aby ta liczba zliczeń była prawidłowa, musisz przekazać wartość --min-duration 0 do HandBrakeCLI, w przeciwnym razie brakuje niektórych DVD. Na przykład moja testowa płyta DVD ma 10-sekundową ścieżkę 1, która zostanie zignorowana na końcowym wyjściu.
Kaithar

2

Dodając moje małe ziarno soli, oto skrypt w języku Python, który wymyśliłem, aby podzielić go na kilka rozdziałów. Liczba jest pobierana automatycznie.

Uwaga:

  1. Potrzebujesz Handbrake CLI (obecnie dostępny pod tym adresem: https://handbrake.fr/downloads2.php )
  2. Musisz mieć folder instalacyjny CLI hamulca ręcznego w swojej ŚCIEŻCE

Musisz tylko wywołać następujący skrypt w języku Python z lokalizacją dysku DVD jako argumentem skryptu.

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

Wyodrębnianie plików w systemie Linux Ubuntu za pomocą interfejsu CLI działało świetnie. Linia, której użyłem poniżej, powtarza składnię podaną z niewielkim wzmocnieniem, aby wymusić MPEG-4 i jakość. Jeśli potrzebne są napisy, uważam, że parametry wiersza poleceń (CLI) i argumenty wymagają rozszerzenia.

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

Linia count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)z @ForestPhoenix nie działa, gdy pierwszy rozdział jest krótszy niż 10 sekund.

To jest ulepszenie kodu:

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
Witamy w Superuser. Zapoznaj się z przewodnikiem na stronie superuser.com/Tour, aby uzyskać jak najwięcej z tej witryny. Jeśli chodzi o tę odpowiedź, sugeruję, że jeśli pytanie jest w języku angielskim, czy możesz odpowiedzieć w języku angielskim? Widzę, że po pierwszym poleceniu, które napisałeś -> nie działa, gdy pierwsze elementy są krótsze niż 10 sekund! Potem pokazałeś, co jest „lepsze”
SDsolar

@Ssolsol: Próbowałem tłumaczyć, ponieważ ta odpowiedź była konstruktywna. Przestałem uczyć się niemieckiego 14 lat temu, więc mam nadzieję, że nie popełniłem błędów w tłumaczeniu :)
Jean-Francois T.,

-1

Możesz dodać zadania do kolejki

Z linku 2

Po prostu zmień tytuł, rozdział lub używane źródło i pamiętaj o zmianie nazwy pliku docelowego. Dostosuj dowolne ustawienia. Następnie kliknij przycisk „Dodaj do kolejki” na pasku narzędzi. Powtórz te kroki dla całej partii filmów, które chcesz przekonwertować.

Niektóre komentarze mówią, że mieli problemy z nadpisaniem poprzedniego pliku. Musisz więc upewnić się, że odpowiednio je nazwałeś. Upewnij się, że kilka działa, zanim go uruchomisz.


dodawanie do kolejki nie usuwa problemu z powtarzaniem: muszę kliknąć, aby wybrać następny tytuł, zmienić rozdzielczość, kliknąć „dodaj kolejkę”, powtórz. chcę po prostu przekonwertować wszystkie tytuły jednocześnie z dokładnie tymi samymi ustawieniami. wydaje się to możliwe tylko w rozdziałach
Świeżak

-1
    for ($title=1; $title -le 4; $title++) {
    &"C:\Program Files\HandBrake\HandBrakeCLI.exe" --input "source\sourceVideo.mp4" --title $title -e x264 -o "destination\$title.mp4"
}

Jest to oparte na odpowiedzi @Grilse, której kod jest już nieaktualny.


Witamy w Super User! Chociaż może to odpowiedzieć na pytanie, lepszym rozwiązaniem byłoby podanie wyjaśnienia, dlaczego tak się dzieje.
DavidPostill
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.