From e5fdc50a8fefe37f8fe87e65853136bdb8711c00 Mon Sep 17 00:00:00 2001 From: "wanglei.w" Date: Tue, 10 Nov 2020 16:51:14 +0800 Subject: [PATCH] add view.go and docs --- README | 5 --- README.md | 41 +++++++++++++++++++ docs/flowchart.png | Bin 0 -> 37413 bytes docs/flowchart2.png | Bin 0 -> 66711 bytes ffmpeg_test.go | 11 +++++ view.go | 97 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 149 insertions(+), 5 deletions(-) delete mode 100644 README create mode 100644 README.md create mode 100644 docs/flowchart.png create mode 100644 docs/flowchart2.png create mode 100644 view.go diff --git a/README b/README deleted file mode 100644 index 904a2e8..0000000 --- a/README +++ /dev/null @@ -1,5 +0,0 @@ -# ffmpeg-go - -ffmpeg-go is golang port of https://github.com/kkroening/ffmpeg-python - -check ffmpeg_test.go for examples. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e82129a --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# ffmpeg-go + +ffmpeg-go is golang port of https://github.com/kkroening/ffmpeg-python + +check ffmpeg_test.go for examples. + + +# example + +```go +split := Input(TestInputFile1).VFlip().Split() + split0, split1 := split.Get("0"), split.Get("1") + overlayFile := Input(TestOverlayFile).Crop(10, 10, 158, 112) +err := Concat([]*Stream{ + split0.Trim(KwArgs{"start_frame": 10, "end_frame": 20}), + split1.Trim(KwArgs{"start_frame": 30, "end_frame": 40})}). + Overlay(overlayFile.HFlip(), ""). + DrawBox(50, 50, 120, 120, "red", 5). + Output(TestOutputFile1). + OverWriteOutput(). + Run() +``` + +# view + +function view generate [mermaid](https://mermaid-js.github.io/mermaid/#/) chart, which can be use in markdown or view [online](mermaid-js.github.io/mermaid-live-editor/) + +```go +split := Input(TestInputFile1).VFlip().Split() + split0, split1 := split.Get("0"), split.Get("1") + overlayFile := Input(TestOverlayFile).Crop(10, 10, 158, 112) +b, err := Concat([]*Stream{ + split0.Trim(KwArgs{"start_frame": 10, "end_frame": 20}), + split1.Trim(KwArgs{"start_frame": 30, "end_frame": 40})}). + Overlay(overlayFile.HFlip(), ""). + DrawBox(50, 50, 120, 120, "red", 5). + Output(TestOutputFile1). + OverWriteOutput().View(ViewTypeFlowChart) +fmt.Println(b) +``` +![image](./docs/flowchart2.png) \ No newline at end of file diff --git a/docs/flowchart.png b/docs/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..f212b14d7acf4d6c0ee5f5778da3960609008a17 GIT binary patch literal 37413 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 literal 0 HcmV?d00001 diff --git a/docs/flowchart2.png b/docs/flowchart2.png new file mode 100644 index 0000000000000000000000000000000000000000..497d7cec4f0dc5acd1f14ce3939d661a984ed9de GIT binary patch literal 66711 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 literal 0 HcmV?d00001 diff --git a/ffmpeg_test.go b/ffmpeg_test.go index 2634350..8de1791 100644 --- a/ffmpeg_test.go +++ b/ffmpeg_test.go @@ -278,3 +278,14 @@ func TestPipe(t *testing.T) { assert.Nil(t, err) assert.Equal(t, outBuf.Len(), frameSize*(frameCount-startFrame)) } + +func TestView(t *testing.T) { + a, err := ComplexFilterExample().View(ViewTypeFlowChart) + assert.Nil(t, err) + + b, err := ComplexFilterAsplitExample().View(ViewTypeStateDiagram) + assert.Nil(t, err) + + t.Log(a) + t.Log(b) +} diff --git a/view.go b/view.go new file mode 100644 index 0000000..0d9fbbe --- /dev/null +++ b/view.go @@ -0,0 +1,97 @@ +package ffmpeg_go + +import ( + "bytes" + "fmt" +) + +type ViewType string + +const ( + // FlowChart the diagram type for output in flowchart style (https://mermaid-js.github.io/mermaid/#/flowchart) (including current state + ViewTypeFlowChart ViewType = "flowChart" + // StateDiagram the diagram type for output in stateDiagram style (https://mermaid-js.github.io/mermaid/#/stateDiagram) + ViewTypeStateDiagram ViewType = "stateDiagram" +) + +func (s *Stream) View(viewType ViewType) (string, error) { + switch viewType { + case ViewTypeFlowChart: + return visualizeForMermaidAsFlowChart(s) + case ViewTypeStateDiagram: + return visualizeForMermaidAsStateDiagram(s) + default: + return "", fmt.Errorf("unknown ViewType: %s", viewType) + } +} + +func visualizeForMermaidAsStateDiagram(s *Stream) (string, error) { + var buf bytes.Buffer + + nodes := getStreamSpecNodes([]*Stream{s}) + var dagNodes []DagNode + for i := range nodes { + dagNodes = append(dagNodes, nodes[i]) + } + sorted, outGoingMap, err := TopSort(dagNodes) + if err != nil { + return "", err + } + + buf.WriteString("stateDiagram\n") + + for _, node := range sorted { + next := outGoingMap[node.Hash()] + for k, v := range next { + for _, nextNode := range v { + label := string(k) + if label == "" { + label = "<>" + } + buf.WriteString(fmt.Sprintf(` %s --> %s: %s`, node.ShortRepr(), nextNode.Node.ShortRepr(), label)) + buf.WriteString("\n") + } + } + } + return buf.String(), nil +} + +// visualizeForMermaidAsFlowChart outputs a visualization of a FSM in Mermaid format (including highlighting of current state). +func visualizeForMermaidAsFlowChart(s *Stream) (string, error) { + var buf bytes.Buffer + + nodes := getStreamSpecNodes([]*Stream{s}) + var dagNodes []DagNode + for i := range nodes { + dagNodes = append(dagNodes, nodes[i]) + } + sorted, outGoingMap, err := TopSort(dagNodes) + if err != nil { + return "", err + } + buf.WriteString("graph LR\n") + + for _, node := range sorted { + buf.WriteString(fmt.Sprintf(` %d[%s]`, node.Hash(), node.ShortRepr())) + buf.WriteString("\n") + } + buf.WriteString("\n") + + for _, node := range sorted { + next := outGoingMap[node.Hash()] + for k, v := range next { + for _, nextNode := range v { + label := string(k) + if label == "" { + label = "<>" + } + buf.WriteString(fmt.Sprintf(` %d --> |%s| %d`, node.Hash(), label, nextNode.Node.Hash())) + buf.WriteString("\n") + } + } + } + + buf.WriteString("\n") + + return buf.String(), nil +}