Tách một tập tin MP4


34

Phương pháp tiêu thụ tài nguyên nhanh nhất và ít nhất để chia nhỏ tệp MP4 là gì?

Tôi đã thử ffmpeg nhưng gặp lỗi:

$ 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

Tôi đang làm gì sai và làm cách nào để chia một tập tin mp4 đúng cách?


bạn có thể vui lòng cho chúng tôi biết lý do bạn cần chia nhỏ tập tin không? Là nó để chia sẻ, hoặc chơi các phần của tập tin? Hoặc bất kỳ lý do khác?
theTuxRacer

Đó là để tải lên youtube, do đó, đề xuất thứ hai của bạn - phát các phần của tệp ...
Asaf Chertkoff

Câu trả lời:


62

Với ffmpeg, bạn có thể tách tệp bằng lệnh sau:

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

trong đó START bắt đầu tạo ra tính bằng giây hoặc ở định dạng hh: mm: ss LENGTH là độ dài đoạn tính bằng giây hoặc ở định dạng hh: mm: ss

Vì vậy, bạn sẽ cần chạy lệnh này vài lần tùy thuộc vào thời lượng video của bạn. Nếu giả sử video của bạn dài 31 phút và bạn muốn chia thành 15 phần nhỏ thì đây là cách bạn chạy nó:

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

Có một tập lệnh python mà bạn có thể sử dụng để thực hiện điều này một cách tự động (ví dụ: lấy tệp video, kích thước khối trong vài giây và tạo các tệp video có thể phát riêng lẻ): http://icephoenix.us/notes-for-myself/auto-splinating-video -file-in-bằng-chunk-with-ffmpeg-and-python /


Cảm ơn, nhưng tôi cần giúp đỡ thêm với điều này. Hãy tìm bản chỉnh sửa tôi đã làm trong câu trả lời của tôi.
Asaf Chertkoff

1
Điều này làm việc cho tôi: ffmpeg -ss 00:05:00 -t 00:16:00 -i tinyfile.MP4 -acodec copy -vcodec copy smallfile.MP4 ai đó có thể giải thích tại sao?
Asaf Chertkoff

Tôi sẽ suy đoán ở đây một chút, nhưng có vẻ như tệp nguồn của bạn được mã hóa với tốc độ khung hình mà libx264 không hỗ trợ, vì vậy nó bỏ qua các khung. Tôi nghĩ rằng điều này sẽ hoạt động tốt, nhưng có thể có một số rủi ro với âm thanh vì điều này.
Alex

có lẽ. sẽ thấy ...
Asaf Chertkoff

1
Lệnh của Asaf cũng làm việc cho tôi. Có vẻ như các tùy chọn codec sẽ xuất hiện sau tệp đầu vào.
daithib8

10

Nếu bạn thích sử dụng gui, có sẵn avidemux trong kho. Xác định các điểm cắt dễ dàng hơn nhiều theo cách này!

Các điểm đánh dấu xác định phần video sẽ được xuất, sử dụng "sao chép" trong âm thanh và video để tránh mã hóa lại. Bạn cũng có thể chọn container hoặc thay đổi nó (avi, mp4, mkv, v.v.).

Tôi đã thực hiện một loạt các đoạn cắt trên một số video từ máy ảnh và nó là tức thời!


2
Avidemux đã bị xóa khỏi kho lưu trữ của Ubuntu 16.04.
naXa

5

Không chắc chắn nhu cầu của bạn là gì, nhưng bạn có thể nhập cái này vào một thiết bị đầu cuối: Để mở một thiết bị đầu cuối, nhấn Ctrl+ Alt+T

split -b 4M file.mp4 part_file

Điều này sẽ chia các tệp thành các khối 4 megabyte. Để tạo lại tập tin một lần nữa, gõ

cat part_file[a-c] > file.mp4

Lưu ý rằng tôi đã gõ a-cvào dấu ngoặc, vì phần tách tạo ra 3 tệp. trong trường hợp của bạn, bạn có thể phải xem thêm. Tôi sẽ giải thích với một ví dụ.

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

Điều này cho thấy rằng tôi có một tệp duy nhất, 9,3 MB. Để chia, tôi gõ:

$ split -b 2M file.mp4 part_file

Sau khi chia tách, tôi nhận được các tệp như:

$ 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

Lưu ý hai ký tự được thêm vào tên tệp.

Để lấy lại tệp:

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

3
Phương pháp này sẽ rất nhanh nhưng sẽ không cho phép bạn chơi từng đoạn riêng lẻ. Bạn có thể sử dụng ffmpeg để trích xuất các phần của tệp video nhưng để tự động chia thành nhiều phần nhỏ có thể phát riêng lẻ mà không cần ghép lại chúng thành toàn bộ có thể bạn sẽ cần phải viết tập lệnh bằng tệp mp4. Tôi có thể cho bạn một ví dụ nếu bạn thích, nhưng nếu nó chỉ để di chuyển tệp xung quanh thì câu trả lời này là tốt.
chảy

@Slipstream - bạn đã hiểu đúng - tôi cần chia nó cho youtube. Máy ảnh của tôi đang sản xuất MP4 nhưng tôi cần phải phân tách những nguyên nhân đó vì chúng dài hơn 15 phút cho phép.
Asaf Chertkoff

sau đó bạn muốn câu trả lời của alex bên dưới ...
chảy

5

Sử dụng mkvmerge từ gói mkvtoolnix. Sử dụng một cái gì đó như

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

Điều này sẽ chia tệp của bạn trong các khối 1 GB. Bạn có thể sử dụng chỉ dẫn thời gian là tốt.


Tôi chưa bao giờ sử dụng nó trước đây nhưng đã thử: tuyệt vời! tốc độ ngay lập tức và mọi thứ tiếp tục được đọc. Cảm ơn!
tuk0z

Điều này đặc biệt hữu ích nếu bạn muốn chỉ định kích thước. Cảm ơn!
BBQ Singular

0

Nếu đây là MP4 phần 2, thì với cách tiếp cận rất tỉ mỉ, bạn có thể tiến hành tệp mà không cần bộ mã hóa / giải mã. Câu trả lời này dành cho những người có nền tảng lập trình và trình soạn thảo hex muốn giữ tệp "" nguyên vẹn "".

Phần đầu tiên của tệp là mdat, phần thứ hai là moov, chứa siêu dữ liệu được sử dụng bởi bộ giải mã để xác định vị trí các khối, có chứa các mẫu (hình ảnh và âm thanh được mã hóa, không quan trọng để biết). Sau đó, có STCO, STTS, STSC, v.v ... Đây được gọi là "nguyên tử". Chúng chỉ ra phần bù, chiều dài, v.v. của mỗi khối là gì. Nếu bạn làm một công việc sạch sẽ, bạn có thể tạo một số phiên bản video của mình và phiên bản khác nhau với các đoạn khác nhau. Các tập tin sau đó sẽ có thể phát trong trình phát và được tiêu hóa trên các trang web video. Nếu bạn là một lập trình viên, thì hãy xây dựng một trình phân tích cú pháp MP4 hoặc sử dụng một trình phân tích hiện có để theo dõi các phần và phần bù của chúng. Điều đó sẽ giúp bạn biết thêm về định dạng và tự động xây dựng lại các tệp.


0

Phương pháp đơn giản và dễ dàng nhất là sử dụng MP4Box:

  1. # apt install gpac
  2. $ MP4Box -split 15 /home/asafche/Videos/myVideos/MAH00124.MP4(tham số là thời gian tính bằng giây). Đối với các khả năng phân chia khác, ví dụ theo kích thước, hãy xem https://gpac.wp.imt.fr/mp4box/mp4box-documentation/ hoặcMP4Box -h general

Ghép cũng đơn giản tương tự.


0

Một công cụ GUI nguồn mở khác , có thể phân tách video và làm được nhiều hơn thế, là phanh tay

Ví dụ: ở đây tôi đang chia video của mình trên 24,53 (mm: ss) và cũng cắt xén khung hình ở phía bên phải: nhập mô tả hình ảnh ở đây

Bạn có thể dễ dàng xem bản xem trước của đầu ra - bằng nút "Xem trước".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.