Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX

Phần đầu tiên mô tả nhiệm vụ khó khăn trong việc số hóa các video gia đình cũ và chia chúng thành các cảnh riêng biệt.. Sau khi xử lý tất cả các clip, tôi muốn sắp xếp việc xem trực tuyến của chúng thuận tiện như trên YouTube. Vì đây là những kỷ niệm cá nhân của gia đình nên không thể đăng lên YouTube. Chúng tôi cần một dịch vụ lưu trữ riêng tư hơn, vừa thuận tiện vừa an toàn.

Bước 3. Xuất bản

ClipBucket, bản sao YouTube nguồn mở có thể được cài đặt trên máy chủ của riêng bạn

Điều đầu tiên tôi đã thử ClipXô, tự gọi nó là bản sao YouTube nguồn mở mà bạn có thể cài đặt trên máy chủ của mình.

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX

Điều đáng ngạc nhiên là ClipBucket không có bất kỳ hướng dẫn cài đặt nào. Nhờ vào đến quản lý bên ngoài я tự động hóa quá trình cài đặt thông qua Có khả năng, một công cụ quản lý cấu hình máy chủ.

Một phần khó khăn là các tập lệnh cài đặt ClipBucket đã bị hỏng hoàn toàn. Lúc đó tôi đã làm việc tại Google và theo các điều khoản của hợp đồng, tôi không có quyền đóng góp cho bản sao YouTube nguồn mở, nhưng tôi đã đăng một báo cáo lỗi, từ đó có thể dễ dàng thực hiện các chỉnh sửa cần thiết. Nhiều tháng trôi qua, họ vẫn không hiểu vấn đề là gì. Thay vào đó họ đã thêm mọi thứ nhiều hơn lỗi trong mỗi bản phát hành.

ClipBucket hoạt động theo mô hình tư vấn—họ phát hành mã miễn phí và tính phí hỗ trợ triển khai. Dần dần tôi nhận ra rằng một công ty kiếm tiền từ dịch vụ hỗ trợ trả phí có lẽ không mấy quan tâm đến việc để khách hàng tự cài đặt sản phẩm.

MediaGoblin, một giải pháp thay thế hiện đại hơn

Sau vài tháng thất vọng với ClipBucket, tôi đã xem lại các tùy chọn có sẵn và tìm thấy truyền thông yêu tinh.

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX
truyền thông yêu tinh là một nền tảng chia sẻ phương tiện ngoại tuyến

MediaGoblin có rất nhiều tính năng hay. Không giống như ClipBucket trong PHP khó coi, MediaGoblin được viết bằng Python, một ngôn ngữ mà tôi có nhiều kinh nghiệm viết mã. Ăn giao diện dòng lệnh, cho phép bạn dễ dàng tự động tải xuống video. Quan trọng nhất, MediaGoblin đi kèm với Hình ảnh docker, giúp loại bỏ mọi vấn đề cài đặt.

phu bến tàu là công nghệ tạo ra một môi trường khép kín cho một ứng dụng có thể hoạt động ở mọi nơi. Tôi sử dụng Docker trong nhiều dự án của anh ấy.

Khó khăn đáng ngạc nhiên của việc cài đặt lại MediaGoblin

Tôi cho rằng việc triển khai hình ảnh docker MediaGoblin sẽ là một nhiệm vụ tầm thường. Chà, mọi chuyện không hoàn toàn diễn ra theo cách đó.

Hình ảnh hoàn thành không chứa hai chức năng cần thiết:

  • Xác thực
    • MediaGoblin tạo một cổng truyền thông công cộng theo mặc định và tôi cần một cách để hạn chế quyền truy cập của người ngoài.
  • Chuyển mã
    • Mỗi khi bạn tải xuống một video, MediaGoblin sẽ cố gắng chuyển mã video đó để phát trực tuyến tối ưu. Nếu video ban đầu đã sẵn sàng để phát trực tuyến thì việc chuyển mã sẽ làm giảm chất lượng.
    • MediaGoblin cung cấp vô hiệu hóa chuyển mã thông qua các tùy chọn cấu hình, nhưng điều này không thể thực hiện được trong hình ảnh Docker hiện có.

Vâng, không có vấn đề gì. Hình ảnh Docker đi kèm với mã nguồn mở, vậy là có thể tự xây dựng lại nó.

Thật không may, hình ảnh Docker không còn được xây dựng từ hình ảnh hiện tại nữa. Kho lưu trữ MediaGoblin. Tôi đã cố gắng đồng bộ hóa nó với phiên bản từ bản dựng thành công gần đây nhất nhưng cũng không được. Mặc dù tôi đã sử dụng chính xác cùng một mã nhưng các phần phụ thuộc bên ngoài của MediaGoblin đã thay đổi, làm hỏng bản dựng. Hàng chục giờ sau, tôi chạy đi chạy lại quá trình xây dựng MediaGoblin kéo dài 10-15 phút cho đến khi nó hoạt động.

Vài tháng sau điều tương tự cũng xảy ra. Tổng cộng, trong vài năm qua, chuỗi phụ thuộc MediaGoblin đã phá vỡ bản dựng của tôi nhiều lần và lần cuối cùng điều đó xảy ra là khi tôi đang viết bài viết này. Cuối cùng tôi đã xuất bản nhánh riêng của MediaGoblin c phụ thuộc được mã hóa cứng và các phiên bản thư viện được chỉ định rõ ràng. Nói cách khác, thay vì tuyên bố mơ hồ rằng MediaGoblin hoạt động với mọi phiên bản cần tây >= 3.0, tôi đã cài đặt một phiên bản phụ thuộc cụ thể cần tây 4.2.1vì tôi đã thử nghiệm MediaGoblin với phiên bản này. Có vẻ như sản phẩm cần cơ chế xây dựng tái sản xuấtnhưng tôi vẫn chưa làm được điều đó.

Dù sao, sau nhiều giờ vật lộn, cuối cùng tôi cũng có thể xây dựng và định cấu hình MediaGoblin trong hình ảnh Docker. Ở đó đã dễ dàng rồi bỏ qua việc chuyển mã không cần thiết и cài đặt Nginx để xác thực.

Bước 4. Lưu trữ

Vì MediaGoblin đang chạy Docker trên máy cục bộ của tôi nên bước tiếp theo là triển khai lên máy chủ đám mây để gia đình có thể xem video.

MediaGoblin và vấn đề lưu trữ video

Có nhiều nền tảng lấy hình ảnh Docker và lưu trữ nó trên một URL công khai. Điều đáng chú ý là ngoài ứng dụng, còn phải đăng 33 GB tệp video. Có thể mã hóa cứng chúng thành hình ảnh docker, nhưng nó trở nên cồng kềnh và xấu xí. Việc thay đổi một dòng cấu hình sẽ yêu cầu triển khai lại 33 GB dữ liệu.

Khi tôi sử dụng ClipBucket tôi đã giải quyết được vấn đề với gcsfuse - một tiện ích cho phép hệ điều hành tải các thư mục lên bộ lưu trữ đám mây Google Cloud dưới dạng đường dẫn thông thường tới hệ thống tệp. Tôi đã lưu trữ các tệp video trên Google Cloud và sử dụng gcsfuse để hiển thị chúng dưới dạng tệp cục bộ trong ClipBucket.

Sự khác biệt là ClipBucket chạy trên máy ảo thực, trong khi MediaGoblin chạy trong vùng chứa Docker. Ở đây, việc gắn tệp từ bộ lưu trữ đám mây hóa ra khó khăn hơn nhiều. Tôi đã dành hàng chục giờ để giải quyết tất cả các vấn đề và viết về nó toàn bộ bài đăng trên blog.

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX
Sự tích hợp ban đầu của MediaGoblin với bộ lưu trữ Google Cloud mà tôi đang nói đến kể vào năm 2018

Sau vài tuần điều chỉnh tất cả các thành phần, mọi thứ đều hoạt động. Không thực hiện bất kỳ thay đổi nào đối với mã của MediaGoblin, tôi đã lừa nó đọc và ghi các tệp phương tiện vào bộ lưu trữ đám mây của Google.

Vấn đề duy nhất là MediaGoblin trở nên chậm chạp một cách khó hiểu. Phải mất đầy đủ 20 giây để tải hình thu nhỏ của video lên trang chủ. Nếu bạn nhảy về phía trước trong khi xem video, MediaGoblin sẽ tạm dừng trong 10 giây vô tận trước khi tiếp tục phát lại.

Vấn đề chính là các video và hình ảnh phải mất một chặng đường dài và vòng vèo đến tay người dùng. Họ phải chuyển từ bộ lưu trữ đám mây của Google thông qua gcsfuse sang MediaGoblin, Nginx - và chỉ sau đó họ mới truy cập được trình duyệt của người dùng. Nút thắt chính là gcsfuse, không được tối ưu hóa về tốc độ. Các nhà phát triển cảnh báo về sự chậm trễ lớn trong hoạt động của tiện ích ngay trên trang chính của dự án:

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX
Cảnh báo về hiệu suất thấp trong tài liệu gcsfuse

Lý tưởng nhất là trình duyệt nên tìm nạp tệp trực tiếp từ Google Cloud, bỏ qua mọi lớp trung gian. Làm cách nào bạn có thể thực hiện việc này mà không cần đi sâu vào cơ sở mã MediaGoblin hoặc thêm logic tích hợp Google Cloud phức tạp?

Thủ thuật Sub_filter trong nginx

