วิธีการเข้าร่วมไฟล์วิดีโอจาก terminal?


9

ฉันได้ลอง avidemux2_cli, mencoder, ffmpeg, cat .. แต่มันไม่ได้ผลเสมอไป (โดยส่วนใหญ่แล้วข้อผิดพลาดคือตัวแปลงสัญญาณเสียงไม่เหมือนกัน) บางทีฉันอาจใส่ตัวเลือกผิดในคำสั่ง

ดังนั้นคำสั่ง:

cat Sample.avi rrr.avi > complete.avi
ffmpeg -i Sample.avi -i output.avi -vcodec copy -acodec copy complete.avi
mencoder -ovc lavc -oac copy Sample.avi rrr.avi -o complete.avi
avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi -append output.avi --save video.avi

ปัญหาของแมวคือว่ามันไม่แสดงข้อผิดพลาด แต่มันก็ไม่ได้ผลเสมอไป .. เช่นกันทั้งหมด. avi จะเหมือนกันกับ Sample.avi

Fmmpeg ไม่ทำอะไรเลย complete.avi จะเหมือนกันกับ Sample.avi เสมอ

ข้อผิดพลาด Mencoder: ไฟล์ทั้งหมดจะต้องมีตัวแปลงสัญญาณเสียงและรูปแบบที่เหมือนกันสำหรับ -oac copy ดังนั้นความสมบูรณ์ avi ก็เหมือนกันกับ Sample.avi

avidemux2_cli ไม่มีข้อผิดพลาด แต่ complete.avi นั้นเหมือนกันกับ Sample.avi ..

ดังนั้นโดยรวมแล้วทั้งหมดทั้งหมด avi นั้นเหมือนกันกับ Sample.avi .. และปัญหาก็คือพวกเขาไม่มีโคเดกเสียงเดียวกัน (ฉันเลิก) .. ความคิดอะไรบ้าง?


1
ฉันคิดว่าคุณต้องเปลี่ยนตัวแปลงสัญญาณวิดีโอและตัวแปลงสัญญาณเสียงของไฟล์อินพุตเป็นตัวแปลงสัญญาณเดียวกันหากคุณต้องการรวมวิดีโอสองวิดีโออย่างปลอดภัย
Vine_user

และฉันจะทำอย่างไร
Leon Vitanos

คุณสามารถใช้mencoderกับตัวเลือก -ovc และตัวเลือก -oac ดู: mplayerhq.hu/DOCS/HTML/en/menc-feat-selecting-codec.html
vine_user

คำตอบ:


10

หากคุณต้องการรวมสองวิดีโออย่างปลอดภัยคุณจะต้องเปลี่ยนตัวแปลงสัญญาณวิดีโอและตัวแปลงสัญญาณเสียงของไฟล์อินพุตเป็นตัวแปลงสัญญาณเดียวกัน

ตัวอย่างเช่นการใช้ xvid (ตัวแปลงสัญญาณวิดีโอ) และ mp3lame (ตัวแปลงสัญญาณเสียง):

sudo apt-get install mencoder libxvidcore4 libmp3lame0

คุณสามารถเข้ารหัสวิดีโออินพุตโดยใช้คำสั่งด้านล่าง:

mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 first.avi -o video1.avi
mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 second.avi -o video2.avi

หากต้องการจับคู่วิดีโอของคุณคุณสามารถเปลี่ยนตัวเลือก "บิตเรต" เป็นต้น (และตัวแปลงสัญญาณ)

หากชื่อวิดีโอที่เข้ารหัสคือ "video1.avi" และ "video2.avi" และชื่อวิดีโอที่ส่งออกคือ "join-video.avi"

mencoder -ovc copy -oac mp3lame video1.avi video2.avi -o joined-video.avi 

ใช้คำสั่งนี้คุณสามารถสร้างไฟล์วิดีโอที่เข้าร่วม


2
แค่คิดว่าฉันจะเสริมว่าชื่อของการใช้นี้คือmencoder(เช่น Media ENcoder) memcoderผู้คนจำนวนมากได้รับการติดโดยบังเอิญพิมพ์ใน
วาล

ขนาดของเฟรมต้องไม่ตรงกันหรือไม่
Elder Geek

4

ฉันต้องเข้าร่วมวิดีโอสามชิ้นที่มีตัวแปลงสัญญาณเหมือนกัน อ่านคำตอบก่อนหน้านี้ที่ฉันจัดการให้ทำ:

