parent
3669d38491
commit
a46b8388c7
|
|
@ -29,7 +29,7 @@
|
||||||
* 显示下载速度、合并ts的速度
|
* 显示下载速度、合并ts的速度
|
||||||
* 提供macos的图形化界面
|
* 提供macos的图形化界面
|
||||||
* 支持设置代理: http/socks5
|
* 支持设置代理: http/socks5
|
||||||
* http代理解释: 要访问的真实url是http协议, 使用代理服务器可见的GET形式; 如果要访问的真实url是https协议, 使用代理服务器不可见的CONNECT形式
|
* http代理解释: 要访问的真实url是http协议, 使用代理服务器可见的GET形式; 如果要访问的真实url是https协议, 使用代理服务器不可见的CONNECT形式
|
||||||
## TODO:
|
## TODO:
|
||||||
* [ ] 支持多国语言
|
* [ ] 支持多国语言
|
||||||
* [ ] 支持从一个txt里读取下载列表,批量下载
|
* [ ] 支持从一个txt里读取下载列表,批量下载
|
||||||
|
|
|
||||||
58
cmd/main.go
58
cmd/main.go
|
|
@ -1,9 +1,16 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"m3u8d"
|
"m3u8d"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
|
|
@ -50,6 +57,54 @@ var curlCmd = &cobra.Command{
|
||||||
|
|
||||||
var gRunReq m3u8d.RunDownload_Req
|
var gRunReq m3u8d.RunDownload_Req
|
||||||
|
|
||||||
|
var gMergeReq struct {
|
||||||
|
InputTsDir string
|
||||||
|
OutputMp4Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
var mergeCmd = &cobra.Command{
|
||||||
|
Use: "merge",
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
if gMergeReq.InputTsDir == "" {
|
||||||
|
var err error
|
||||||
|
gMergeReq.InputTsDir, err = os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("获取当前目录失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fList, err := ioutil.ReadDir(gMergeReq.InputTsDir)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("读取目录失败", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var tsFileList []string
|
||||||
|
for _, f := range fList {
|
||||||
|
if f.Mode().IsRegular() && strings.HasSuffix(strings.ToLower(f.Name()), ".ts") {
|
||||||
|
tsFileList = append(tsFileList, filepath.Join(gMergeReq.InputTsDir, f.Name()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(tsFileList) == 0 {
|
||||||
|
log.Fatalln("目录下不存在ts文件", gMergeReq.InputTsDir)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sort.Strings(tsFileList) // 按照字典顺序排序
|
||||||
|
if gMergeReq.OutputMp4Name == "" {
|
||||||
|
gMergeReq.OutputMp4Name = filepath.Join(gMergeReq.InputTsDir, "all.mp4")
|
||||||
|
}
|
||||||
|
err = m3u8d.MergeTsFileListToSingleMp4(m3u8d.MergeTsFileListToSingleMp4_Req{
|
||||||
|
TsFileList: tsFileList,
|
||||||
|
OutputMp4: gMergeReq.OutputMp4Name,
|
||||||
|
Ctx: context.Background(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln("合并失败", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Println("合并成功", gMergeReq.OutputMp4Name)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
downloadCmd.Flags().StringVarP(&gRunReq.M3u8Url, "M3u8Url", "u", "", "M3u8Url")
|
downloadCmd.Flags().StringVarP(&gRunReq.M3u8Url, "M3u8Url", "u", "", "M3u8Url")
|
||||||
downloadCmd.Flags().BoolVarP(&gRunReq.Insecure, "Insecure", "", false, "是否允许不安全的请求")
|
downloadCmd.Flags().BoolVarP(&gRunReq.Insecure, "Insecure", "", false, "是否允许不安全的请求")
|
||||||
|
|
@ -61,6 +116,9 @@ func init() {
|
||||||
rootCmd.AddCommand(downloadCmd)
|
rootCmd.AddCommand(downloadCmd)
|
||||||
curlCmd.DisableFlagParsing = true
|
curlCmd.DisableFlagParsing = true
|
||||||
rootCmd.AddCommand(curlCmd)
|
rootCmd.AddCommand(curlCmd)
|
||||||
|
mergeCmd.Flags().StringVarP(&gMergeReq.InputTsDir, "InputTsDir", "", "", "存放ts文件的目录(默认为当前工作目录)")
|
||||||
|
mergeCmd.Flags().StringVarP(&gMergeReq.OutputMp4Name, "OutputMp4Name", "", "", "输出mp4文件名(默认为输入ts文件的目录下的all.mp4)")
|
||||||
|
rootCmd.AddCommand(mergeCmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue