Compare commits

..

3 Commits

Author SHA1 Message Date
f01fd0ca84 check if output is paused before attempting record split/chapter.
add note to changelog about supported file format for record chapter.
2025-06-23 08:28:49 +01:00
10d50df445 add 0.13.0 to CHANGELOG 2025-06-23 08:03:52 +01:00
06cefe58ed add record split and record chapter commands 2025-06-23 08:02:31 +01:00
3 changed files with 97 additions and 7 deletions

View File

@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
# [0.13.0] - 2025-06-23
### Added
- record split and record chapter commands, see [RecordCmd](https://github.com/onyx-and-iris/gobs-cli?tab=readme-ov-file#recordcmd)
- As of OBS 30.2.0, the only file format supporting *record chapter* is Hybrid MP4.
# [0.12.1] - 2025-06-21
### Added

View File

@ -313,6 +313,21 @@ gobs-cli record directory "/home/me/obs-vids/"
gobs-cli record directory "C:/Users/me/Videos"
```
- split: Split recording.
```console
gobs-cli record split
```
- chapter: Create a chapter in the recording.
*optional*
- arg: ChapterName
```console
gobs-cli record chapter "Chapter Name"
```
### StreamCmd
- start: Start streaming.

View File

@ -4,17 +4,20 @@ import (
"fmt"
"github.com/andreykaipov/goobs/api/requests/config"
"github.com/andreykaipov/goobs/api/requests/record"
)
// RecordCmd handles the recording commands.
type RecordCmd struct {
Start RecordStartCmd `cmd:"" help:"Start recording." aliases:"s"`
Stop RecordStopCmd `cmd:"" help:"Stop recording." aliases:"st"`
Toggle RecordToggleCmd `cmd:"" help:"Toggle recording." aliases:"tg"`
Status RecordStatusCmd `cmd:"" help:"Show recording status." aliases:"ss"`
Pause RecordPauseCmd `cmd:"" help:"Pause recording." aliases:"p"`
Resume RecordResumeCmd `cmd:"" help:"Resume recording." aliases:"r"`
Directory RecordDirectoryCmd `cmd:"" help:"Get/Set recording directory." aliases:"d"`
Start RecordStartCmd `cmd:"" help:"Start recording." aliases:"s"`
Stop RecordStopCmd `cmd:"" help:"Stop recording." aliases:"st"`
Toggle RecordToggleCmd `cmd:"" help:"Toggle recording." aliases:"tg"`
Status RecordStatusCmd `cmd:"" help:"Show recording status." aliases:"ss"`
Pause RecordPauseCmd `cmd:"" help:"Pause recording." aliases:"p"`
Resume RecordResumeCmd `cmd:"" help:"Resume recording." aliases:"r"`
Directory RecordDirectoryCmd `cmd:"" help:"Get/Set recording directory." aliases:"d"`
Split RecordSplitCmd `cmd:"" help:"Split recording." aliases:"sp"`
Chapter RecordChapterCmd `cmd:"" help:"Create a chapter in the recording." aliases:"c"`
}
// RecordStartCmd starts the recording.
@ -187,3 +190,68 @@ func (cmd *RecordDirectoryCmd) Run(ctx *context) error {
fmt.Fprintf(ctx.Out, "Recording directory set to: %s\n", ctx.Style.Highlight(cmd.RecordDirectory))
return nil
}
// RecordSplitCmd splits the current recording.
type RecordSplitCmd struct{} // size = 0x0
// Run executes the command to split the recording.
func (cmd *RecordSplitCmd) Run(ctx *context) error {
status, err := ctx.Client.Record.GetRecordStatus()
if err != nil {
return err
}
if !status.OutputActive {
return fmt.Errorf("recording is not in progress")
}
if status.OutputPaused {
return fmt.Errorf("recording is paused, cannot split")
}
_, err = ctx.Client.Record.SplitRecordFile()
if err != nil {
return err
}
fmt.Fprintln(ctx.Out, "Recording split successfully.")
return nil
}
// RecordChapterCmd creates a chapter in the recording.
type RecordChapterCmd struct {
ChapterName string `arg:"" help:"Name of the chapter to create." default:""`
}
// Run executes the command to create a chapter in the recording.
func (cmd *RecordChapterCmd) Run(ctx *context) error {
status, err := ctx.Client.Record.GetRecordStatus()
if err != nil {
return err
}
if !status.OutputActive {
return fmt.Errorf("recording is not in progress")
}
if status.OutputPaused {
return fmt.Errorf("recording is paused, cannot create chapter")
}
var params *record.CreateRecordChapterParams
if cmd.ChapterName == "" {
params = record.NewCreateRecordChapterParams()
} else {
params = record.NewCreateRecordChapterParams().WithChapterName(cmd.ChapterName)
}
_, err = ctx.Client.Record.CreateRecordChapter(params)
if err != nil {
return err
}
if cmd.ChapterName == "" {
cmd.ChapterName = "unnamed"
}
fmt.Fprintf(ctx.Out, "Chapter %s created successfully.\n", ctx.Style.Highlight(cmd.ChapterName))
return nil
}