Công nghệ phía sau Hyperlapse từ Instagram
Hôm qua, chúng tôi đã phát hành Hyperlapse – một ứng dụng mới cho phép bạn quay và chia sẻ những video time lapse. Time lapse là kỹ thuật trong đó những khung hình được phát lại với tốc độ nhanh hơn tốc độ chúng được quay. Chúng cho phép bạn tận hưởng hoàng hôn trong 15 giây hoặc là sương mù trôi qua những ngọn đồi như là dòng nước chảy qua những hòn đá. Bởi vì time lapse bộc lộ hết những chuyển động trong cuộc sống hàng ngày của chúng ta trong khi những sự vật khác trở nên vô hình nên time lapse trở nên rất là mê hoặc Hyperlapse là một dạng đặc biệt của time lapse khi mà video được quay khi camera cũng di chuyển. Quay hyperlapse truyền thống là một quá trình nặng nhọc liên quan đến lập kế hoạch, một số lượng lớn camera và phần mềm chỉnh sửa video chuyên nghiệp. Với Hyperlapse, mục tiêu của chúng tôi là đơn giản hóa quá trình trên. Chúng tôi đã đạt được với 1 nút record duy nhất và 1 màn hình phát khi bạn lựa chọn tốc độ phát lại. Chúng tôi đã sử dụng 1 thuật toán ổn định video được gọi là Cinema (thuật toán này đã được sử dụng trong Video của Instagram) trong Hyperlapse để đạt được sự uyển chuyển trong các chuyển động trong video. Trong bài viết này, chúng tôi sẽ miêu tả thuật toán ổn định và thách thức về công nghê mà chúng tôi gặp phải trong khi cố gắng thu gọn quá trình chuyển đổi công nghệ time lapse phức tạp trong nhiếp ảnh sang một giao diện đơn giản và dễ tương tác
Thuật toán ổn định Cinema
Ổn định video là một phần trong việc quay một video đẹp và mượt. Trong nền công nghiệp điện ảnh, nó có thể đạt được bằng một hệ thống camera được trang bị một dụng cụ để tách sự di chuyển của camera khỏi sự di chuyển của hệ thống. Bời vì chúng ta không thể trông chờ một người dùng Instagram trang bị một hệ thống như thế để có thể quay được những khoảnh khắc của thế giới, chúng tôi đã phát triển Cinema, sử dụng con quay hồi chuyển tích hợp sẵn trong smartphone để đo đạc và loại bỏ những rung động không mong muốn. Biểu đồ dưới đây minh họa quá trình xử lý của thuật toán ổn định Cinema. Chúng tôi đưa những kết quả thu được từ con quay hồi chuyển và khung hình vào bộ ổn định và thu được một tập hợp sự định hướng của camera. Chúng đóng góp vai trò trong việc tổng hợp một chuyển động trơn tru của máy ảnh với tất cả sự lệch khung hình hay là rung giật được loại bỏ.
Những kết quả định hướng này sau đấy sẽ được đưa vào bộ lọc video bên dưới. Mỗi khung hình đầu vào sau đó sẽ được thay đổi bởi IGStabilizationFilter dựa trên định hướng camera tương ứng.
Video dưới đây biểu diễn thuật toán Cinema hoạt động như thế nào để thay đổi khung hình chống lại sự rung của camera. Vùng bên trong đường màu trắng là vùng nhìn thấy được ở video đầu ra. Ở đây cần chú ý rằng cạnh của khung hình biến dạng không bao giờ cắt đường viền trắng. Đó là vì thuật toán ổn định của chúng tôi tính toàn vùng hình ảnh mượt mà nhất camera quay lại được trong khi vẫn đảm bảo rằng khung hình không bao giờ bị thay đổi để mà vùng ngoài khung hình trở nên có thể nhìn thấy được ở video cuối cùng. Cũng cần chú ý trăng nó nghĩa là chúng ta cần cắt hoặc là zoom vào để có một vùng đệm xung quanh vùng nhìn thấy được. Vùng đệm này cho phép chúng ta có thể di chuyển khung hình để hạn chế sự rung tay mà không có sự xuất hiện của những vùng trống ở video cuối cùng.
Ổn định Hyperlapse
Trong Hyperlapse, bạn có thể kéo thanh trượt để lựa chọn mức độ time lapse sau khi bạn đã ghi lại video. Ví dụ mức độ time lapse 6x tương ứng với đặt mỗi 6 khung hình ở video đầu vào và phát những khung hình đó với tốc độ 30 fps. Tốc độ của video sẽ nhanh hơn 6 lần so với video gốc.
Chúng tôi đã thay đổi thuật toán Cinema để tính toán sự định hướng chỉ dựa trên những khung hình được giữ lại. Nó có nghĩa rằng những vùng trống chỉ được áp dụng cho những khung hình này. Dựa vào đó chúng tôi có thể đưa ra một video mượt mà kể cả khi video đầu vào không ổn định trở nên rung dữ dội theo thời gian. Bạn có thể xem video dưới đây để hình dung rõ hơn.
Zoom thông minh
Như đã đề cập trước đấy, chúng tôi cần zoom gần vào để tạo khoảng trống chống lại sự rung tay mà không để xuất hiện vùng trống vào trong video đầu ra (ví dụ vùng bên ngoài khung hình đầu vào sẽ không có bất cứ pixel dữ liệu nào). Tất cả các thuật toán ổn định video đều đánh đổi độ phân giải lấy sự ổn định. Tuy nhiên, Cinema zoom một cách thông minh dựa trên sự rung của video đầu vào. Các bạn có thể tiếp tục xem video bên dưới để dễ hình dung
Video ở bên trái chỉ hơi rung 1 tẹo bởi vì nó được quay khi vẫn đứng yên. Trong trường hợp này, chúng ta chỉ cần zoom 1 chút bởi vì chúng ta không cần quá nhiều vùng trống để chống lại sự rung của camera. Video ở bên phải được quay khi đi bộ. Vì vậy, camera thật sự rất là lắc. Chúng ta cần zoom vào nhiều hơn để có đủ không gian cho sự mượt mà. Đây chính là sự đánh đổi giữa độ phân giải và sự mượt mà của chuyển động camera vì zoom vào sẽ làm giảm vùng nhìn thấy. Thuật toán zoom thông minh của chúng tôi hạn chế hết mức sự rung máy trong khi vẫn cố gắng giữ nguyên độ phân giải hiệu quả dựa trên mỗi video.
Kết hợp tất cả lại với nhau
“90% lượng code đầu tiên tương ứng với 90% thời gian phát triển đầu tiên. 10% lượng code còn lại tương ứng với 90% thời gian phát triển khác” – Tom Cargill, Bell Labs
Trong giai đoạn đầu của quá trình phát triển Hyperlapse, chúng tôi đã quyết định răng chúng tôi muốn một thanh trượt để điều chỉnh tốc độ của time lapse. Chúng tôi cũng đã muốn có 1 kênh phản hồi ngay lập tức để tăng trải nghiệm và giảm công sức, kể cả khi những tính toán phức tạp được thực hiện phía dưới. Mỗi khi bạn di chuyển thanh trượt, chúng tôi đều tính toán những bước như sau:
1. Chúng tôi yêu cầu những khung hình từ bộ giải mã ở tốc độ ghi mới
2. Chúng tôi sử dụng thuật toán ổn định Cinema ở luồng chạy nền để tính toán độ zoom tối ưu và 1 một tập hợp các định hướng cho độ zoom mới và lượng thời gian trôi đi.
3. Chúng tôi tiếp tục chơi video trong khi chờ đợi dữ liệu ổn định mới tới. Chúng tôi nội suy những định hướng này được tính toán thời gian trôi đi trước đó để cho ra những định hướng của những khung hình mới
4. Một khi những định hướng mới được đưa ra từ bộ ổn định, chúng tôi thay thế chúng cho bộ những định hướng cũ.
Chúng tôi thực hiện những bước trên đây mỗi khi bạn thay đổi giá trị thanh trượt mà không gián đoạn quá trình quay video. Kết quả cuối cùng là ứng dụng phải nhẹ nhàng và phản hồi tốt. Chúng tôi không thể chờ đợi được sự sáng tạo mà Hyperlapse mang đến cho cộng đồng của chúng ta khi mà bạn có thể quay một hyperlapse với chỉ một nút bấm.
By Alex Karpenko
Bài gốc: http://instagram-engineering.tumblr.com/post/95922900787/hyperlapse