วิธีที่จะทำให้ Handbrake รักษาเวลาการจับ / เวลาในการสร้างได้อย่างไร


14

Handbrake เป็นเครื่องมือบีบอัดวิดีโอที่ยอดเยี่ยม แต่ดูเหมือนจะไม่รักษาเวลาการจับภาพดั้งเดิมหลังจากวิดีโอถูกบีบอัด ความคิดวิธีการแก้ไขปัญหานี้?


@slhck ใช่ฉันหมายถึงเวลาที่สร้าง ฉันใช้ Lightroom เพื่อจัดการวิดีโอของฉันและหลังจากการบีบอัดเวลาถ่ายภาพ / การสร้างกลายเป็นเวลาแก้ไข
pixelfreak

คำตอบ:


21

คุณสามารถคัดลอกข้อมูลเมตาที่มีอยู่จากไฟล์หนึ่งไปยังอีกโดยไม่จำเป็นต้อง Re-encode วิดีโอโดยใช้FFmpeg โดยทั่วไปใช้เวลาหนึ่งวินาที ในการทำเช่นนี้สมมติว่ามีสามไฟล์:

  • in.mp4 - ไฟล์ต้นฉบับก่อนการแปลง
  • out.mp4 - ไฟล์หลังจากการแปลงเบรกมือ
  • fixed.mp4 - ไฟล์ที่มีข้อมูลเมตาที่ "แก้ไข"

คำสั่ง FFmpeg เพื่อคัดลอกเรคคอร์ดข้อมูลเมตาที่สมบูรณ์ไปยังไฟล์ใหม่จะเป็น:

ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4

คำอธิบายของไวยากรณ์:

หากต้องการทำลายมันให้ทำสิ่งต่อไปนี้:

  • ใช้ไฟล์อินพุตสองไฟล์ ( in.mp4และout.mp4) ซึ่งกำหนด ID 0 และ 1 ตามลำดับ
  • แมปเฉพาะวิดีโอ / เสียง / สตรีมคำบรรยายจากไฟล์ 1 ถึงเอาต์พุต ( -map 1) ดังนั้นเราจึงใช้บิตสตรีมที่ถูกแปลงแล้ว
  • แม็พข้อมูลเมตาเท่านั้นจากไฟล์ 0 ถึงเอาต์พุต ( -map_metadata 0)
  • ใช้ตัวแปลงสัญญาณคัดลอก ( -c copy) เพื่อคัดลอกบิตสตรีมทั้งหมดแทนที่จะเข้ารหัสวิดีโออีกครั้ง

หลังจากนั้นคุณจะเห็นได้ชัดว่าจะเปลี่ยนชื่อไปfixed.mp4out.mp4


พิสูจน์:

ตัวอย่างเช่นนี่เป็นส่วนหนึ่งของบันทึกข้อมูลเมตาของไฟล์ต้นฉบับของฉัน:

$ mediainfo in.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19

นี่คือไฟล์หลังจากการแปลง Handbrake:

$ mediainfo out.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-12-24 11:39:35

นี่คือไฟล์สุดท้ายหลังจากจับคู่ข้อมูลเมตา:

$ ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
[…]

$ mediainfo fixed.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19    

หากคุณต้องการทำทั้งหมดด้วย FFmpeg:

ที่จริงแล้วคุณไม่จำเป็นต้องใช้ Handbrake ถ้าคุณสามารถใช้ FFmpeg ได้ซึ่ง Handbrake ยังคงใช้งานอยู่ ในกรณีที่ง่ายที่สุดคุณสามารถทำการแปลงแบบนี้:

ffmpeg -i in.mp4 -c:v libx264 -crf 23 -c:a aac -map_metadata 0 out.mp4

สิ่งนี้จะแปลงอินพุตด้วยตัวเข้ารหัส x264 และเสียง AAC ไปยังไฟล์เอาต์พุตคัดลอกข้อมูลเมตาดั้งเดิม ในการเปลี่ยนคุณภาพของเอาต์พุตคุณสามารถ:

  • เปลี่ยนค่า CRF สำหรับวิดีโอ ต่ำกว่าหมายถึงคุณภาพที่ดีขึ้น 23 เป็นค่าเริ่มต้นและสิ่งใดก็ตามที่ต่ำกว่า 18 อาจสูญเสียการมอง
  • เปลี่ยนบิตเรตสำหรับเสียง ดูคู่มือการเข้ารหัส AACสำหรับข้อมูลเพิ่มเติม

อ่านคู่มือการเข้ารหัส x264บน FFmpeg wiki สำหรับข้อมูลเพิ่มเติม