mencoder -ovc copy -oac faac 01.mp4 02.mp4 03.mp4 -o output.mp4

เร็วกว่าและง่ายกว่า Openshot มาก!

ก่อนอื่นฉันลองใช้ตัวเลือก '-oac copy' แต่ดูเหมือนว่าตัวแปลงสัญญาณเสียงในวิดีโอของฉันไม่อนุญาต ฉันได้รับข้อความแสดงข้อผิดพลาดแนะนำ '-oac pcm' ตัวแปลงสัญญาณ pcm ไม่ใช่ตัวเลือกที่ดี: ไฟล์ผลลัพธ์มีขนาดใหญ่มากและ 2/3 ของไฟล์นั้นไม่มีการบีบอัดเสียง

หวังว่านี่จะช่วยได้


2
MEncoder svn r34540 (Ubuntu) สร้างด้วย gcc-4.7 (C) 2000-2012 MPlayer Team MPlayer รวบรวมโดย libfaac ดู README หรือ DOCS
Philippe Gachoud

1

วิธีแก้ปัญหาที่ฉันพบที่นี่ช่วยให้ฉันเข้าร่วมโดยไม่สูญเสียไฟล์ mp4 สองไฟล์:

sudo apt-get install gpac
MP4Box -cat part1.mp4 -cat part2.mp4 -new joinedfile.mp4

ฉันลองใช้ Avidemux แต่มีปัญหาเรื่องเสียงในวิดีโอที่รวมเข้าด้วยกัน


1

ไฟล์ของคุณเข้าร่วมไม่ถูกต้องเนื่องจากมีบางอย่างไม่ตรงกัน

เช่นเดียวกับคนอื่น ๆ ฉันมีปัญหาเกี่ยวกับการซิงค์เสียงอย่างถูกต้องในวิดีโอที่รวมเข้าด้วยกัน และในขณะที่ MP4Box ใช้งานได้ดีหากคลิปมีสเปคเหมือนกันในบางกรณีฉันจะได้รับผลกระทบจาก“ ไม่พบแทร็กปลายทางที่เหมาะสม - การสร้างแทร็กใหม่” ซึ่งในกรณีนี้ Totem (วิดีโออาคา) จะไม่เล่นเซ็กเมนต์นั้น หลังจากการทดลองและข้อผิดพลาดและการวิจัยเพิ่มเติมฉันได้พัฒนาวิธีการต่อไปนี้เพื่อจัดการกับการเข้าร่วมวิดีโอซึ่งป่านนี้ได้ทำงานทุกครั้งที่มีคุณภาพ (กับฉัน) ที่ยอมรับได้

หากขนาดเฟรมไม่ตรงกัน (ข้อผิดพลาดในการเข้าร่วมที่เกี่ยวข้องกับแทร็กวิดีโอ):

ทำให้ปกติวิดีโอโดยไม่รบกวนเสียง (-c: สำเนา) โดยการตั้งค่าข้อ จำกัด (หารด้วย 8 สำหรับความเข้ากันได้ของตัวแปลงสัญญาณสูงสุด) สำหรับเซ็กเมนต์ที่ไม่ตรงกัน

ตัวอย่างคำสั่ง

width=856

height=480

avconv -i input.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" -c:a copy output.mp4

หากเสียงไม่ตรงกัน (ข้อผิดพลาดในการเข้าร่วมที่เกี่ยวข้องกับแทร็กเสียง):

ปรับมาตรฐานเสียง

ประมวลผลเสียงโดยไม่รบกวนวิดีโอ (คัดลอก c: v) เพื่อให้คลิปทั้งหมดตรงกับตัวแปลงสัญญาณความถี่และบิตเรตที่ต้องการด้วย c: ตัวแปลงสัญญาณความถี่ -ar เช่น -ar 48000 และอัตราบิตด้วย b: a 128k สำหรับสเตอริโอ (64K ต่อ ช่องดูเหมือนจะเป็นเป้าหมายที่ดี) หรืออะไรก็ตามที่ตรงกัน

ตัวอย่าง: avconv -i input.mp4 -c:v copy -c:a libmp3lame -ar 48000 b:a 128k output.mp4(โปรดทราบว่า libmp3lame เป็นตัวแปลงสัญญาณสำหรับไฟล์เสียง mp3) คุณสามารถรับรายการตัวเข้ารหัส avconv ที่รองรับโดยการออกคำสั่งavconv -codecsหรือเพื่อ จำกัด สิ่งต่าง ๆ ให้เป็นรหัสเฉพาะavconv -codecs|grep *codecname*เช่นavconv -codecs|grep mp3

