Como converter 50 episódios de DVD em 50 .mp4 com HandBrake, facilmente?

10

Eu carreguei um DVD com 50 episódios nele (escolhi VIDEO_TS do programa), agora quando eu o abro no HandBrake, ele mostra 50 "títulos" lá. Eu escolho o formato de saída 320x240 e começo a conversão. Então clico para o próximo título, faço o mesmo novamente, 50 vezes.

Existe alguma maneira de acelerar isso ?, porque ele não lembra minhas configurações quando clico no próximo título. e eu tentei fazer a predefinição, mas ela falha toda vez que eu escolho na lista de presets.

    
por Rookie 27.02.2012 / 13:35

6 respostas

11

Você pode escrever um script de shell para invocar HandBrakeCLI para cada título.

Linux ( source ):

$ 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"
}
    
por 24.02.2013 / 16:23
2

Com base na resposta da Grilse:

Este script não usa um número fixo de títulos, mas permite que o freio de mão os determine.

#!/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
    
por 07.12.2015 / 01:11
0

Você pode adicionar as tarefas à fila

do link 2

Just go ahead and change the title, chapter, or source in use, and be sure to rename the destination file. Tweak any settings you want. Then click the "Add to queue" button on the toolbar. Repeat these steps for the whole batch of videos you wish to convert.

Alguns dos comentários dizem que eles estavam tendo problemas para sobrescrever o arquivo anterior. Então você terá que ter certeza de nomeá-los corretamente. Certifique-se de que alguns funcionem antes de deixá-lo funcionando.

    
por 27.02.2012 / 14:54
0

Extraindo os arquivos no Linux O Ubuntu via CLI funcionou muito bem. A linha que usei abaixo repete a sintaxe dada com uma pequena amplificação para forçar o MPEG-4 e a qualidade. Se as legendas forem necessárias, acredito que os parâmetros e argumentos da linha de comando (CLI) precisem ser expandidos.

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
    
por 21.10.2015 / 23:40
0

A linha count=$(echo $rawout | grep -Eao "\+ title [0-9]+:" | wc -l) do @ForestPhoenix não funciona quando o primeiro capítulo é menor que 10 segundos.

Esta é uma melhoria do código:

rohausgabe=$(HandBrakeCLI -i "$iso" -t 0 2>&1 >/dev/null)
anzahl=$(echo $rohausgabe | grep -Eao "scan: DVD has [0-9]" | awk -F " " '{print $4}')
    
por 20.08.2017 / 00:28
0

Adicionando meu pequeno grão de sal, este é o script Python que eu criei para dividir em vários capítulos. O número é extraído automaticamente.

Observe que:

  1. Você precisa do CLI do Handbrake (atualmente disponível neste endereço: link )
  2. Você precisa ter a pasta de instalação do Handbrake CLI no seu PATH

Você só precisa chamar o seguinte script Python com o local do DVD como o argumento do script.

#!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}"')
    
por 19.07.2018 / 09:15