1
ว้าวนั่นเป็นวิธีการแก้ปัญหาที่ยอดเยี่ยมดูน่ากลัวไปหน่อย แต่ฉันหวังว่า Handbrake จะทำสิ่งนี้เบื้องหลัง ขอบคุณ!
pixelfreak

คำสั่งการถ่ายโอนข้อมูลเมตาทำงานได้ แต่คำสั่งสุดท้ายในการแปลงเช่นกันทำให้ฉันมีUnknown encoder 'libfaac'ข้อผิดพลาด
pixelfreak

จากนั้น ffmpeg ของคุณจะไม่ถูกคอมไพล์ด้วยการสนับสนุน FAAC ลอง-c:a aac -strict experimentalแทน
slhck

5

น่าเสียดายที่ดูเหมือนว่าเบรคมือไม่สามารถทำได้ด้วยตัวเอง แต่ในทำนองเดียวกันกับตัวอย่าง ffmpeg การประทับเวลาสามารถคัดลอกได้จากต้นฉบับหลังจากการบีบอัดโดยใช้touchคำสั่ง unix:

touch -r MVI_1234.MOV compressed_MVI_1234.m4v

สิ่งนี้จะตั้งค่าการประทับเวลาของไฟล์บีบอัดให้เหมือนกับไฟล์อ้างอิงที่กำหนด


1
มันจะตั้งค่าการประทับเวลาสำหรับไฟล์ใช่ แต่เฉพาะในระบบไฟล์ ข้อมูล EXIF ​​จะไม่มีการประทับเวลา "วันที่ / เวลาดั้งเดิม" ที่ถูกต้อง
Stephen Schrauger

3

ฉันพบวิธีที่ง่ายกว่าในการทำเช่นนี้โดยใช้ซอฟต์แวร์อื่นที่เรียกว่าAdapter: http://www.macroplant.com/adapter/

ไม่มีการตั้งค่าขั้นสูงทั้งหมดเช่น HandBrake แต่ใช้งานได้ (เช่นการใช้ ffmpeg) และเก็บ metadata ที่ฉันต้องการ


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

เลวร้ายเกินไปก็ไม่ได้เข้ากันได้กับรูปแบบ M2TS โซนี่
ดิเอวิเอร่า

2

ฉันใช้ macOS Yosemite และHandBrakeBatch - ใช้เพื่อแปลงไฟล์ แต่คลิกที่กล่อง "เก็บการสร้างไฟล์และวันที่แก้ไข" ในเมนู "การตั้งค่า"

จากนั้นฉันนำเข้าวิดีโอไปยัง Lightroom 5 แต่พวกเขายังคงไม่สร้างวันที่ แต่ที่สำคัญที่สุดคือไฟล์ที่แสดงใน Finder พร้อมวันที่สร้างที่ถูกต้อง ดังนั้นฉันจึงเลือกทั้งหมดในไลบรารี Lightroom → Metadata (คอลัมน์โต้ตอบด้านขวา) →เวลาการจับภาพ→เปลี่ยนเป็นวันที่สร้างไฟล์→เปลี่ยนทั้งหมด

ฉันมีวิดีโอครอบครัวเก่า 850 รายการ - ฉันต้องทำกระบวนการนี้ด้วยแบทช์ 100 มือเบรกมือเกิดปัญหากับไฟล์จำนวนมาก


Nice find, สามารถเห็นฉันใช้แอพนี้มาก
calum_b

โปรดทราบว่าแอพจะไม่ได้รับการดูแลรักษาอีกต่อไป : osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck

1

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

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

#!/bin/bash
#Sets IFS to \n to allow for filenames with spaces
IFS=$'\n'

#Source directory and converted direcotry
dir1=$1
dir2=$2

#Array with source filepaths
srcf=()
#Array with converted filepaths
cnvf=()

#Adds filepaths from the source directory to srcf array
for file in $(ls -1 $dir1); do
    srcf+=("$dir1/$file")
done
#Adds filepaths from the converted directory to cnvf array
for file in $(ls -1 $dir2); do
    cnvf+=("$dir2/$file")
done