May mắn thay tôi đã tìm thấy một giải pháp dễ dàng hơi xấu xí. Tôi đã thêm vào cấu hình default.conf trong Nginx một bộ lọc như vậy:

sub_filter "/mgoblin_media/media_entries/" "https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/";
sub_filter_once off;

Trong thiết lập của tôi, Nginx đóng vai trò là proxy giữa MediaGoblin và người dùng cuối. Lệnh trên hướng dẫn Nginx tìm kiếm và thay thế tất cả các phản hồi HTML của MediaGoblin trước khi phân phát chúng cho người dùng cuối. Nginx thay thế tất cả các đường dẫn tương đối đến tệp phương tiện MediaGoblin bằng URL từ bộ lưu trữ đám mây của Google.

Ví dụ: MediaGoblin tạo HTML như thế này:

<video width="720" height="480" controls autoplay>
  <source
    src="/mgoblin_media/media_entries/16/Michael-riding-a-bike.mp4"
    type="video/mp4">
</video>

Nginx thay đổi câu trả lời:

<video width="720" height="480" controls autoplay>
  <source
    src="https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/16/Michael-riding-a-bike.mp4"
    type="video/mp4">
</video>

Bây giờ mọi thứ đang diễn ra như mong đợi:

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX
Nginx viết lại phản hồi từ MediaGoblin để khách hàng có thể yêu cầu tệp phương tiện trực tiếp từ bộ lưu trữ đám mây của Google

Phần hay nhất về giải pháp của tôi là nó không yêu cầu bất kỳ thay đổi nào đối với mã MediaGoblin. Lệnh hai dòng của Nginx tích hợp liền mạch MediaGoblin và Google Cloud, mặc dù các dịch vụ hoàn toàn không biết gì về nhau.

Ghi: Giải pháp này yêu cầu mọi người đều có thể đọc được các tệp trong bộ lưu trữ đám mây của Google. Để giảm nguy cơ truy cập trái phép, tôi sử dụng tên nhóm dài và ngẫu nhiên (ví dụ: mediagoblin-39dpduhfz1wstbprmyk5ak29) và xác minh rằng chính sách kiểm soát truy cập của nhóm không cho phép người dùng trái phép hiển thị nội dung của thư mục.

Sản phẩm cuối cùng

Tại thời điểm này tôi đã có một giải pháp hoàn chỉnh và hiệu quả. MediaGoblin chạy rất vui vẻ trong vùng chứa riêng của nó trên nền tảng đám mây của Google nên không cần phải vá hoặc cập nhật thường xuyên. Mọi thứ trong quy trình của tôi đều được tự động hóa và có thể tái tạo, cho phép chỉnh sửa đơn giản hoặc quay lại các phiên bản trước.

Gia đình tôi thực sự thích việc xem video thật dễ dàng. Với sự trợ giúp của bản hack Nginx được mô tả ở trên, việc xử lý video trở nên nhanh chóng như trên YouTube.

Màn hình xem trông như thế này:

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX
Nội dung danh mục video gia đình theo tag “Hay nhất”

Nhấp vào hình thu nhỏ sẽ xuất hiện màn hình như thế này:

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX
Xem một clip trên máy chủ phương tiện

Sau nhiều năm làm việc, thật vô cùng bổ ích khi mang đến cho các thành viên trong gia đình cơ hội xem video của chúng tôi trên cùng một giao diện thân thiện với người dùng giống như YouTube mà tôi mong muốn ban đầu.

Phần thưởng: Giảm chi phí xuống dưới 1 USD mỗi tháng

Bạn không xem video ở nhà thường xuyên, chỉ vài tháng một lần. Gia đình tôi tổng cộng tạo ra khoảng 20 giờ lưu lượng truy cập trong một năm, nhưng máy chủ vẫn hoạt động 15/99,7. Tôi đã trả XNUMX USD hàng tháng cho một máy chủ bị hỏng XNUMX%.

Cuối năm 2018 Google cho ra mắt sản phẩm Đám mây chạy. Tính năng nổi bật là chạy các vùng chứa Docker nhanh đến mức ứng dụng có thể phản hồi các yêu cầu HTTP. Nghĩa là, máy chủ có thể vẫn ở chế độ chờ - và chỉ khởi động khi ai đó muốn truy cập. Đối với những ứng dụng ít được sử dụng như của tôi, chi phí đã tăng từ 15 USD/tháng xuống còn vài xu/năm.

Vì những lý do mà tôi không còn nhớ nữa, Cloud Run không hoạt động với hình ảnh MediaGoblin của tôi. Nhưng với sự ra đời của Cloud Run tôi đã nhớ ra rằng Heroku cung cấp miễn phí dịch vụ tương tự và các công cụ của họ thân thiện với người dùng hơn nhiều so với Google.

