Quản lý Khung Video trong Bản trình chiếu trên Android

Giới thiệu

Một video được đặt hợp lý trong bản trình chiếu có thể làm cho thông điệp của bạn hấp dẫn hơn và tăng mức độ tương tác với khán giả.

PowerPoint cho phép bạn thêm video vào một slide trong bản trình chiếu theo hai cách:

  • Thêm hoặc nhúng video cục bộ (được lưu trên máy của bạn)
  • Thêm video trực tuyến (từ nguồn web như YouTube).

Để cho phép bạn thêm video (đối tượng video) vào bản trình chiếu, Aspose.Slides cung cấp giao diện IVideo, giao diện IVideoFrame và các kiểu liên quan khác.

Tạo khung video nhúng

Nếu tệp video mà bạn muốn thêm vào slide được lưu cục bộ, bạn có thể tạo một khung video để nhúng video vào bản trình chiếu.

  1. Tạo một thể hiện của lớp Presentation .
  2. Lấy tham chiếu tới slide thông qua chỉ mục của nó.
  3. Thêm một đối tượng IVideo và truyền đường dẫn tệp video để nhúng video vào bản trình chiếu.
  4. Thêm một đối tượng IVideoFrame để tạo khung cho video.
  5. Lưu bản trình chiếu đã chỉnh sửa.

Đoạn mã Java này cho thấy cách thêm video được lưu cục bộ vào bản trình chiếu:

