แยกไฟล์ MP4


34

วิธีการแยกทรัพยากรไฟล์ที่เร็วที่สุดและน้อยที่สุดในการแยกไฟล์ MP4 คืออะไร?

ฉันพยายาม ffmpeg แต่มีข้อผิดพลาด:

$ ffmpeg -vcodec copy -ss 0 -t 00:10:00 -i /home/asafche/Videos/myVideos/MAH00124.MP4 /home/asafche/Videos/myVideos/eh.mp4
FFmpeg version SVN-r0.5.1-4:0.5.1-1ubuntu1.1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --extra-version=4:0.5.1-1ubuntu1.1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 1 / 52.20. 1
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Mar 31 2011 18:53:20, gcc: 4.4.3

Seems stream 0 codec frame rate differs from container frame rate: 119.88 (120000/1001) -> 59.94 (60000/1001)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/asafche/Videos/myVideos/MAH00124.MP4':
  Duration: 00:15:35.96, start: 0.000000, bitrate: 5664 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 1280x720, 59.94 tbr, 59.94 tbn, 119.88 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16
Output #0, mp4, to '/home/asafche/Videos/myVideos/eh.mp4':
    Stream #0.0(und): Video: libx264, yuv420p, 1280x720, q=2-31, 90k tbn, 59.94 tbc
    Stream #0.1(und): Audio: 0x0000, 48000 Hz, stereo, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Unsupported codec for output stream #0.1

ฉันทำอะไรผิดและฉันจะแบ่งไฟล์ mp4 ให้เหมาะสมได้อย่างไร


คุณช่วยบอกเหตุผลที่คุณต้องแบ่งไฟล์ได้ไหม มันคือการแบ่งปันหรือเล่นส่วนของไฟล์? หรือเหตุผลอื่นใด
theTuxRacer

มันใช้สำหรับอัปโหลดไปยัง youtube ดังนั้นข้อเสนอแนะข้อที่สองของคุณ - เล่นส่วนของไฟล์ ...
Asaf Chertkoff

คำตอบ:


62

ด้วย ffmpeg คุณสามารถแยกไฟล์โดยใช้คำสั่งต่อไปนี้:

ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss START -t LENGTH OUTFILE.mp4

โดยที่ START กำลังเริ่มวางตัวในไม่กี่วินาทีหรือในรูปแบบ hh: mm: ss LENGTH คือความยาวของหน่วยเป็นวินาทีหรือในรูปแบบ hh: mm: ss

ดังนั้นคุณจะต้องเรียกใช้คำสั่งนี้สองสามครั้งขึ้นอยู่กับระยะเวลาของวิดีโอของคุณ ถ้าสมมติว่าวิดีโอของคุณมีความยาว 31 นาทีและคุณต้องการแบ่งออกเป็น 15 นาทีเป็นวิธีที่คุณเรียกใช้:

ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 0 -t 00:15:00 OUTFILE-1.mp4
ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 00:15:00 -t 00:15:00 OUTFILE-2.mp4
ffmpeg -i ORIGINALFILE.mp4 -acodec copy -vcodec copy -ss 00:30:00 -t 00:15:00 OUTFILE-3.mp4

มีสคริปต์ไพ ธ อนที่คุณสามารถใช้ในการทำสิ่งนี้โดยอัตโนมัติ (เช่นใช้ไฟล์วิดีโอขนาดก้อนในไม่กี่วินาทีและสร้างไฟล์วิดีโอที่เล่นได้แต่ละไฟล์): http://icephoenix.us/notes-for-myself/auto-splitting-video แฟ้ม: ในเท่ากับชิ้นที่มี ffmpeg และงูหลาม /


ขอบคุณ แต่ฉันต้องการความช่วยเหลือเพิ่มเติมเกี่ยวกับเรื่องนี้ ค้นหาการแก้ไขที่ฉันทำในคำตอบของฉัน
Asaf Chertkoff

1
สิ่งนี้ใช้ได้กับฉัน: ffmpeg -ss 00:05:00 -t 00:16:00 -i largfile.MP4 -acodec copy -vcodec copy smallfile.MP4 ใครบางคนสามารถอธิบายได้ว่าทำไม
Asaf Chertkoff

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

อาจจะ. จะเห็น ...
Asaf Chertkoff

1
คำสั่งของ Asaf ก็ใช้ได้สำหรับฉันเช่นกัน ดูเหมือนว่าตัวเลือก codec ควรมาหลัง inputfile
daithib8

10

หากคุณต้องการใช้ gui มี avidemux อยู่ในที่เก็บ การกำหนดจุดตัดง่ายกว่านี้มาก!

เครื่องหมายการเลือกกำหนดส่วนของวิดีโอที่จะส่งออกโดยใช้ "คัดลอก" ในเสียงและวิดีโอเพื่อหลีกเลี่ยงการเข้ารหัสซ้ำ คุณยังสามารถเลือกคอนเทนเนอร์หรือเปลี่ยนมันได้ (avi, mp4, mkv, ฯลฯ )

ฉันได้ทำการตัดวิดีโอบางส่วนจากกล้องและมันก็ทันที!


2
Avidemux ถูกลบออกจากที่เก็บของ Ubuntu 16.04
naXa

5

