วิธีแปลง 50 ตอนจาก DVD เป็น 50 .mp4 ด้วย HandBrake ได้อย่างง่ายดาย?


12

ฉันโหลดดีวีดีที่มี 50 ตอน (เลือก VIDEO_TS จากโปรแกรม) ตอนนี้เมื่อฉันเปิดใน HandBrake จะแสดง 50 "ชื่อ" ในนั้น ฉันเลือกรูปแบบเอาต์พุตขนาด 320x240 และเริ่มการแปลง จากนั้นฉันคลิกที่ชื่อถัดไปทำแบบเดียวกันอีกครั้ง 50 ครั้ง

มีวิธีใดที่เร่งความเร็วนี้หรือไม่เพราะไม่จำการตั้งค่าของฉันเมื่อฉันคลิกที่ชื่อถัดไป และฉันพยายามตั้งค่าล่วงหน้า แต่มันล้มเหลวทุกครั้งที่ฉันเลือกจากรายการที่ตั้งไว้ล่วงหน้า

คำตอบ:


12

คุณสามารถเขียนเชลล์สคริปต์เพื่อเรียกใช้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"
}

ไม่มีตัวเลือก GUI สำหรับสิ่งนี้หรือไม่? เกี่ยวกับตัวอย่างของ windows windows ฉันจะทำอย่างไรถ้า $ title ไม่ใช่ตัวเลข? ฉันไม่แน่ใจว่ารหัสนั้นทำอะไร สนใจที่จะอธิบาย?
Rookie

1
ตัวเลือก GUI: ใช่มี: เพิ่มในคิว -> เพิ่มทั้งหมด อย่างไรก็ตามมันถูกทำเครื่องหมายเป็น (ทดลอง) และมันไม่ทำงานเมื่อฉันลอง
Grilse

$ title ไม่ใช่ตัวเลข: $ title จะเป็นตัวเลขเสมอ นั่นเป็นวิธีการทำงานของ DVD คำอธิบาย: มันเป็น for-loop ที่นับจาก 1 ถึง 4 และสำหรับแต่ละ count มันจะเรียกใช้ HandBrakeCLI.exe พร้อมพารามิเตอร์บางตัว ลองดู "HandBrakeCLI.exe --help" เพื่อดูความหมายของพารามิเตอร์
Grilse

ไม่แน่ใจว่าคุณต้องการรู้อะไรอีก ถามสิ่งที่เฉพาะเจาะจงและฉันจะตอบ
Grilse

ขอบคุณตอนนี้ฉันเข้าใจแล้วดีขึ้น ดังนั้นทั้งหมดเกี่ยวกับพารามิเตอร์ commandline ฉันสามารถทำมันได้!
Rookie

3

ตามคำตอบจาก 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

มันน่าสังเกตว่าถ้าคุณต้องการให้ค่าการนับนั้นถูกต้องคุณจะต้องผ่าน - ระยะเวลาต่ำสุด 0 ถึง HandBrakeCLI มิฉะนั้นคุณจะพบกับดีวีดีบางแผ่น ตัวอย่างเช่นดีวีดีทดสอบของฉันมีแทร็ก 10 วินาที 1 ซึ่งจะถูกละเว้นในผลลัพธ์สุดท้าย
Kaithar

2

เพิ่มเกลือเม็ดเล็ก ๆ ของฉันนี่คือสคริปต์ Python ที่ฉันสร้างขึ้นเพื่อแยกออกเป็นหลายบท ตัวเลขจะถูกดึงออกมาโดยอัตโนมัติ

โปรดทราบว่า:

  1. คุณต้องมีHandbrake CLI (ปัจจุบันมีให้บริการตามที่อยู่นี้: https://handbrake.fr/downloads2.php )
  2. คุณต้องมีโฟลเดอร์การติดตั้งของ Handbrake CLI ในPATHของคุณ

คุณเพียงแค่เรียกสคริปต์ Python ต่อไปนี้ซึ่งมีที่ตั้งของ DVD เป็นอาร์กิวเมนต์ของสคริปต์

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

การแตกไฟล์ใน Linux Ubuntu ผ่านทาง CLI นั้นทำได้ดีมาก บรรทัดที่ฉันใช้ด้านล่างซ้ำไวยากรณ์ที่ได้รับพร้อมกับแอมพลิฟายเออร์ขนาดเล็กเพื่อบังคับใช้ MPEG-4 และคุณภาพ หากจำเป็นต้องมีคำบรรยายฉันเชื่อว่าพารามิเตอร์และอาร์กิวเมนต์บรรทัดคำสั่ง (CLI) จะต้องมีการขยาย

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

บรรทัดcount=$(echo $rawout | grep -Eao "\\+ title [0-9]+:" | wc -l)จาก @ForestPhoenix ไม่ทำงานเมื่อบทแรกมีขนาดเล็กกว่า 10 วินาที

นี่คือการปรับปรุงรหัส:

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
ยินดีต้อนรับสู่ Superuser โปรดทัวร์ชมที่superuser.com/Tourเพื่อรับประโยชน์สูงสุดจากเว็บไซต์นี้ สำหรับคำตอบนี้ฉันขอแนะนำว่าเมื่อคำถามเป็นภาษาอังกฤษคุณช่วยกรุณาตอบเป็นภาษาอังกฤษได้ไหม ฉันเห็นว่าหลังจากคำสั่งแรกที่คุณเขียน -> ไม่ทำงานเมื่อรายการแรกน้อยกว่า 10 วินาที! จากนั้นคุณแสดงให้เห็นว่า "ดีกว่า" คืออะไร
SDsolar

@SDsolar: ฉันพยายามแปลตามคำตอบนี้สร้างสรรค์ ฉันหยุดเรียนภาษาเยอรมันเมื่อ 14 ปีก่อนดังนั้นฉันหวังว่าฉันจะไม่ผิดพลาด :)
Jean-Francois T.

-1

คุณสามารถเพิ่มงานลงในคิว

จากลิงก์ 2

เพียงไปข้างหน้าและเปลี่ยนชื่อบทหรือแหล่งที่ใช้งานและให้แน่ใจว่าได้เปลี่ยนชื่อไฟล์ปลายทาง ปรับแต่งการตั้งค่าใด ๆ ที่คุณต้องการ จากนั้นคลิกปุ่ม "เพิ่มในคิว" บนแถบเครื่องมือ ทำซ้ำขั้นตอนเหล่านี้สำหรับวิดีโอชุดทั้งหมดที่คุณต้องการแปลง

ความคิดเห็นบางส่วนบอกว่าพวกเขาประสบปัญหาในการเขียนทับไฟล์ก่อนหน้า ดังนั้นคุณจะต้องแน่ใจว่าคุณตั้งชื่อให้ถูกต้อง ตรวจสอบให้แน่ใจว่ามีงานเล็กน้อยก่อนที่คุณจะปล่อยให้มันทำงาน


การเพิ่มลงในคิวไม่ได้เป็นการลบปัญหาของการทำซ้ำ: ฉันต้องคลิกเพื่อเลือกชื่อถัดไปเปลี่ยนความละเอียดคลิก "เพิ่มคิว" ทำซ้ำ สิ่งที่ฉันต้องการคือเพียงแปลงชื่อทั้งหมดพร้อมกันด้วยการตั้งค่าที่แน่นอน นี้น่าจะเป็นไปได้เฉพาะสำหรับบท
มือใหม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.