// Khởi tạo lớp Presentation
Presentation pres = new Presentation("pres.pptx");
try {
    // Tải video
    FileInputStream fileStream = new FileInputStream("Wildlife.mp4");
    
    IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);

    // Lấy slide đầu tiên và thêm một khung video
    pres.getSlides().get_Item(0).getShapes().addVideoFrame(10, 10, 150, 250, video);

    // Lưu bản trình chiếu vào đĩa
    pres.save("pres-with-video.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Ngoài ra, bạn có thể thêm video bằng cách truyền trực tiếp đường dẫn tệp vào phương thức addVideoFrame(float x, float y, float width, float height, IVideo video) :

Presentation pres = new Presentation();
try {
	ISlide sld = pres.getSlides().get_Item(0);
	IVideoFrame vf = sld.getShapes().addVideoFrame(50, 150, 300, 150, "video1.avi");
} finally {
	if (pres != null) pres.dispose();
}

Tạo khung video với video từ nguồn web

Các phiên bản mới hơn của Microsoft PowerPoint hỗ trợ video trực tuyến trong bản trình chiếu. Nếu video bạn muốn sử dụng có sẵn trên mạng (ví dụ: trên YouTube), bạn có thể thêm nó vào bản trình chiếu thông qua liên kết web của nó.

  1. Tạo một thể hiện của lớp Presentation .
  2. Lấy tham chiếu tới slide thông qua chỉ mục của nó.
  3. Thêm một đối tượng IVideo và truyền liên kết tới video.
  4. Đặt hình thu nhỏ cho khung video.
  5. Lưu bản trình chiếu.

Đoạn mã Java này cho thấy cách thêm video từ web vào một slide trong bản trình chiếu PowerPoint:

// Khởi tạo đối tượng Presentation đại diện cho tệp bản trình chiếu
Presentation pres = new Presentation();
try {
    addVideoFromYouTube(pres, "Tj75Arhq5ho");
    pres.save("out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}
private static void addVideoFromYouTube(Presentation pres, String videoID)
{
    // Thêm một khung video
    IVideoFrame videoFrame = pres.getSlides().get_Item(0).getShapes().addVideoFrame(
            10, 10, 427, 240, "https://www.youtube.com/embed/" + videoID);
    videoFrame.setPlayMode(VideoPlayModePreset.Auto);

    // Tải hình thu nhỏ
    String thumbnailUri = "http://img.youtube.com/vi/" + videoID + "/hqdefault.jpg";
    URL url;

    try {
        url = new URL(thumbnailUri);
        videoFrame.getPictureFormat().getPicture().setImage(pres.getImages().addImage(url.openStream()));
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Cắt bớt khung video

Aspose.Slides cho phép bạn kiểm soát phần nào của video sẽ được phát bằng cách đặt giá trị trim-from-start và trim-from-end thông qua IVideoFrame.setTrimFromStartIVideoFrame.setTrimFromEnd. Cả hai giá trị đều được chỉ định bằng mili giây và xác định thời gian bị bỏ qua từ đầu và cuối video. Các cài đặt này thay đổi cách phát video trong bản trình chiếu; chúng không cắt hay sửa đổi dữ liệu nhị phân video đã nhúng.

Đặt cài đặt cắt bớt

Để tạo khung video và đặt cài đặt cắt bớt:

  1. Tạo một thể hiện của lớp Presentation .
  2. Thêm một đối tượng IVideo vào bản trình chiếu.
  3. Thêm một đối tượng IVideoFrame vào một slide.
  4. Đặt giá trị trim-from-start và trim-from-end thông qua IVideoFrame.setTrimFromStartIVideoFrame.setTrimFromEnd.
  5. Lưu bản trình chiếu đã chỉnh sửa.

Đoạn mã mẫu sau bỏ qua 2,5 giây đầu và 1 giây cuối của video đã nhúng khi phát:

Presentation presentation = new Presentation();
try {
    FileInputStream videoStream = new FileInputStream("video.mp4");
    try {
        IVideo video = presentation.getVideos().addVideo(
                videoStream, LoadingStreamBehavior.ReadStreamAndRelease);
        ISlide slide = presentation.getSlides().get_Item(0);
        IVideoFrame videoFrame = slide.getShapes().addVideoFrame(50, 50, 640, 360, video);

        videoFrame.setTrimFromStart(2500f);
        videoFrame.setTrimFromEnd(1000f);

        presentation.save("video_with_trim.pptx", SaveFormat.Pptx);
    } finally {
        videoStream.close();
    }
} finally {
    presentation.dispose();
}

Đọc cài đặt cắt bớt

Để kiểm tra các cài đặt cắt bớt hiện có, tải một bản trình chiếu, tìm đối tượng IVideoFrame trong các hình dạng trên slide đầu tiên, và đọc các giá trị qua IVideoFrame.getTrimFromStartIVideoFrame.getTrimFromEnd.

Đoạn mã mẫu sau tìm khung video đầu tiên trên slide đầu tiên và báo cáo cài đặt cắt bớt của nó tính bằng mili giây:

Presentation presentation = new Presentation("video_with_trim.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame) shape;
            float trimFromStart = videoFrame.getTrimFromStart();
            float trimFromEnd = videoFrame.getTrimFromEnd();

            System.out.println("Trim from start: " + trimFromStart + " ms");
            System.out.println("Trim from end: " + trimFromEnd + " ms");
            break;
        }
    }
} finally {
    presentation.dispose();
}

Quản lý phụ đề video

Aspose.Slides cho phép bạn quản lý phụ đề đóng cho các khung video trong bản trình chiếu PowerPoint. Các phụ đề được lưu ở định dạng WebVTT và được truy cập qua phương thức IVideoFrame.getCaptionTracks .

Thêm phụ đề vào khung video

Để thêm phụ đề vào một khung video:

  1. Tạo một thể hiện của lớp Presentation .
  2. Thêm một video vào bản trình chiếu.
  3. Thêm một đối tượng IVideoFrame vào một slide.
  4. Sử dụng ICaptionsCollection trả về bởi getCaptionTracks để thêm một track phụ đề WebVTT.
  5. Lưu bản trình chiếu đã chỉnh sửa.

Đoạn mã sau cho thấy cách thêm phụ đề vào khung video:

Presentation presentation = new Presentation();
try {
    byte[] videoData = // "video.mp4";
    IVideo video = presentation.getVideos().addVideo(videoData);

    ISlide slide = presentation.getSlides().get_Item(0);
    IVideoFrame videoFrame = slide.getShapes().addVideoFrame(0, 0, 100, 100, video);

    // Thêm một track phụ đề mới từ tệp WebVTT.
    videoFrame.getCaptionTracks().add("English", "track.vtt");

    presentation.save("video_with_captions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Giao diện ICaptionsCollection cũng cung cấp một overload cho phép bạn thêm phụ đề từ một luồng dữ liệu.

Trích xuất phụ đề từ khung video

Để trích xuất phụ đề từ một khung video:

  1. Tải bản trình chiếu chứa video.
  2. Tìm đối tượng IVideoFrame mục tiêu.
  3. Duyệt qua các track phụ đề trả về bởi getCaptionTracks.
  4. Lưu mỗi track phụ đề vào tệp .vtt.

Đoạn mã sau cho thấy cách trích xuất phụ đề từ khung video:

Presentation presentation = new Presentation("video_with_captions.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    for (IShape shape : slide.getShapes()) {
        if (shape instanceof IVideoFrame) {
            IVideoFrame videoFrame = (IVideoFrame) shape;
            for (ICaptions captionTrack : videoFrame.getCaptionTracks()) {
                // Lưu track phụ đề vào tệp WebVTT.
                FileOutputStream outputStream = new FileOutputStream(captionTrack.getCaptionId() + ".vtt");
                outputStream.write(captionTrack.getBinaryData());
                outputStream.close();
            }
        }
    }
} finally {
    presentation.dispose();
}

Mỗi đối tượng ICaptions cung cấp định danh phụ đề, nhãn, dữ liệu nhị phân và dữ liệu phụ đề dưới dạng chuỗi UTF-8.

Xóa phụ đề khỏi khung video

Để xóa phụ đề khỏi một khung video:

  1. Tải bản trình chiếu chứa video.
  2. Lấy đối tượng IVideoFrame mục tiêu.
  3. Xóa các track phụ đề khỏi bộ sưu tập trả về bởi getCaptionTracks.
  4. Lưu bản trình chiếu đã chỉnh sửa.

Đoạn mã sau cho thấy cách xóa tất cả phụ đề khỏi khung video:

Presentation presentation = new Presentation("video_with_captions.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IVideoFrame videoFrame = (IVideoFrame) slide.getShapes().get_Item(0);

    // Xóa toàn bộ phụ đề khỏi khung video.
    videoFrame.getCaptionTracks().clear();

    presentation.save("video_without_captions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Nếu bạn chỉ cần xóa một track phụ đề, hãy sử dụng phương thức remove hoặc removeAt thay vì clear .

Trích xuất video từ slide

Bên cạnh việc thêm video vào slide, Aspose.Slides cho phép bạn trích xuất video đã nhúng trong bản trình chiếu.

  1. Tạo một thể hiện của lớp Presentation để tải bản trình chiếu chứa video.
  2. Duyệt qua tất cả các đối tượng ISlide .
  3. Duyệt qua tất cả các đối tượng IShape để tìm một VideoFrame .
  4. Lưu video ra đĩa.

Đoạn mã Java này cho thấy cách trích xuất video trên một slide trong bản trình chiếu:

// Khởi tạo một đối tượng Presentation đại diện cho tệp bản trình chiếu
Presentation pres = new Presentation("VideoSample.pptx");
try {
    for (ISlide slide : pres.getSlides()) 
    {
        for (IShape shape : slide.getShapes()) 
        {
            if (shape instanceof VideoFrame) 
            {
                IVideoFrame vf = (IVideoFrame) shape;
                String type = vf.getEmbeddedVideo().getContentType();
                int ss = type.lastIndexOf('-');
                byte[] buffer = vf.getEmbeddedVideo().getBinaryData();

                // Lấy phần mở rộng tệp
                int charIndex = type.indexOf("/");
                type = type.substring(charIndex + 1);

                FileOutputStream fop = new FileOutputStream("testing2." + type);
                fop.write(buffer);
                fop.flush();
                fop.close();
            }
        }
    }
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Câu hỏi thường gặp

Các tham số phát lại video nào có thể thay đổi cho một VideoFrame?

Bạn có thể kiểm soát chế độ phát (tự động hoặc khi click) và vòng lặp. Các tùy chọn này có sẵn qua các thuộc tính của đối tượng VideoFrame .

Việc thêm video có ảnh hưởng đến kích thước tệp PPTX không?

Có. Khi bạn nhúng một video cục bộ, dữ liệu nhị phân được đưa vào tài liệu, do đó kích thước bản trình chiếu tăng tỷ lệ với kích thước tệp. Khi bạn thêm video trực tuyến, chỉ có liên kết và hình thu nhỏ được nhúng, vì vậy tăng kích thước sẽ ít hơn.

Tôi có thể thay thế video trong một VideoFrame hiện có mà không thay đổi vị trí và kích thước không?

Có. Bạn có thể hoán đổi nội dung video trong khung mà vẫn giữ nguyên hình học của shape; đây là kịch bản phổ biến để cập nhật phương tiện trong bố cục hiện có.

Có thể xác định loại nội dung (MIME) của video đã nhúng không?

Có. Một video đã nhúng có một loại nội dung mà bạn có thể đọc và sử dụng, ví dụ khi lưu nó ra đĩa.