MovieGo is a Golang library for video editing. The library is designed for fast processing of routine tasks related to video editing. The main core of the project is the ffmpeg-go package, which simplifies working with the ffmpeg library.
go get github.com/mowshon/moviegoCurrently there are three methods in the package that help you resize the video:
ResizeByWidth( new width )ResizeByHeight( new height )Resize( new width, new height )
package main
import (
"github.com/mowshon/moviego"
)
func main() {
first, _ := moviego.Load("forest.mp4")
first.ResizeByWidth(500).Output("resized-by-width.mp4").Run()
first.ResizeByWidth(150).Output("resized-by-height.mp4").Run()
first.Resize(1000, 500).Output("resized.mp4").Run()
}These commands in ffmpeg:
ffmpeg -i forest.mp4 -vf scale=500:210 resized-by-width.mp4 -y
ffmpeg -i forest.mp4 -vf scale=150:62 resized-by-height.mp4 -y
ffmpeg -i forest.mp4 -vf scale=1000:500 resized.mp4 -yThe Video structure has a SubClip method which can trim the video by specifying the beginning and end of the video segment.
package main
import (
"github.com/mowshon/moviego"
"log"
)
func main() {
first, _ := moviego.Load("forest.mp4")
// Cut video from second 3 to second 5.
err := first.SubClip(3, 5).Output("final.mp4").Run()
if err != nil {
log.Fatal(err)
}
}Having several videos you can combine them into one. You can apply different effects to video clips from a slice at the same time.
func main() {
first, _ := moviego.Load("forest.mp4")
second, _ := moviego.Load("sky.mp4")
// Combine multiple videos into one.
finalVideo, err := moviego.Concat([]moviego.Video{
first,
second,
first.SubClip(1, 3),
second.SubClip(5.3, 10.5),
first.FadeIn(0, 5).FadeOut(5),
})
if err != nil {
log.Fatal(err)
}
renderErr := finalVideo.Output("final.mp4").Run()
if err != nil {
log.Fatal(renderErr)
}
}Here we have 4 methods for working with Fade effects. Two for video and two for audio tracks from the video.
.FadeIn(start, duration)- The video fade-in from the beginning (the screen is black) to the specified time interval..FadeOut(seconds before the end)- Fading video into a completely black screen. You need to specify in seconds from the end of the video when to start fading..AudioFadeIn(start, duration)- If you want the audio track to be completely muted at the beginning, you can specify the beginning at 0.5 seconds..AudioFadeOut(seconds before the end)- The audio track will fade out at the end depending on the specified interval in seconds to the end of the video.
func main() {
first, _ := moviego.Load("forest.mp4")
// Add fade-in and fade-out
first.FadeIn(0, 3).FadeOut(5).Output("fade-in-with-fade-out.mp4").Run()
// Cut video and add Fade-in
first.SubClip(5.20, 10).FadeIn(0, 3).Output("cut-fade-in.mp4").Run()
// Mute the sound for the first 0.5 seconds and then
// turn the sound on with the fade in.
first.AudioFadeIn(0.5, 4).Output("audio-fade-in.mp4").Run()
// Add video fade-out with audio fade-out.
first.FadeOut(5).AudioFadeOut(5).Output("fade-out.mp4").Run()
}You can make a screenshot by specifying the desired time from the video in seconds.
func main() {
first, _ := moviego.Load("forest.mp4")
// A simple screenshot from the video.
first.Screenshot(5, "simple-screen.png")
// Take a screenshot after applying the effects.
first.FadeIn(0, 3).FadeOut(5).Screenshot(0.4, "screen.png")
}