ฉันจะรวมไฟล์ mp4 สองไฟล์โดยไม่สูญเสียคุณภาพได้อย่างไร


51

ฉันมีไฟล์ mp4 คุณภาพสูงสองไฟล์ซึ่งเป็นสองส่วนในรายการเดียวกัน

ฉันต้องการรวมพวกเขาเข้าด้วยกันเป็น 1 ไฟล์และฉันมักจะใช้ VirtualDub เพื่อรวมไฟล์ของฉัน ... แต่ดูเหมือนจะไม่สนับสนุน mp4

มีตัวเลือกใดบ้าง (โดยเฉพาะอย่างยิ่งที่ไม่ต้องเข้ารหัสซ้ำ)


คำตอบ:


41

ฉันมักจะใช้ VirtualDub เพื่อรวมไฟล์ของฉัน แต่ดูเหมือนจะไม่รองรับ mp4 มีทางเลือกอะไรบ้าง?

Avidemux มันเหมือนกับ VirtualDub เท่านั้นที่รองรับฟอร์แมทเพิ่มเติมและตัวแปลงสัญญาณและฟิลเตอร์ในตัว ฉันมักจะใช้มันในการตั้งค่า; มันเข้าร่วมไฟล์ AVC + AAC.MP4 (โดยไม่ต้องบันทึกใหม่) ที่ดีสำหรับฉัน

หากต้องการเข้าร่วมพวกเขาใน AviDemux:

  1. ไฟล์ -> เปิด -> เลือกไฟล์
  2. ไฟล์ -> ผนวก -> เลือกไฟล์
  3. ตั้งค่าทั้งหมดเป็นคัดลอก
  4. ไฟล์ -> บันทึก -> ชื่อไฟล์
  5. รอ..

