2011-09-27 125 views
8

Tôi muốn kết hợp hai video mp4 để tạo thành một video mp4 đơn bằng ffmpeg.Kết hợp hai video từ ffmpeg

những gì tôi đã cố gắng cho đến nay là

ffmpeg -i input1.mp4 -i input2.mp4 output.mp4 

Nhưng, mỗi khi tôi có được những video với video codec của đầu vào đầu tiên và không phải là khác. Làm thế nào tôi có thể kết hợp chúng? Bất kỳ ý tưởng về điều này sẽ được đánh giá cao.

+1

Ý của bạn là gì bởi "bộ giải mã video đầu vào đầu tiên chứ không phải từ đầu kia"? Chúng có định dạng video khác nhau không? Bạn có nhận được nội dung của cả hai video ở đầu ra không? – TheJuice

+0

Vui lòng cung cấp thêm chi tiết. Làm thế nào bạn mong đợi để kết hợp chúng? Tuần tự? Hay bạn muốn có hai luồng video song song trong một tệp? MP4 chỉ là một vùng chứa. Các codec thực tế có giống nhau không? Cung cấp đầu ra của 'ffprobe' cho cả hai tệp của bạn. – misha

+0

cả hai video có cùng định dạng và tôi chỉ nhận được video đầu tiên trong tệp ouptput tôi nhận được. – Astha

Trả lời

5

Vui lòng đọc FFMPEG FAQ để biết thông tin về cách tham gia tệp. Không may, vì bạn đang sử dụng tệp MP4, nối đơn giản sẽ không hoạt động vì bạn định dạng MP4 chứa phần "tiêu đề" (mặc dù không nhất thiết phải ở đầu tệp) mô tả và chứa các offset vào dữ liệu truyền thông. Bạn sẽ cần phải chuyển mã cả hai tập tin sang một định dạng có thể được nối và sau đó tạo ra một tập tin MP4 từ định dạng đó (mà sẽ tạo ra một phần tiêu đề thích hợp).

5

Bạn không thể nối các tệp .mp4 nhưng bạn có thể nối các tệp .mpg. Hãy thử chuyển đổi cả hai video thành .mpg trước bằng ffmpeg. Sau đó, chạy một lệnh mèo đơn giản trên cả hai tệp .mpg để tạo tệp .mpg được kết hợp. Sau đó, chuyển đổi tệp .mpg nối vào .mp4 bằng ffmpeg. Đây là một cách tiếp cận vòng xoay nhưng nó hoạt động. Bạn có thể sử dụng "tên đường ống" để giảm số lượng lệnh nhưng kết quả là như nhau.

3

Bạn có thể làm điều này với ffmpeg, nhưng cũng có một công cụ nhỏ ngoài đó, được gọi là MP4Box (một phần của GPAC), có thể nối nhiều tệp MP4.

Trong trường hợp của bạn, cú pháp là

MP4Box -cat input1.mp4 -cat input2.mp4 output.mp4 
+2

Bạn có thể làm điều này bằng 'ffmpeg' bằng cách sử dụng [concat demuxer] (https://trac.ffmpeg.org/wiki/Concatenate#demuxer) (sử dụng nếu đầu vào của bạn có cùng định dạng, v.v ... và bạn muốn [stream copy] (http://ffmpeg.org/ffmpeg.html#Stream-copy)) hoặc [bộ lọc concat] (http://ffmpeg.org/ffmpeg-filters.html#concat) (sử dụng nếu bạn muốn mã hóa và/hoặc nếu đầu vào của bạn không có cùng định dạng, timebase, v.v.). – LordNeckbeard

+0

Xin cảm ơn rất nhiều. Tôi vừa thử nghiệm nhiều tập tin mp4 từ GoPro của tôi bằng cách sử dụng mp4box. Tôi ngạc nhiên về cách làm việc này. Chúng được kết hợp hoàn hảo. – daniel

5

Như câu trả lời trước hiển thị, bạn cần phải chuyển đổi đầu tiên để một định dạng trung gian. Nếu mp4 chứa bitstream h264, bạn có thể sử dụng:

ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts 
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts 
ffmpeg -i "concat:input1.ts|input2.ts" -c copy output.mp4 

Câu trả lời chi tiết hơn bạn có thể tìm thấy here.

Các vấn đề liên quan