Rumah pembangunan bahagian belakang Golang Golang dan FFmpeg: Bagaimana untuk melaksanakan pemintasan dan penskalaan bingkai video

Golang dan FFmpeg: Bagaimana untuk melaksanakan pemintasan dan penskalaan bingkai video

Sep 27, 2023 am 09:34 AM
video capai golanggolang ffmpegffmpeg

Golang与FFmpeg: 如何实现视频帧截取和缩放

Golang dan FFmpeg: Bagaimana untuk melaksanakan pemintasan dan penskalaan bingkai video, contoh kod khusus diperlukan

Ikhtisar:
Dengan peningkatan keperluan pemprosesan video, orang ramai semakin cenderung untuk menggunakan Golang sebagai bahasa pengaturcaraan untuk pemprosesan video. Sebagai rangka kerja pemprosesan multimedia sumber terbuka yang paling popular dalam industri, FFmpeg menyediakan fungsi yang kaya untuk memproses data audio dan video. Artikel ini akan memperkenalkan cara menggunakan Golang untuk memanggil FFmpeg untuk melaksanakan fungsi pemintasan dan penskalaan bingkai video serta memberikan contoh kod yang sepadan.

Prasyarat:
Sebelum anda bermula, anda perlu memastikan FFmpeg dipasang pada mesin anda dan pembolehubah persekitaran yang betul dikonfigurasikan.

Pemintasan bingkai video:
Mula-mula, mari kita lihat cara melaksanakan pemintasan bingkai video. Dalam FFmpeg, anda boleh menggunakan modul "avformat" untuk membaca fail video dan modul "avcodec" untuk menyahkod bingkai video. Berikut ialah kod contoh mudah:

package main

import (
    "fmt"
    "log"

    "github.com/giorgisio/goav/avcodec"
    "github.com/giorgisio/goav/avformat"
)