ตอนนี้เราได้ทำให้ไฟล์เป็นมาตรฐานแล้วเราสามารถเข้าร่วมได้ ในตัวอย่างนี้ฉันจะเข้าร่วมไฟล์ด้วย MP4Box หากคุณไม่มีคุณสามารถทำได้โดยการออกคำสั่งsudo apt-get install gpac

เข้าร่วมไฟล์ด้วยคำสั่งMP4Box file1.mp4 -cat file2.mp4 -cat file3.mp4 -cat file4.mp4 -out joinedfile.mp4(โปรดทราบว่าไม่มี cat ก่อนไฟล์แรกและแต่ละไฟล์เพิ่มเติมนำหน้าด้วย -cat และไฟล์เป้าหมายนำหน้าด้วย -out)

หากใช้ MP4Box (แนะนำสำหรับ MP4) สำหรับการเข้าร่วมคุณอาจพบว่าคุณต้องประมวลผลคลิปทั้งหมดด้วย avconv ไม่ว่าสเป็คจะตรงกันหรือไม่เพื่อหลีกเลี่ยงข้อผิดพลาด“ ไม่พบแทร็กปลายทางที่เหมาะสม - การสร้างแทร็กใหม่

หมายเหตุ: ฉันพบว่า Avidemux มีปัญหากับวิดีโอที่เข้ารหัสโดยใช้ไฟล์ H.264 / AVC (ต่อโทเท็ม) เนื่องจาก B-frames เป็นข้อมูลอ้างอิง ดูเหมือนว่าจะส่งผลให้เสียงที่ไม่ซิงค์กันเมื่อเข้าร่วมแม้ว่าจะเลือกที่จะคัดลอกทั้งเสียงและวิดีโอโดยไม่ต้องใช้ remux ล้มเหลวเมื่อไม่ได้เลือกเซฟโหมดและไม่ซิงค์เมื่อใช้เซฟโหมด

แหล่งที่มา:

/superuser/547296/resizing-videos-with-ffmpeg-avconv-to-fit-into-static-sized-player

/programming/20703160/problems-with-setting-constant-bitrate-by-using-avconv

https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_cbr

หมายเหตุ:เท่าที่ผมรู้รูปแบบอื่น ๆ (ภาชนะ) มีข้อ จำกัด ที่คล้ายกันสำหรับขนาดของกรอบการจับคู่และอัตราเสียงดังนั้นนี้อาจทำงาน AVI เช่นกันถ้าคุณพยายามที่เข้าร่วมผ่านแมวหรือ mencoder หลังจากวิดีโอ normalizing และเสียง

ตัวเลือก:ใช้ Handbrake เพื่อเข้ารหัสไฟล์ที่รวมใหม่สำหรับขนาดที่เล็กกว่าถ้าต้องการด้วยตัวแปรเฟรมและการตั้งค่าคุณภาพคงที่ 25 (การตั้งค่าที่แนะนำ - ปรับตามความจำเป็นสำหรับวัสดุและความคาดหวังด้านคุณภาพของคุณ)


1

คุณควรพิมพ์ดังนี้:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output.avi --save video.avi

หากคุณต้องการผนวกไฟล์เพิ่มเติม:

avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output1.avi --append output2.avi --append output3.avi --save video.avi

1

ฉันสามารถใช้ VLC Media Player เพื่อเข้าร่วม / รวมไฟล์วิดีโอหลายไฟล์ สามารถดาวน์โหลด VLC จากซอฟต์แวร์ Ubuntu หรือคุณสามารถติดตั้งจากเทอร์มินัลโดยกดCtrl+ Alt+ Tและพิมพ์:

sudo apt update
sudo apt install vlc

เมื่อติดตั้ง VLC แล้วให้เปิดเทอร์มินัลในโฟลเดอร์ที่มีไฟล์วิดีโอแล้วพิมพ์:

vlc InFile1.mp4 InFile2.mp4 --sout "#gather:std{access=file,dst=OutFile.mp4}" --sout-keep

สิ่งนี้จะเปิดขึ้น VLC GUI และคุณสามารถปิดได้เมื่อไฟล์เข้าร่วม / ผสาน คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่นี่

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