Dengan perkembangan Internet, perkongsian dan penyebaran video telah menjadi bahagian penting dalam kehidupan seharian orang ramai. Walau bagaimanapun, dalam banyak kes, kami sering menghadapi masalah tera air apabila menonton video. Untuk meningkatkan pengalaman tontonan kami, artikel ini akan memperkenalkan cara menggunakan Golang untuk mengalih keluar tera air dan menonton video tanpa tera air.
1. Konsep tera air
Tanda air merujuk kepada sejenis imej, teks dan maklumat lain yang dibenamkan dalam media digital (seperti video, gambar, dokumen, dll.) untuk melindungi hak ciptanya dan Mencegah cetak rompak. Tera air biasa termasuk tera air lutsinar, tera air teks, tera air gambar, dsb. Apabila menonton video, tera air akan menjejaskan kesan tontonan dan juga rupa dan rasa kandungan video.
2. Apa itu Golang?
Golang ialah bahasa pengaturcaraan popular yang dibangunkan oleh Google pada 2009 dan dikeluarkan secara rasmi pada 2012. Golang dicirikan oleh sintaks ringkas, konkurensi yang kuat, kecekapan tinggi, dan keselamatan yang baik Oleh itu, ia telah digunakan secara meluas dalam pembangunan bahagian belakang, sistem teragih, pengaturcaraan rangkaian dan bidang lain.
3. Prinsip mengalih keluar tera air video
Sekarang kita tahu apa itu tera air, mari kita lihat prinsip mengalih keluar tera air. Secara amnya, lokasi dan kandungan tera air adalah tetap, jadi kami boleh memadam atau menukar piksel tera air melalui perisian penyuntingan video atau algoritma pemprosesan imej. Walaupun kaedah ini lebih berkesan, ia juga mempunyai beberapa kelemahan, seperti keperluan untuk pemprosesan manual atau kecekapan operasi yang rendah.
Dalam artikel ini, kami akan memperkenalkan cara menggunakan Golang untuk menulis program untuk membuang tera air video. Prinsip pelaksanaan khusus adalah untuk memproses bingkai video, menggunakan algoritma pemprosesan imej untuk mencari lokasi dan saiz tera air, dan melaksanakan operasi seperti penggantian piksel, untuk mencapai tujuan mengalih keluar tera air.
4. Langkah-langkah pelaksanaan
Seterusnya, kami akan memperkenalkan langkah-langkah pelaksanaan cara menggunakan Golang untuk membuang tera air video.
Sebelum mula menulis program, kami perlu memasang pustaka pemprosesan imej dan pustaka pemprosesan video Golang, yang termasuk penyahkodan video dan sokongan pemprosesan bingkai . Arahan pemasangan adalah seperti berikut:
go get -u github.com/disintegration/gift
go get -u github.com/3d0c/gmf
Kita perlu membaca fail video melalui pustaka GMF dan menyahkod setiap bingkai video menjadi imej untuk pemprosesan selanjutnya. Kod sampel adalah seperti berikut:
inputContext, _ := gmf.NewInputCtx(inputFile)
tunda inputContext.Free()
videoStream, _ := inputContext.GetBestStream (gmf. AVMEDIA_TYPE_VIDEO)
videoCodec, _ := gmf.FindEncoder(gmf.AV_CODEC_ID_RAWVIDEO)
videoFrame := gmf.NewFrame()
:NewFrame():NewFrame()
S ()videoSwCtx.SetSize(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())videoSwCtx.SetPixelMTFormat(gmf.AV_PIX2>watermarkMask := gift.NewPolarMask(watermark.Bounds(), watermark.Bounds().Center(), 0.5)maskSize := gift.Resize(watermark.Bounds().Dx() /2, tera air.Bounds().Dy()/2, gift.LanczosResampling)watermark = maskSize.Resample(watermark, nol)watermark = hadiah.Mask(watermark, watermarkMask )penapis.DrawAt(videoFrame, watermarkedFrame, image.Point{0, 0}, gift.OverOperator)}
jika ralat := outputStream.CodecCtx().SetPixFmt(gmf.AV_PIX_FMT_YUV420P); err != tiada {
log.Panicln("Tidak boleh menetapkan format piksel codec")
}
jika ralat := outputStream.CodecCtx().SetWidth(videoStream. CodecCtx().Lebar()); err != nil {
log.Panicln("Tidak boleh menetapkan lebar codec")
}
if err := outputStream.CodecCtx().SetHeight(videoStream.CodecCtx ().Ketinggian()); err != nil {
log.Panicln("Tidak boleh menetapkan ketinggian codec")
}
if err := outputStream.CodecCtx().SetTimeBase(avrational.AVR {Bil: 1, Den: 25}); err != tiada {
log.Panicln("Tidak boleh menetapkan asas masa codec")
}
jika ralat := outputStream.CodecCtx().SetProfile(gmf. FF_PROFILE_H264_TINGGI_444_PREDIKTIF); err != nil {
log.Panicln("Tidak boleh menetapkan profil codec:", err)
}
if err := outputStream.CodecCtx().Open( tiada); err != nil {
log.Panicln("Tidak boleh membuka codec:", err)
}
swFrameCtx := gmf.NewSwCtx()
swFrameCtx.SetSize(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())
swFrameCtx.SetPixelFormat(gmf.AV_PIX_FMT_YUV420P) videoStream .CodecCtx().Width(), videoStream.CodecCtx().Height())
swFrameCtx.SetDstDims(videoStream.CodecCtx().Width(), videoStream.CodecCtx().Height())
swFrameCtx.Init()
untuk saya := 0; i < len(Bingkai bertanda air); i++ {
swFrameCtx.Scale(watermarkedFrames[i], outputStream.CodecCtx(), gmf.SWS_FAST_BILINEAR)
pkt, err := outputStream.CodecCtx().Encode().Encode(i) )
if err != nil {
log.Panicln("Tidak boleh mengekod bingkai:", err)
}
pkt.SetPts(int64 (i))
if err := outputStream.WritePacket(pkt); err != nil {
log.Panicln("Tidak boleh menulis paket:", err)
}
pkt.Free()
}
outputContext.CloseOutputAndNullify()
五、总结
本文介绍了如何用Golang编写程麑提供了实现步骤和示例代码。这种方式相对于传统的手工处理和基于图像处理算法的方式更加高效和准确,并且代码实厰眰码实厰现但是,在实际使用中,我们也需要注意保护被去除水印的视频版权和知识产来,避免侵犯他人权益。
Atas ialah kandungan terperinci golang buang tera air video. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!