2014-08-29 29 views
17

Tôi không phải là chuyên gia về Chỉnh sửa video nhưng tôi muốn hiểu logic của xử lý video Whatsapp.Nén video như whatsapp

Đầu tiên là của tất cả tôi đã nhận thấy rằng bất kỳ tệp nào, Whatsapp đặt giới hạn video đã tải lên thành 16MB, sau đó whatsapp cắt video không vượt quá giới hạn. đây có phải là một quy ước hay đó là lựa chọn cá nhân?

Thứ hai, Khi video được ghi bằng máy ảnh, nó không được nén theo mặc định, vì vậy whatsapp nén nó bằng cách sử dụng FFMPEG Tôi đoán và không mất thời gian. (đã thử một video có kích thước 1min 1920x1080 với kích thước 125MB, trở nên 640x360 với kích thước 5MB trong thời gian ngắn và quá trình tải lên bắt đầu tự động) .. làm cách nào để thực hiện việc này? và tại sao lựa chọn 640x360, Dường như với tôi rất nhanh đối với 2 tác vụ không đồng bộ: Nén + Tải lên.

Khi tôi chạy lệnh nén ffmpeg -y -i in.mp4 -codec:v libx264 -crf 23 -preset medium -codec:a libfdk_aac -vbr 4 -vf scale=-1:640,format=yuv420p out.mp4 mất khoảng 1 phút và video đang được quay !! : D

Cuối cùng, khi chúng tôi tải xuống video từ Youtube, video này đã được nén (tôi đoán) và whatsapp thậm chí không cố nén. Vì vậy, tôi nghĩ rằng nó sẽ tự động phát hiện rằng video được nén. Làm thế nào chúng ta có thể phát hiện điều này?

Cảm ơn bạn.

+1

"Khi video được ghi bằng máy ảnh không bị nén theo mặc định" - bạn có thể yêu cầu 'MediaRecorder' sử dụng MPEG4 làm định dạng đầu ra. – CommonsWare

+1

@CommonsWare: Cảm ơn bạn. Tôi nên dùng nó ở đâu? Tôi đang làm việc với Intent mặc định 'MediaStore.ACTION_VIDEO_CAPTURE' và truyền một tệp nơi video sẽ được ghi lại. có thể vượt qua 'MPEG4' trong' Extras' không? – Copernic

+1

"có thể chuyển MPEG4 trong phần Extras?" - bạn có thể đặt bất cứ thứ gì bạn muốn trong phần bổ sung.Không có yêu cầu rằng bất kỳ người triển khai nào của 'ACTION_VIDEO_CAPTURE' đều chú ý đến bất kỳ phần bổ sung nào, đặc biệt là các phần bổ sung không thuộc tài liệu' ACTION_IMAGE_CAPTURE'. Việc lựa chọn cách ghi video là tùy thuộc vào nhà phát triển ứng dụng quay video và có lẽ là người dùng chứ không phải bạn. Nếu bạn muốn mức độ kiểm soát đó đối với bản ghi, hãy tự ghi lại. – CommonsWare

Trả lời

9

Đây là câu trả lời có thể cho câu hỏi của bạn:

Nhiệm vụ. 1: Đó là một lựa chọn cá nhân. Nhóm whatsapp đang cố gắng cung cấp trải nghiệm người dùng tốt nhất (UX) mà họ có thể cho người dùng ứng dụng của họ, đó là lý do tại sao họ đã giữ giới hạn 16MB cho tệp video. Hãy tưởng tượng phải mất bao lâu để tải lên một tệp khoảng 125MB. Do đó, ứng dụng nén tệp để tải lên nhanh hơn và trải nghiệm liền mạch.

Nhiệm vụ. 2: Tôi đoán bạn đã tự trả lời câu hỏi này - Lập trình không đồng bộ. Tệp video lớn mà bạn cung cấp, được mã hóa thành định dạng nén theo thuật toán mà họ đã viết cho ứng dụng. Là Devs., Tất cả chúng ta đều biết về các thuật toán và tất cả chúng ta đều biết có những thứ bạn có thể làm để tăng tốc độ thực thi. Tôi đoán họ đã triển khai thuật toán rất riêng của họ bằng cách sử dụng lập trình Không đồng bộ để tăng tốc quá trình. Các thư viện ffmpeg bạn đã đề cập tôi đoán đã được mã hóa trong C mà tôi nghĩ rằng không hỗ trợ cuộc gọi async (không nên chắc chắn mặc dù). Sau này, tải lên chiếm hơn.

Nhiệm vụ. 3 & Cuối cùng: Codec là tiêu chuẩn. Nếu bạn mã hóa tệp video thành MPEG4, sau đó thử mã hóa lại thành MPEG4 ngay cả khi sử dụng chương trình khác, bạn sẽ nhận được kết quả tương tự như cả hai chương trình đều sử dụng cùng một chuẩn mã hóa, nghĩa là chúng không thực hiện thuật toán cụ thể cho các chương trình của họ (điều này mất nhiều năm làm việc). Vì vậy, khi Whatsapp của bạn cố gắng mã hóa các tập tin, nó cho kết quả tương tự.

Hy vọng tôi đã có thể trả lời câu hỏi của bạn.

MichVeline

+1

hay cảm ơn cho thông tin tuyệt vời, nhưng tôi chỉ muốn biết làm thế nào tôi nén video –

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