#Checks if source and convert folders have the same number of files
if [ ${#srcf[*]} -eq ${#cnvf[*]} ]
then
    #Counter variable
    fnum=0
    #Loops through the arrays and runs touch command on pairs of files to transfer the metadata
    while [ $fnum -lt ${#srcf[*]} ]; do
        echo $fnum
        echo ${srcf[$fnum]} ${cnvf[$fnum]}
        touch -r ${srcf[$fnum]} ${cnvf[$fnum]}
        ((fnum++))
    done
else
    echo "The provided paths do not have the same number of files. Both paths must have the same number of files in the same order."
fi

เมื่อต้องการเรียกใช้ให้ทำ: sudo bash script.sh /sourcedir /converteddir


1

ถ้าคุณหมายถึงเวลาปรับเปลี่ยนในระดับไฟล์แล้วผมมีปัญหาเดียวกันและก็สามารถที่จะกู้คืนได้ด้วยexiftool

exiftool -tagsFromFile input.mp4 -extractEmbedded -all:all -FileModifyDate -overwrite_original output.mp4

นี้จะใช้เวลาเมตาและFileModifyDateจากและคัดลอกไปinput.mp4output.mp4

เพื่อให้สิ่งนี้เป็นแบบอัตโนมัติเมื่อฉันมีไฟล์จำนวนมากที่ต้องการแปลงรหัสฉันสร้างเครื่องมือที่ชื่อว่าShrinkwrapที่แปลงรหัสครั้งแรกด้วยFFmpeg (ฉันย้ายออกจาก HandBrake เพราะต้องการรักษาข้อมูลเมตาเพิ่มเติม) จากนั้นกู้คืนการประทับเวลาด้วย exiftool


0

หลังจากการค้นหามากฉันส่วนใหญ่ยอมแพ้ในการใช้ไฟล์วิดีโอเก่าที่มีวันที่สร้าง / แก้ไขที่ถูกต้องเพื่อเขียนทับวันที่สร้าง / แก้ไขไฟล์วิดีโอบีบอัด Handbrake ใหม่ของฉัน เนื่องจากวิดีโอส่วนใหญ่ของฉันมีวันที่ / เวลาในชื่อไฟล์ฉันจึงทดลองและมีสองวิธีในการทำงาน สิ่งแรกและดีที่สุดคือการใช้วิธีการประทับเวลาของ Ren Rener ขั้นสูงซึ่งสามารถเปลี่ยนวันที่สร้างแก้ไขและเข้าถึงไฟล์ได้ไม่เพียง แต่ชื่อไฟล์เท่านั้น https://www.advancedrenamer.com/download

ฉันยังพบสคริปต์ powershell https://www.michaelmiklis.de/set-creation-and-modification-date-from-filename/ซึ่งสามารถดัดแปลงโดยโปรแกรมเมอร์สำหรับรูปแบบชื่อ / วันที่อื่น ๆ ในสถานะปัจจุบันมันใช้งานได้ก็ต่อเมื่อชื่อไฟล์มีโครงสร้างตรงตามที่ปรากฏในตัวอย่างนั้น

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

ฉันพยายามใช้ ffmpeg แต่คำสั่ง map_metadata จะเปลี่ยนเฉพาะข้อมูลภายในไฟล์ไม่ใช่วันที่แก้ไข แต่สร้างไฟล์เอง Handbrake ภายในแบบนั้นก็ใช้ได้ดีอยู่แล้ว


0

โปรแกรมMyFFmpegทำได้ดีมาก ในตัวเลือกของมันมีทางเลือกที่จะให้สร้างต้นฉบับ / ดัดแปลงวันจากแฟ้มแหล่งที่มา

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

น่าเสียดายที่นี่ไม่ใช่ตัวเลือกฟรีขณะนี้มีค่าใช้จ่าย 20 ยูโรหรือประมาณ 21 US พวกเขามีการทดลองใช้งาน 10 ครั้งก่อนที่คุณจะต้องซื้อใบอนุญาต แปลกใจที่ ffmpeg GUIs ฟรีบางตัวไม่มีหรือเพิ่มตัวเลือกนี้


0

ฉันพยายามคงวันที่สร้างไว้ในขณะที่ฉันบีบอัดวิดีโอ GoPro MP4 ที่มีขนาดใหญ่อย่างไม่น่าเชื่อของฉันลงใน H.264

ผมพบว่าโปรแกรมHandBrakeBatch มันเป็นสิ่งที่ฉันต้องการในการบีบอัดไฟล์มากกว่า 1,000 ไฟล์ในครั้งเดียวในขณะที่รักษาวันที่สร้าง (ข้อมูลเมตา)

ไม่พบโปรแกรมอื่น ๆ ที่สามารถทำได้ ทดลองใช้ FFmpeg, HandBrake และ Wonderful Video Converter แต่ไม่


โปรดทราบว่า HandBrakeBatch จะไม่ได้รับการดูแลรักษาอีกต่อไป : osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.