![如何使用 HandBrake 轻松地将 DVD 中的 50 集转换为 50 集 .mp4?](https://linux22.com/image/1306243/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20HandBrake%20%E8%BD%BB%E6%9D%BE%E5%9C%B0%E5%B0%86%20DVD%20%E4%B8%AD%E7%9A%84%2050%20%E9%9B%86%E8%BD%AC%E6%8D%A2%E4%B8%BA%2050%20%E9%9B%86%20.mp4%EF%BC%9F.png)
我加载了一张包含 50 集的 DVD(从程序中选择了 VIDEO_TS),现在当我在 HandBrake 中打开它时,它显示其中有 50 个“标题”。我选择 320x240 输出格式并开始转换。然后我单击下一个标题,重复同样的操作,50 次。
有什么办法可以加快速度吗?因为当我单击下一个标题时,它不记得我的设置。我试图进行预设,但每次我从预设列表中选择它时它都会崩溃。
答案1
您可以编写 shell 脚本来调用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
根据 Grilse 的回答:
该脚本不使用固定数量的标题,而是让 handbrake 确定它们。
#!/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
答案3
这是我根据自己的理解编写的 Python 脚本,用于将章节分成几部分。编号会自动提取。
注意:
- 你需要Handbrake 命令行界面(目前可从以下地址获取:https://handbrake.fr/downloads2.php)
- 你需要在你的小路
您只需要调用以下 Python 脚本,并将 DVD 的位置作为脚本的参数(类似于python episodes_splitter.py "path of my folder"
)。
import os
import re
import subprocess
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'.*[/\\]', '', dvd).rstrip('/').rstrip('\\')
s = subprocess.Popen(
['HandBrakeCLI', '-i', dvd, '-t', '0'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
if not s.stdout:
print(f'ERROR: Could not open "{dvd}"!')
sys.exit(1)
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 = ['HandBrakeCLI', '--input', dvd, '--title', str(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}"')
答案4
当第一章少于 10 秒时,@ForestPhoenix 的话count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)
不起作用。
这是代码的改进:
rohausgabe=$(HandBrakeCLI -i "$iso" -t 0 2>&1 >/dev/null)
anzahl=$(echo $rohausgabe | grep -Eao "scan: DVD has [0-9]" | awk -F " " '{print $4}')