Với một máy chủ ứng dụng miễn phí, chi phí duy nhất là lưu trữ dữ liệu. Bộ nhớ khu vực tiêu chuẩn của Google có giá 2,3 xu/GB. Kho lưu trữ video chiếm 33 GB nên tôi chỉ phải trả 77 xu một tháng.

Hành trình kéo dài 45 năm của tôi nhằm số hóa 2 băng video. Phần XNUMX
Giải pháp này chỉ có giá 0,77 USD mỗi tháng

Lời khuyên cho những người dự định thử

Rõ ràng quá trình này đã khiến tôi mất nhiều thời gian. Nhưng tôi hy vọng bài viết này sẽ giúp bạn tiết kiệm được 80-90% công sức số hóa và xuất bản video gia đình của mình. Trong một phần riêng biệt, bạn có thể tìm thấy hướng dẫn chi tiết từng bước trong suốt quá trình nhưng đây là một số mẹo chung:

  • Trong giai đoạn số hóa và chỉnh sửa, hãy lưu giữ càng nhiều siêu dữ liệu càng tốt.
    • Thông tin có giá trị thường được ghi lại trên nhãn băng video.
    • Theo dõi clip nào được quay từ băng nào và theo thứ tự nào.
    • Ghi lại ngày quay có thể xuất hiện trên video.
  • Hãy cân nhắc việc trả tiền cho các dịch vụ số hóa chuyên nghiệp.
    • bạn sẽ cực kỳ rất khó và tốn kém để so sánh chúng về chất lượng số hóa.
    • Nhưng hãy tránh xa một công ty có tên EverPresent (nhắn tin cho tôi nếu bạn cần thông tin chi tiết).
  • Nếu bạn tự số hóa, hãy mua ổ cứng.
    • Video độ phân giải tiêu chuẩn không nén mất 100-200 MB mỗi phút.
    • Tôi giữ mọi thứ của mình Synology DS412 + (10TB).
  • Ghi lại siêu dữ liệu ở một số định dạng phổ biến không gắn với một ứng dụng cụ thể.
    • Mô tả clip, mã thời gian, ngày tháng, v.v.
    • Nếu bạn lưu siêu dữ liệu ở định dạng dành riêng cho ứng dụng (hoặc tệ hơn là không lưu nó), bạn sẽ không thể làm lại công việc nếu quyết định sử dụng một giải pháp khác.
    • Trong khi chỉnh sửa, bạn sẽ thấy rất nhiều siêu dữ liệu hữu ích trên video. Bạn sẽ mất chúng nếu bạn không lưu chúng.
      • Điều gì đang xảy ra trong video?
      • Ai được đăng ký ở đó?
      • Điều này được ghi lại khi nào?
  • Đánh dấu video yêu thích của bạn.
    • Thành thật mà nói, hầu hết các video gia đình đều khá nhàm chán.
    • Tôi gắn thẻ “hay nhất” cho các clip yêu thích của mình và mở chúng khi tôi muốn xem những video hài hước.
  • Tổ chức giải pháp toàn diện càng sớm càng tốt để quá trình diễn ra ngay từ đầu đến cuối.
    • Tôi đã cố gắng số hóa tất cả các băng trước, sau đó chỉnh sửa tất cả các băng, v.v.
    • Tôi ước gì tôi đã bắt đầu với một cuốn băng và thực hiện tất cả công việc với nó. Sau đó, tôi sẽ hiểu những quyết định nào và ở giai đoạn nào ảnh hưởng đến kết quả cuối cùng.
  • Giảm thiểu việc ghi lại.
    • Mỗi khi bạn chỉnh sửa hoặc mã hóa lại một clip, chất lượng của nó sẽ giảm đi.
    • Số hóa cảnh quay thô của bạn ở chất lượng tối đa, sau đó chuyển mã từng clip chính xác một lần sang định dạng mà trình duyệt hiển thị nguyên bản.
  • Sử dụng giải pháp đơn giản nhất có thể để xuất bản các video clip.
    • Nhìn lại, MediaGoblin có vẻ giống như một công cụ quá phức tạp đối với một kịch bản khá đơn giản là tạo các trang web với một tập hợp tệp video tĩnh.
    • Nếu tôi bắt đầu lại, tôi sẽ sử dụng trình tạo trang tĩnh như Hugo, Jekyll hoặc đẹp trai.
  • Thực hiện cài đặt.
    • Chỉnh sửa video là một cách thú vị để kết hợp những khoảnh khắc đẹp nhất từ ​​nhiều video.
    • Điều chính trong việc chỉnh sửa là âm nhạc. Ví dụ: chủ đề thật tuyệt vời Tuyết Chậm từ The National, đây là khám phá cá nhân của tôi.

Nguồn: www.habr.com