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

12

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

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

Novato
fonte

Respostas:

12

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

Linux ( fonte ):

$ 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"
}
Salmonete
fonte
Não há opções de GUI para isso? sobre esse exemplo de script do Windows; o que faço se o título $ não for um número? não tenho certeza do que esse código faz. gostaria de explicar?
Novato
1
Opção da GUI: sim, existe: Adicionar à fila -> Adicionar tudo. No entanto, está marcado como (Experimental) e não funcionou quando tentei.
Grilse
$ title não é um número: $ title sempre será um número. É assim que o DVD funciona. Explicação: bem, é um loop for que conta de 1 a 4 e, para cada contagem, executa o HandBrakeCLI.exe com alguns parâmetros. Confira "HandBrakeCLI.exe --help" para ver o que significam os parâmetros.
Grilse
Não tenho certeza do que mais você quer saber. Pergunte algo específico e eu responderei.
Grilse
Obrigado, agora eu entendo melhor. Portanto, é tudo apenas parâmetros de linha de comando, eu posso fazer isso!
Rookie
3

Com base na resposta de 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
FlorestaPhoenix
fonte
Vale a pena notar que, se você quiser que esse valor de contagem esteja correto, precisará passar --min-duration 0 para HandBrakeCLI, caso contrário, você ficará com alguns DVDs em falta. Por exemplo, meu DVD de teste possui uma faixa 1 de 10 segundos que será ignorada na saída final.
Kaithar
2

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

Observe que:

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

Você só precisa chamar o seguinte script Python com a localização do DVD como 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}"')
Jean-Francois T.
fonte
0

Extrair os arquivos no Linux Ubuntu via CLI funcionou muito bem. A linha que usei abaixo repete a sintaxe fornecida com um pouco de amplificação para forçar o MPEG-4 e a qualidade. Se forem necessárias legendas, acredito que os parâmetros e argumentos da linha de comando (CLI) precisariam 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
marca caramanchão
fonte
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}')
kpfroemel
fonte
1
Bem-vindo ao Superusuário. Faça o tour em superuser.com/Tour para aproveitar ao máximo este site. Quanto a esta resposta, sugiro que, quando a pergunta estiver em inglês, você pode responder em inglês? Vejo que após o primeiro comando que você escreveu -> não funciona quando os primeiros itens têm menos de 10 segundos.! Então você mostrou o que é "Melhor"
SDsolar 19/08/17
@ SDD: Tentei traduzir, pois essa resposta foi construtiva. Eu parei de estudar alemão de 14 anos atrás, então eu espero que eu não mal traduzida :)
Jean-François T.
-1

Você pode adicionar as tarefas à fila

Do link 2

Vá em frente e mude o título, capítulo ou fonte em uso e renomeie o arquivo de destino. Ajuste as configurações desejadas. Em seguida, clique no botão "Adicionar à fila" na barra de ferramentas. Repita essas etapas para todo o lote de vídeos que você deseja converter.

Alguns dos comentários dizem que eles estavam tendo problemas com a substituição do arquivo anterior. Então você terá que ter certeza de nomeá-los corretamente. Certifique-se de alguns trabalhos antes de deixá-lo em execução.

sealz
fonte
adicionar à fila não remove o problema da repetição: preciso clicar para selecionar o próximo título, alterar a resolução, clicar em "adicionar fila", repetir. o que eu quero é simplesmente converter todos os títulos de uma só vez com exatamente as mesmas configurações. este parece ser possível apenas para capítulos
Rookie