ตามฟอรัม AViDemux กระบวนการเข้าร่วมนี้เป็นแบบไม่สูญเสีย ( http://www.avidemux.org/smf/index.php?topic=9467.0 )


ใช่ดูเหมือนว่าจะทำได้ดีกับการซิงค์เสียงกับวิดีโอในขณะที่คนอื่นตอบคำถามนี้เป็นที่น่าสงสัยใน IMHO นั้น
djangofan

1
ฉันลองใช้ Avidemux เพื่อเข้าร่วมสองไฟล์ด้วยกัน แต่เสียงไม่สอดคล้องกัน
GiddyUpHorsey

คุณสามารถรับปัญหาการซิงค์เมื่อปริมาณของวัสดุเสียงที่มีไม่ตรงกับความยาวของเฟรมวิดีโอหรือมีกระแสข้อมูลเสียหาย คุณอาจสามารถแก้ไขปัญหานี้ได้ด้วยคุณสมบัติ 'แก้ไขกระแสข้อมูล' ของ VideoRedo หรือ ProjectX
bobince

1
แต่วิธีนี้ใช้งานได้: superuser.com/a/255566/1780ไชโย!
Christopher Galpin

4
หากคุณใช้ AviDemux เพื่อเข้าร่วมไฟล์ Mp4 สองไฟล์อย่าลืมเลือกตัวเลือก Mp4 Demux ที่มุมล่างซ้ายมือ มิฉะนั้นอาจลองแปลงเป็น avi!

28

คุณสามารถทำได้ด้วย ffmpeg:

mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

สิ่งนี้ไม่ได้เข้ารหัสอะไรอีกเลยวางไว้ในคอนเทนเนอร์สตรีมการขนส่งใหม่ซึ่งทำให้พวกเขาเชื่อมต่อได้ง่ายขึ้นจากนั้นเชื่อมต่อพวกเขากลับเป็น MP4 หาก output.mp4 มีอยู่แล้วคำสั่งจะล้มเหลว รุ่นข้างต้นใช้ชื่อ pipes ถ้าคุณอยู่ในระบบที่ไม่รองรับไฟล์ที่คุณต้องใช้ไฟล์ระดับกลาง (เช่น windows):

ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -bsf:a aac_adtstoasc output.mp4

บางคนสามารถอธิบายได้ว่าวิธีนี้ทำด้วยavconvแทนที่จะทำffmpegอย่างไร ฉันสามารถทำสองขั้นตอนแรกให้สำเร็จ แต่สุดท้ายไม่รู้จักตัวเลือก-absf
becko

@becko ดูการแก้ไขของฉัน ตอนนี้คุณควรใช้ตัวระบุสตรีม (ดูที่นี่libav.org/avconv.html#Advanced-options )
slhck

2
+1 เพียงสำหรับการอ้างอิงในอนาคตคุณสามารถใช้แทนavconvสำหรับffmpegในคำสั่งดังกล่าวและมันจะทำงาน
becko

15

Concat demuxer

concat demuxer ถูกเพิ่มใน ffmpeg 1.1 หาก ffmpeg เวอร์ชั่นเก่าของคุณรับไบนารีคงที่ใหม่ล่าสุดจากที่นี่: http://www.ffmpeg.org/download.html

คำแนะนำ

สร้างไฟล์ที่mylist.txtมีไฟล์ทั้งหมดที่คุณต้องการเชื่อมต่อในรูปแบบต่อไปนี้ (บรรทัดที่ขึ้นต้นด้วยเส้นประจะถูกละเว้น):

# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

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

ffmpeg -f concat -i mylist.txt -c copy output

เป็นไปได้ที่จะสร้างไฟล์รายการนี้ด้วย bash for loop หรือใช้ printf หนึ่งในสิ่งต่อไปนี้จะสร้างไฟล์รายการที่มีทุก * .wav ในไดเร็กทอรีการทำงาน:

for f in ./*.wav; do echo "file '$f'" >> mylist.txt; done
printf "file '%s'\n" ./*.wav > mylist.txt

ที่มา: ffmpeg wiki


8

YAMBพร้อมกับMP4BOXเป็นตัวเลือกที่ดี
ดาวน์โหลดและแตกไฟล์ (ไม่จำเป็นต้องติดตั้งและใช้ร่วมกันประมาณ 5MB) ใน YAMB เลือกการตั้งค่าและตั้งค่าเส้นทางโฟลเดอร์ของ MP4box
ในการเข้าร่วมไฟล์ mp4 เลือกการแก้ไข> คลิกเพื่อเข้าร่วมที่รองรับ ...


1
ดูเหมือนว่าทางออกที่ดีที่สุดการรักษารูปแบบภาชนะ .mp4 ซึ่งดูเหมือนจะเป็นตัวเลือกที่น่าสนใจมากขึ้นไปยังผู้เขียน ^^
Oskar Duveborn

1
หลังจากความยากลำบากฉันใช้การตั้งค่านี้: MP4Box_path = E: \ Software \ Video Editing \ Yamb-2.1.0.0_beta2 \ MP4Box \ MP4Box.exe ในความพยายามที่จะรวมไฟล์ MP4 500MB 4 ไฟล์ที่สร้างขึ้นจาก AVIDemux มันไม่ทำงาน โปรแกรมเพิ่งนั่งอยู่ที่นั่น 45 นาทีไม่ทำอะไรเลยจนกระทั่งในที่สุดฉันก็ยอมแพ้
djangofan

1
ฉันมีปัญหาในการใช้วิธีนี้เนื่องจากปัญหาการซิงค์เสียง มันเป็นฝันร้าย ... ไม่ลองอีกครั้ง
djangofan

6

SUPER © (ตัวย่อเอนโค้ดเดอร์ Universal Player & Renderer) นำเสนอกระบวนการส่งออกเพิ่มเติมต่อไปนี้:

ไฟล์มัลติมีเดียอินพุตที่สนับสนุนใด ๆ สามารถดำเนินการได้:

      o Join Format-Identical Files.
      o Mux Video & Audio Streams.
      o DeMux Extract Streams. 

แน่นอน MP4 เป็นรูปแบบที่รองรับ

SUPER ©เป็นฟรีแวร์


5
ส่วนต่อประสานผู้ใช้เป็นสิ่งที่น่ากลัวที่สุดที่ฉันเคยเห็นในชีวิตของฉัน ฉันไม่ได้ล้อเล่นมันน่ากลัวมาก ฉันเน้นอีกครั้ง: ฉันไม่สามารถตั้งชื่ออินเทอร์เฟซที่แย่กว่านี้ได้ฉันจริงจังกับมันมาก
Camilo Martin

5

ลองใช้คอนเทนเนอร์วิดีโอ Matroska

ประการแรกคุณต้องmkvtoolnix ดาวน์โหลดและติดตั้งจากนั้นคุณจะต้องเริ่มต้น mkvmerge GUI (ยกเว้นว่าคุณชอบเครื่องมือบรรทัดคำสั่งซึ่งใช้ได้กับฉัน - แม้ว่าคุณอาจต้องการดูที่ส่วนการเชื่อมโยงไฟล์ของเอกสาร mkvmerge )

เพิ่มไฟล์แรกของคุณโดยคลิก "เพิ่ม" จากนั้นคลิกที่ "ผนวก" และเปิดไฟล์ที่สองของคุณ ตั้งไฟล์ที่ส่งออกกด "เริ่ม muxing" ที่ด้านล่างและไป!

หากคอนเทนเนอร์ไม่เหมาะสมกับความต้องการของคุณคุณสามารถเข้ารหัสใหม่หรือลองแปลงเป็นรูปแบบอื่น ... แม้ว่า MKV จะเป็นคอนเทนเนอร์ที่น่ารักมาก!


จะต้องมีการ muxed? ฉันไม่สามารถเข้าร่วมได้โดยไม่ต้อง muxing?
djangofan

ถ้าคุณใช้คอนเทนเนอร์ MKV ในทางเทคนิคแล้วคุณกำลังรีมิกซ์มัน ลองมันไม่มีโทษเวลาจริง ...
Breakthrough

1

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


ความกล้าดูเหมือนจะเป็นไฟล์เสียง นี่คือไฟล์วิดีโอ
เปาโล Bergantino

ขออภัยฉันอ่านผิดเพิ่งเห็นส่วน MP และสมองของฉันแม้ว่าจะกล้า
William Hilsum

แก้ไขคำตอบ ...
วิลเลียม Hilsum

AFAIK, Movie Maker ไม่สนับสนุน mp4 และการแปลงเป็นรูปแบบอื่นหมายถึงการสูญเสียคุณภาพซึ่งคำถามระบุว่าไม่ต้องการ
Eran

ฉันลอง MovieMaker บน windows7 และเสียงไม่ตรงกันเมื่อเข้าร่วมไฟล์ MP4 เป็น WMV ตัวเลือกนี้จะไม่ทำงาน
djangofan

1

ทางออกก็คือ เปิดวิดีโอช่างไม้ นอกจากนี้ยังมีผลกระทบการเปลี่ยนแปลง

ป้อนคำอธิบายรูปภาพที่นี่


มันเป็นแชร์แวร์ และ $ 30 ก็ไม่ได้ราคาถูกเพียงแค่การรวมไฟล์วิดีโอ
Eran

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