Làm thế nào để chuyển đổi 50 tập từ DVD thành 50 .mp4 bằng HandBrake, dễ dàng?


12

Tôi đã tải một đĩa DVD với 50 tập trong đó (chọn VIDEO_TS từ chương trình), bây giờ khi tôi mở nó trong HandBrake, nó hiển thị 50 "tiêu đề" trong đó. tôi chọn định dạng đầu ra 320x240 và bắt đầu chuyển đổi. Sau đó, tôi nhấp vào tiêu đề tiếp theo, làm lại, 50 lần.

Có cách nào để tăng tốc độ này không?, Vì nó không nhớ cài đặt của tôi khi tôi nhấp vào tiêu đề tiếp theo. và tôi đã cố gắng để cài đặt trước nhưng nó gặp sự cố mỗi lần tôi chọn nó từ danh sách cài đặt trước.

Câu trả lời:


12

Bạn có thể viết một tập lệnh shell để gọi HandBrakeCLI cho mỗi tiêu đề.

Linux ( nguồn ):

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

Không có bất kỳ lựa chọn gui cho điều này? về ví dụ kịch bản windows đó; Tôi phải làm gì nếu tiêu đề $ không phải là số? Tôi không chắc mã đó làm gì. quan tâm để giải thích?
Tân binh

1
Tùy chọn GUI: có, có: Thêm vào hàng đợi -> Thêm tất cả. Tuy nhiên, nó được đánh dấu là (Thử nghiệm) và nó không hoạt động khi tôi thử.
Grilse

$ title không phải là số: $ title sẽ luôn là số. Đó là cách thức hoạt động của DVD. Giải thích: tốt, đó là một vòng lặp for đếm từ 1 đến 4 và với mỗi số đếm, nó thực thi HandBrakeCLI.exe với một số tham số. Kiểm tra "HandBrakeCLI.exe - trợ giúp" để xem ý nghĩa của các tham số.
Grilse

Không chắc chắn những gì bạn muốn biết. Hỏi một cái gì đó cụ thể và tôi sẽ trả lời.
Grilse

Cảm ơn, bây giờ tôi hiểu nó tốt hơn. Vì vậy, tất cả chỉ là về các tham số dòng lệnh, tôi có thể làm điều đó!
Tân binh

3

Dựa trên câu trả lời từ Grilse:

Kịch bản này không sử dụng một số tiêu đề cố định, nhưng cho phép phanh tay xác định chúng.

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

Điều đáng chú ý là nếu bạn muốn giá trị đếm đó là đúng, bạn sẽ cần chuyển - thời lượng tối thiểu 0 cho HandBrakeCLI, nếu không, bạn sẽ xuất hiện trên một số DVD. Ví dụ, DVD thử nghiệm của tôi có bản nhạc 10 giây 1 sẽ bị bỏ qua trong đầu ra cuối cùng.
Kaithar

2

Thêm hạt muối nhỏ của tôi, đây là kịch bản Python tôi đã nghĩ ra để chia thành nhiều chương. Số được trích xuất tự động.

Lưu ý rằng:

  1. Bạn cần Handbrake CLI (hiện có sẵn tại địa chỉ này: https://handbrake.fr/doads2.php )
  2. Bạn cần có thư mục cài đặt của Handbrake CLI trong PATH của bạn

Bạn chỉ cần gọi tập lệnh Python sau với vị trí của DVD làm đối số của tập lệnh.

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

Trích xuất các tệp trong Linux Ubuntu thông qua CLI hoạt động rất tốt. Dòng tôi đã sử dụng dưới đây lặp lại cú pháp được cung cấp với một chút khuếch đại để buộc MPEG-4 và chất lượng. Nếu cần phụ đề, tôi tin rằng các tham số và đối số dòng lệnh (CLI) sẽ cần được mở rộng.

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

Dòng count=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)từ @ForestPhoenix không hoạt động khi chương đầu tiên nhỏ hơn 10 giây.

Đây là một cải tiến của mã:

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
Chào mừng đến với Superuser. Vui lòng tham quan tại superuser.com/Tour để tận dụng tối đa trang web này. Đối với câu trả lời này, tôi đề nghị rằng khi câu hỏi bằng tiếng Anh, bạn có thể vui lòng trả lời bằng tiếng Anh không? Tôi thấy rằng sau lệnh đầu tiên bạn đã viết -> không hoạt động khi các mục đầu tiên dưới 10 giây.! Sau đó, bạn đã cho thấy "Tốt hơn"
SDsolar

@SDsolar: Tôi đã cố gắng dịch vì câu trả lời này mang tính xây dựng. Tôi đã ngừng học tiếng Đức 14 năm trước vì vậy tôi hy vọng tôi đã không dịch sai :)
Jean-Francois T.

-1

Bạn có thể thêm các nhiệm vụ vào hàng đợi

Từ liên kết 2

Chỉ cần tiếp tục và thay đổi tiêu đề, chương hoặc nguồn đang sử dụng và chắc chắn đổi tên tệp đích. Tinh chỉnh bất kỳ cài đặt nào bạn muốn. Sau đó nhấp vào nút "Thêm vào hàng đợi" trên thanh công cụ. Lặp lại các bước này cho toàn bộ lô video bạn muốn chuyển đổi.

Một số ý kiến ​​nói rằng họ gặp vấn đề với việc ghi đè tập tin trước đó. Vì vậy, bạn sẽ phải chắc chắn rằng bạn đặt tên cho chúng đúng. Hãy chắc chắn rằng một vài công việc trước khi bạn để nó chạy.


thêm vào hàng đợi không loại bỏ vấn đề lặp lại: tôi cần nhấp để chọn tiêu đề tiếp theo, thay đổi độ phân giải, nhấp vào "thêm hàng đợi", lặp lại. những gì tôi muốn là chỉ cần chuyển đổi tất cả các tiêu đề cùng một lúc với các cài đặt chính xác. điều này dường như chỉ có thể có cho các chương
Rookie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.