diff --git a/cmd/ffmpeg-cli/main.go b/cmd/ffmpeg-cli/main.go
new file mode 100644
index 0000000..4d3e90f
--- /dev/null
+++ b/cmd/ffmpeg-cli/main.go
@@ -0,0 +1,83 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "log"
+ "os"
+
+ "git.kingecg.top/kingecg/goffmpeg/pkg/ffmpeg"
+)
+
+func main() {
+ inputURL := flag.String("i", "", "Input file or URL")
+ outputURL := flag.String("o", "", "Output file or URL")
+ codecName := flag.String("c", "", "Codec name (e.g., libx264, aac)")
+ flag.Parse()
+
+ if *inputURL == "" || *outputURL == "" {
+ flag.Usage()
+ os.Exit(1)
+ }
+
+ // Open input
+ ic := ffmpeg.AllocFormatContext()
+ defer ic.Free()
+
+ if err := ic.OpenInput(*inputURL); err != nil {
+ log.Fatalf("Failed to open input: %v", err)
+ }
+ defer ic.Close()
+
+ if err := ic.FindStreamInfo(); err != nil {
+ log.Fatalf("Failed to find stream info: %v", err)
+ }
+
+ ic.DumpFormat(0, *inputURL, false)
+
+ // Find video stream
+ videoStreams := ic.VideoStreams()
+ if len(videoStreams) == 0 {
+ log.Fatal("No video stream found")
+ }
+
+ // Open output context
+ var ofc *ffmpeg.OutputFormatContext
+ if *codecName != "" {
+ codec, err := ffmpeg.FindEncoder(*codecName)
+ if err != nil {
+ log.Fatalf("Failed to find encoder: %v", err)
+ }
+
+ of := ffmpeg.GuessFormat("", *outputURL)
+ if of == nil {
+ log.Fatalf("Failed to guess format")
+ }
+
+ ofc, err = ffmpeg.AllocOutputContext(*outputURL, of)
+ if err != nil {
+ log.Fatalf("Failed to allocate output context: %v", err)
+ }
+
+ stream, err := ofc.AddStream(codec)
+ if err != nil {
+ log.Fatalf("Failed to add stream: %v", err)
+ }
+
+ vs := videoStreams[0]
+ cp := vs.CodecParameters()
+ stream.SetCodecParameters(cp)
+ } else {
+ var err error
+ ofc, err = ffmpeg.AllocOutputContext(*outputURL, nil)
+ if err != nil {
+ log.Fatalf("Failed to allocate output context: %v", err)
+ }
+ }
+
+ defer ofc.Free()
+
+ fmt.Println("Transcoding started...")
+ fmt.Printf("Input: %s\n", *inputURL)
+ fmt.Printf("Output: %s\n", *outputURL)
+}
diff --git a/examples/simple-transcode/main.go b/examples/simple-transcode/main.go
new file mode 100644
index 0000000..65ad3fe
--- /dev/null
+++ b/examples/simple-transcode/main.go
@@ -0,0 +1,75 @@
+package main
+
+import (
+ "fmt"
+ "log"
+ "os"
+
+ "git.kingecg.top/kingecg/goffmpeg/pkg/ffmpeg"
+)
+
+// Simple transcoding example using goffmpeg library
+func main() {
+ if len(os.Args) < 3 {
+ fmt.Println("Usage: simple-transcode