func main() {
    // 打开视频文件
    formatContext := avformat.AvformatAllocContext()
    if err := avformat.AvformatOpenInput(&formatContext, "/path/to/video.mp4", nil, nil); err != nil {
        log.Fatal("无法打开视频文件:", err)
    }
    defer avformat.AvformatFreeContext(formatContext)

    // 查找视频流
    if err := formatContext.AvformatFindStreamInfo(nil); err != nil {
        log.Fatal("无法查找视频流:", err)
    }

    var videoStreamIndex int32 = -1
    for i, stream := range formatContext.Streams() {
        if stream.CodecParameters().CodecType() == avformat.AVMEDIA_TYPE_VIDEO {
            videoStreamIndex = int32(i)
            break
        }
    }

    if videoStreamIndex == -1 {
        log.Fatal("找不到视频流")
    }

    // 找到视频解码器
    videoDecoder := avcodec.AvcodecFindDecoder(avcodec.CodecId(formatContext.Streams()[videoStreamIndex].CodecParameters().CodecId()))
    if videoDecoder == nil {
        log.Fatal("无法找到视频解码器")
    }

    // 打开解码器上下文
    videoCodecContext := avcodec.AvcodecAllocContext3(videoDecoder)
    if err := avcodec.AvcodecParametersToContext(videoCodecContext, formatContext.Streams()[videoStreamIndex].CodecParameters()); err != nil {
        log.Fatal("无法打开解码器上下文:", err)
    }

    if err := videoCodecContext.AvcodecOpen2(videoDecoder, nil); err != nil {
        log.Fatal("无法打开解码器:", err)
    }
    defer avcodec.AvcodecFreeContext(videoCodecContext)

    // 读取视频帧
    packet := avcodec.AvPacketAlloc()
    defer avcodec.AvPacketFree(packet)

    for formatContext.AvReadFrame(packet) >= 0 {
        if packet.StreamIndex() == videoStreamIndex {
            frame := avutil.AvFrameAlloc()
            defer avutil.AvFrameFree(frame)

            if err := videoCodecContext.AvcodecSendPacket(packet); err == nil {
                for videoCodecContext.AvcodecReceiveFrame(frame) == nil {
                    // 处理视频帧
                    fmt.Printf("视频帧:%d
", frame.Pts())
                }
            }
        }
    }
}
Salin selepas log masuk

Dalam kod di atas, kami mula-mula menggunakan avformat.AvformatAllocContext() untuk memperuntukkan objek konteks format dan menggunakan avformat.AvformatOpenInput()</ kod >Fail video dibuka. Kemudian, kami menggunakan <code>avformat.AvformatFindStreamInfo() untuk mencari strim video, dan kemudian menggunakan avformat.AVMEDIA_TYPE_VIDEO untuk menentukan sama ada ia adalah strim video. avformat.AvformatAllocContext()来分配一个格式上下文对象,并使用avformat.AvformatOpenInput()打开了一个视频文件。然后,我们使用avformat.AvformatFindStreamInfo()找到了视频流,再使用avformat.AVMEDIA_TYPE_VIDEO来判断是否为视频流。

接下来,我们使用avcodec.AvcodecFindDecoder()来查找适合的解码器,并使用avcodec.AvcodecParametersToContext()avcodec.AvcodecOpen2()打开了解码器上下文。

最后,我们使用formatContext.AvReadFrame()来读取视频帧,并在videoCodecContext.AvcodecReceiveFrame()中处理每一帧。在这个示例中,我们只是简单地打印每一帧的PTS值。

视频缩放:
接下来,我们来看一下如何实现视频帧的缩放。在FFmpeg中,可以使用"swscale"模块来进行视频帧的缩放。以下是一个简单的示例代码:

package main

import (
    "fmt"
    "image"
    "log"
    "os"

    "github.com/giorgisio/goav/avcodec"
    "github.com/giorgisio/goav/avformat"
    "github.com/giorgisio/goav/swscale"
    "github.com/nfnt/resize"
)

func main() {
    // 打开视频文件
    formatContext := avformat.AvformatAllocContext()
    if err := avformat.AvformatOpenInput(&formatContext, "/path/to/video.mp4", nil, nil); err != nil {
        log.Fatal("无法打开视频文件:", err)
    }
    defer avformat.AvformatFreeContext(formatContext)

    // 查找视频流
    if err := formatContext.AvformatFindStreamInfo(nil); err != nil {
        log.Fatal("无法查找视频流:", err)
    }

    var videoStreamIndex int32 = -1
    for i, stream := range formatContext.Streams() {
        if stream.CodecParameters().CodecType() == avformat.AVMEDIA_TYPE_VIDEO {
            videoStreamIndex = int32(i)
            break
        }
    }

    if videoStreamIndex == -1 {
        log.Fatal("找不到视频流")
    }

    // 找到视频解码器
    videoDecoder := avcodec.AvcodecFindDecoder(avcodec.CodecId(formatContext.Streams()[videoStreamIndex].CodecParameters().CodecId()))
    if videoDecoder == nil {
        log.Fatal("无法找到视频解码器")
    }

    // 打开解码器上下文
    videoCodecContext := avcodec.AvcodecAllocContext3(videoDecoder)
    if err := avcodec.AvcodecParametersToContext(videoCodecContext, formatContext.Streams()[videoStreamIndex].CodecParameters()); err != nil {
        log.Fatal("无法打开解码器上下文:", err)
    }

    if err := videoCodecContext.AvcodecOpen2(videoDecoder, nil); err != nil {
        log.Fatal("无法打开解码器:", err)
    }
    defer avcodec.AvcodecFreeContext(videoCodecContext)

    // 创建视频缩放上下文
    swscaleContext := swscale.SwsGetContext(
        videoCodecContext.Width(), videoCodecContext.Height(), videoCodecContext.PixFmt(),
        videoCodecContext.Width()/2, videoCodecContext.Height()/2, avcodec.AV_PIX_FMT_RGB24,
        0, nil, nil, nil,
    )
    defer swscale.SwsFreeContext(swscaleContext)

    // 创建输出视频文件
    outfile, err := os.Create("/path/to/output.mp4")
    if err != nil {
        log.Fatal("无法创建输出视频文件:", err)
    }
    defer outfile.Close()

    // 创建视频编码器
    videoEncoder := avcodec.AvcodecFindEncoder(avcodec.AV_CODEC_ID_MPEG4)
    if videoEncoder == nil {
        log.Fatal("无法找到视频编码器")
    }

    // 创建编码器上下文
    videoCodecCtx := avcodec.AvcodecAllocContext3(videoEncoder)
    videoCodecCtx.SetBitRate(400000)
    videoCodecCtx.SetWidth(videoCodecContext.Width() / 2)
    videoCodecCtx.SetHeight(videoCodecContext.Height() / 2)
    videoCodecCtx.SetTimeBase(avformat.AVR{Num: 1, Den: 25})
    videoCodecCtx.SetPixFmt(avcodec.AV_PIX_FMT_YUV420P)

    // 打开编码器上下文
    if err := videoCodecCtx.AvcodecOpen2(videoEncoder, nil); err != nil {
        log.Fatal("无法打开编码器上下文:", err)
    }
    defer avcodec.AvcodecFreeContext(videoCodecCtx)

    // 写入视频文件头
    formatContext.SetOutput(outfile)
    if err := formatContext.AvformatWriteHeader(nil); err != nil {
        log.Fatal("无法写入视频文件头:", err)
    }
    defer formatContext.AvformatFreeOutputContext()

    // 准备编码帧和缩放帧
    encodeFrame := avutil.AvFrameAlloc()
    defer avutil.AvFrameFree(encodeFrame)

    encodeFrame.SetWidth(videoCodecCtx.Width())
    encodeFrame.SetHeight(videoCodecCtx.Height())
    encodeFrame.SetFormat(int32(videoCodecCtx.PixFmt()))

    frameSize := avcodec.AvpixelAvImageGetBufferSize(avcodec.AV_PIX_FMT_RGB24, videoCodecCtx.Width()/2, videoCodecCtx.Height()/2, 1)
    encodeFrameBuffer := avutil.AvMalloc(frameSize)
    defer avutil.AvFree(encodeFrameBuffer)

    encodeFrame.AvpixelAvImageFillArrays(encodeFrameBuffer, 1)

    for formatContext.AvReadFrame(packet) >= 0 {
        if packet.StreamIndex() == videoStreamIndex {
            frame := avutil.AvFrameAlloc()
            defer avutil.AvFrameFree(frame)

            if err := videoCodecContext.AvcodecSendPacket(packet); err != nil {
                log.Fatal("无法发送视频包:", err)
            }

            for videoCodecContext.AvcodecReceiveFrame(frame) == nil {
                // 缩放视频帧
                swscale.SwsScale(
                    swscaleContext,
                    frame.Data(), frame.Linesize(),
                    0, frame.Height(),
                    encodeFrame.Data(), encodeFrame.Linesize(),
                )

                // 编码视频帧
                encodeFrame.SetPts(frame.Pts())
                packet := avcodec.AvPacketAlloc()
                if err := avcodec.AvcodecSendFrame(videoCodecCtx, encodeFrame); err != nil {
                    log.Fatal("无法发送编码帧:", err)
                }

                if err := avcodec.AvcodecReceivePacket(videoCodecCtx, packet); err != nil {
                    log.Fatal("无法接收编码包:", err)
                }
                defer avcodec.AvPacketFree(packet)

                // 写入编码后的帧到文件
                if err := formatContext.AvWriteFrame(packet); err != nil {
                    log.Fatal("无法写入帧到文件:", err)
                }
            }
        }
    }

    // 写入视频文件尾
    if err := formatContext.AvWriteTrailer(); err != nil {
        log.Fatal("无法写入视频文件尾:", err)
    }
}
Salin selepas log masuk

以上代码中,我们创建了一个视频缩放上下文swscaleContext,它的输入是原始视频帧的大小,输出是缩放后的视频帧的大小。我们还创建了一个新的编码器上下文videoCodecCtx,它的大小为原始视频帧大小的一半,并将其设置为YUV420P像素格式。

在读取到每一帧视频后,我们使用swscale.SwsScale()

Seterusnya, kami menggunakan avcodec.AvcodecFindDecoder() untuk mencari penyahkod yang sesuai dan menggunakan avcodec.AvcodecParametersToContext() dan avcodec.AvcodecOpen2() membuka konteks penyahkod. <p><br>Akhir sekali, kami menggunakan <code>formatContext.AvReadFrame() untuk membaca bingkai video dan memproses setiap bingkai dalam videoCodecContext.AvcodecReceiveFrame(). Dalam contoh ini, kami hanya mencetak nilai PTS untuk setiap bingkai.

🎜Penskalaan video: 🎜Seterusnya, mari kita lihat cara untuk mencapai penskalaan bingkai video. Dalam FFmpeg, anda boleh menggunakan modul "swscale" untuk menskalakan bingkai video. Berikut ialah kod sampel ringkas: 🎜rrreee🎜Dalam kod di atas, kami mencipta konteks penskalaan video swscaleContext, yang inputnya ialah saiz bingkai video asal, dan outputnya ialah saiz bingkai video berskala. Kami juga mencipta konteks pengekod baharu videoCodecCtx iaitu separuh saiz bingkai video asal dan menetapkannya kepada format piksel YUV420P. 🎜🎜Selepas membaca setiap bingkai video, kami menggunakan fungsi swscale.SwsScale() untuk menskalakannya kepada saiz yang ditentukan dan menghantar bingkai video berskala kepada pengekod untuk pengekodan. Kami kemudian menulis bingkai yang dikodkan ke fail video output. 🎜🎜Ringkasan: 🎜Gabungan Golang dan FFmpeg menyediakan pembangun dengan alat pemprosesan video yang berkuasa. Dalam artikel ini, kami memperkenalkan cara menggunakan Golang untuk memanggil FFmpeg untuk melaksanakan fungsi pemintasan dan penskalaan bingkai video serta memberikan contoh kod yang sepadan. Semoga contoh ini akan membantu anda memahami dengan lebih baik cara menggunakan Golang dan FFmpeg untuk memproses data video. 🎜

Atas ialah kandungan terperinci Golang dan FFmpeg: Bagaimana untuk melaksanakan pemintasan dan penskalaan bingkai video. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah ia melanggar untuk menyiarkan video orang lain di Douyin? Bagaimanakah ia mengedit video tanpa pelanggaran? Adakah ia melanggar untuk menyiarkan video orang lain di Douyin? Bagaimanakah ia mengedit video tanpa pelanggaran? Mar 21, 2024 pm 05:57 PM

Dengan peningkatan platform video pendek, Douyin telah menjadi bahagian yang sangat diperlukan dalam kehidupan seharian setiap orang. Di TikTok, kita boleh melihat video menarik dari seluruh dunia. Sesetengah orang suka menyiarkan video orang lain, yang menimbulkan persoalan: Adakah Douyin melanggar apabila menyiarkan video orang lain? Artikel ini akan membincangkan isu ini dan memberitahu anda cara mengedit video tanpa pelanggaran dan cara mengelakkan isu pelanggaran. 1. Adakah ia melanggar penyiaran video orang lain oleh Douyin? Menurut peruntukan Undang-undang Hak Cipta negara saya, penggunaan tanpa kebenaran karya pemilik hak cipta tanpa kebenaran pemilik hak cipta adalah satu pelanggaran. Oleh itu, menyiarkan video orang lain di Douyin tanpa kebenaran pengarang asal atau pemilik hak cipta adalah satu pelanggaran. 2. Bagaimana untuk mengedit video tanpa pelanggaran? 1. Penggunaan domain awam atau kandungan berlesen: Awam

Bagaimana untuk membuat wang daripada menyiarkan video di Douyin? Bagaimanakah seorang pemula boleh membuat wang di Douyin? Bagaimana untuk membuat wang daripada menyiarkan video di Douyin? Bagaimanakah seorang pemula boleh membuat wang di Douyin? Mar 21, 2024 pm 08:17 PM

Douyin, platform video pendek kebangsaan, bukan sahaja membolehkan kami menikmati pelbagai video pendek yang menarik dan novel pada masa lapang kami, tetapi juga memberi kami pentas untuk menunjukkan diri kami dan merealisasikan nilai kami. Jadi, bagaimana untuk membuat wang dengan menyiarkan video di Douyin? Artikel ini akan menjawab soalan ini secara terperinci dan membantu anda menjana lebih banyak wang di TikTok. 1. Bagaimana untuk membuat wang daripada menyiarkan video di Douyin? Selepas menyiarkan video dan mendapat jumlah tontonan tertentu pada Douyin, anda akan berpeluang untuk mengambil bahagian dalam pelan perkongsian pengiklanan. Kaedah pendapatan ini adalah salah satu yang paling biasa kepada pengguna Douyin dan juga merupakan sumber pendapatan utama bagi banyak pencipta. Douyin memutuskan sama ada untuk menyediakan peluang perkongsian pengiklanan berdasarkan pelbagai faktor seperti berat akaun, kandungan video dan maklum balas khalayak. Platform TikTok membolehkan penonton menyokong pencipta kegemaran mereka dengan menghantar hadiah,

Cara menyiarkan video di Weibo tanpa memampatkan kualiti imej_Cara menyiarkan video di Weibo tanpa memampatkan kualiti imej Cara menyiarkan video di Weibo tanpa memampatkan kualiti imej_Cara menyiarkan video di Weibo tanpa memampatkan kualiti imej Mar 30, 2024 pm 12:26 PM

1. Mula-mula buka Weibo pada telefon mudah alih anda dan klik [Saya] di sudut kanan bawah (seperti yang ditunjukkan dalam gambar). 2. Kemudian klik [Gear] di penjuru kanan sebelah atas untuk membuka tetapan (seperti yang ditunjukkan dalam gambar). 3. Kemudian cari dan buka [Tetapan Umum] (seperti yang ditunjukkan dalam gambar). 4. Kemudian masukkan pilihan [Video Follow] (seperti yang ditunjukkan dalam gambar). 5. Kemudian buka tetapan [Video Upload Resolution] (seperti yang ditunjukkan dalam gambar). 6. Akhir sekali, pilih [Kualiti Imej Asal] untuk mengelakkan pemampatan (seperti yang ditunjukkan dalam gambar).

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Mar 24, 2024 am 11:27 AM

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

Bagaimana untuk menerbitkan karya video Xiaohongshu? Apakah yang perlu saya perhatikan semasa menyiarkan video? Bagaimana untuk menerbitkan karya video Xiaohongshu? Apakah yang perlu saya perhatikan semasa menyiarkan video? Mar 23, 2024 pm 08:50 PM

Dengan kemunculan platform video pendek, Xiaohongshu telah menjadi platform untuk ramai orang berkongsi kehidupan mereka, meluahkan perasaan mereka dan mendapatkan trafik. Pada platform ini, menerbitkan karya video ialah cara interaksi yang sangat popular. Jadi, bagaimana untuk menerbitkan karya video Xiaohongshu? 1. Bagaimana untuk menerbitkan karya video Xiaohongshu? Mula-mula, pastikan anda mempunyai kandungan video yang sedia untuk dikongsi. Anda boleh menggunakan telefon bimbit anda atau peralatan kamera lain untuk merakam, tetapi anda perlu memberi perhatian kepada kualiti imej dan kejelasan bunyi. 2. Edit video: Untuk menjadikan kerja lebih menarik, anda boleh mengedit video. Anda boleh menggunakan perisian penyuntingan video profesional, seperti Douyin, Kuaishou, dsb., untuk menambah penapis, muzik, sari kata dan elemen lain. 3. Pilih kulit muka: Kulit adalah kunci untuk menarik pengguna untuk mengklik.

Dua penyelesaian untuk berkongsi video web pelayar edge tanpa bunyi Dua penyelesaian untuk berkongsi video web pelayar edge tanpa bunyi Mar 14, 2024 pm 02:22 PM

Ramai pengguna suka menonton video pada penyemak imbas Jika tiada bunyi semasa menonton video web pada pelayar tepi, bagaimana untuk menyelesaikan masalah? Masalah ini tidak sukar. Seterusnya, izinkan saya memberitahu anda bagaimana untuk menyelesaikan masalah tiada bunyi dalam video web pelayar tepi. Tiada bunyi dalam video web pelayar tepi? Kaedah 1: 1. Mula-mula, semak tab atas pelayar tepi. 2. Terdapat "Butang Bunyi" di sebelah kiri tab, pastikan ia tidak diredamkan. Kaedah 2: 1. Jika disahkan bahawa bunyi tidak diredamkan, ia mungkin masalah tetapan bunyi. 2. Anda boleh klik kanan peranti bunyi di sudut kanan bawah dan pilih "Open Volume Synthesizer" 3. Buka

Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Panduan Pengaturcaraan PHP: Kaedah untuk Melaksanakan Jujukan Fibonacci Mar 20, 2024 pm 04:54 PM

Bahasa pengaturcaraan PHP ialah alat yang berkuasa untuk pembangunan web, yang mampu menyokong pelbagai logik dan algoritma pengaturcaraan yang berbeza. Antaranya, melaksanakan jujukan Fibonacci adalah masalah pengaturcaraan biasa dan klasik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk melaksanakan jujukan Fibonacci, dan melampirkan contoh kod tertentu. Jujukan Fibonacci ialah jujukan matematik yang ditakrifkan seperti berikut: unsur pertama dan kedua bagi jujukan ialah 1, dan bermula dari unsur ketiga, nilai setiap unsur adalah sama dengan jumlah dua unsur sebelumnya. Beberapa elemen pertama urutan

Bagaimana untuk membenamkan video ppt ke dalam dokumen slaid dan menggabungkannya ke dalam fail Bagaimana untuk membenamkan video ppt ke dalam dokumen slaid dan menggabungkannya ke dalam fail Mar 20, 2024 am 11:30 AM

Persembahan Microsoft PowerPoint ialah salah satu perisian pejabat kami yang biasa digunakan Untuk mempersembahkan kandungan untuk diterangkan secara menyeluruh dan terperinci, video merupakan salah satu kaedah persembahan yang penting. Anda tahu, apabila kami memasukkan video ke dalam PPT, sama ada melalui hiperpautan atau kawalan WindowsMediaPlayer, kami perlu mempertimbangkan isu laluan. Jadi, jika kita ingin membenamkan video PPT dan menggabungkannya ke dalam fail, bagaimanakah kita harus menyelesaikannya? Seterusnya, mari kita lihat penyelesaiannya! Langkah-langkahnya adalah seperti berikut: 1. Pertama, kita klik dua kali untuk membuka persembahan [Video Embed.pptx] Microsoft PowerPoint. Kerana ShockwaveFlashO digunakan

See all articles