package toolkit import ( "context" "gopkg.in/vansante/go-ffprobe.v2" "time" ) func GetMediaDurationByUrl(url string) float64 { ctx, cancelFn := context.WithTimeout(context.Background(), 20*time.Second) defer cancelFn() data, err := ffprobe.ProbeURL(ctx, url) if err != nil { tk.Error.Println("ErrorX GetMediaDurationByUrl: %v", err.Error()) return 0 } if data == nil { return 0 } return data.Format.Duration().Seconds() }
先贴脚本,给想直接拷贝的同学。
目前来看我找了很多 golang 的库以及系统的库,Youtube-DL 有参数可以获取时间但是似乎必须得下载到本地。于是找了一下底层依赖的 ffmpeg 有一个 toolkit ffprobe可以做到这个事情。
如果是直接使用 cmd 的话可以参考使用这个命令
ffprobe -i `url` -show_entries format=duration -v quiet -of csv="p=0"
可以直接获取到视频的时间。