ไม่แน่ใจว่าสิ่งที่คุณต้องการคืออะไร แต่คุณสามารถพิมพ์สิ่งนี้ในเทอร์มินัล: หากต้องการเปิดเทอร์มินัลให้กดCtrl+ Alt+T

split -b 4M file.mp4 part_file

สิ่งนี้จะแบ่งไฟล์ออกเป็นส่วน ๆ 4 เมกะไบต์ หากต้องการสร้างไฟล์อีกครั้งให้พิมพ์

cat part_file[a-c] > file.mp4

ขอให้สังเกตว่าฉันได้พิมพ์a-cในวงเล็บเพราะแบ่งสร้าง 3 ไฟล์ ในกรณีของคุณคุณอาจต้องดูเพิ่มเติม ฉันจะอธิบายด้วยตัวอย่าง

$ ls -lh
-rwxr-xr-x 1 root        root        9.3M 2011-04-17 20:09 file.mp4

นี่แสดงว่าฉันมีไฟล์เดียวขนาด 9.3 MB หากต้องการแยกฉันพิมพ์:

$ split -b 2M file.mp4 part_file

หลังจากแยกฉันได้รับไฟล์เป็น:

$ ls -lh
-rwxr-xr-x 1 root        root        9.3M 2011-04-17 20:09 file.mp4
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileaa
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileab
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_fileac
-rw-r--r-- 1 thetuxracer thetuxracer 2.0M 2011-04-17 20:12 part_filead
-rw-r--r-- 1 thetuxracer thetuxracer 1.3M 2011-04-17 20:12 part_fileae

สังเกตว่าอักขระสองตัวต่อท้ายชื่อไฟล์

ในการรับไฟล์กลับ:

$ cat part_filename[start-end][start-end] > file.mp4

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

@ Slipstream - คุณเข้าใจถูกต้อง - ฉันต้องแยกมันสำหรับ youtube กล้องของฉันกำลังผลิต MP4 แต่ฉันต้องแยกสาเหตุเหล่านั้นให้นานกว่านั้นจึงอนุญาต 15 นาที
Asaf Chertkoff

แล้วคุณต้องการคำตอบของอเล็กซ์ด้านล่าง ...
ใฟ้

5

ใช้ mkvmerge จากแพ็คเกจ mkvtoolnix ใช้สิ่งที่ชอบ

mkvmerge -o outputprefix --split 1G origfile.mp4

สิ่งนี้จะแบ่งไฟล์ของคุณเป็น 1 GB บล็อก คุณสามารถใช้ตัวบ่งชี้เวลาได้เช่นกัน


ฉันไม่เคยใช้มาก่อน แต่พยายาม: ยอดเยี่ยม! ความเร็วทันทีและทุกอย่างยังคงสามารถอ่านได้ ขอบคุณ!
tuk0z

สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณต้องการระบุขนาด ขอบคุณ!
BBQ Singular

0

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

ส่วนแรกของไฟล์คือ mdat ส่วนที่สองคือ moov ที่มีข้อมูลเมตาที่ใช้โดยตัวถอดรหัสเพื่อค้นหาชิ้นส่วนซึ่งมีตัวอย่าง (รูปภาพและเสียงที่เข้ารหัสไม่สำคัญที่จะรู้) แล้วก็มี STCO, STTS, STSC เป็นต้นนี่เรียกว่า "อะตอม" พวกเขาระบุสิ่งที่ชดเชยความยาว ฯลฯ ของแต่ละชิ้น หากคุณทำงานได้ดีคุณสามารถสร้างวิดีโอของคุณได้หลายอินสแตนซ์และเวอร์ชั่นต่าง ๆ ที่มีเนื้อหาต่างกัน ไฟล์ดังกล่าวจะสามารถเล่นได้ในเครื่องเล่นและจะถูกย่อยในเว็บไซต์วิดีโอ หากคุณเป็นผู้แปลงสัญญาณให้สร้างตัวแยกวิเคราะห์ MP4 หรือใช้ตัวแยกวิเคราะห์ที่มีอยู่เพื่อติดตามชิ้นส่วนและออฟเซ็ต ซึ่งจะช่วยให้คุณทราบเพิ่มเติมเกี่ยวกับรูปแบบและการสร้างไฟล์ใหม่โดยอัตโนมัติ


0

วิธีที่ง่ายที่สุดและเข้าใจผิดคือการใช้ MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(พารามิเตอร์คือเวลาเป็นวินาที) สำหรับความเป็นไปได้อื่น ๆ แยกตามขนาดดูhttps://gpac.wp.imt.fr/mp4box/mp4box-documentation/หรือMP4Box -h general

การต่อข้อมูลนั้นง่ายในทำนองเดียวกัน


0

เครื่องมือ GUIโอเพ่นซอร์สอีกตัวหนึ่งที่สามารถแยกวิดีโอและทำอีกมากคือเบรกมือ

ตัวอย่างเช่นที่นี่ฉันแบ่งวิดีโอของฉันที่ 24.53 (mm: ss) และตัดกรอบด้านขวาด้วย: ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถดูตัวอย่างของผลลัพธ์ได้อย่างง่ายดาย - ด้วยปุ่ม "ดูตัวอย่าง"

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