ffmpeg-go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
func AssertType(hasType, expectType string, action string)
func ConvertKwargsToCmdLineArgs(kwargs KwArgs) []string
func DebugNodes(node []DagNode)
func DebugOutGoingMap(node []DagNode, m map[int]map[Label][]NodeInfo)
func Probe(fileName string, kwargs ...KwArgs) (string, error)
func ProbeWithTimeout(fileName string, timeOut time.Duration, kwargs KwArgs) (string, error)
func ProbeWithTimeoutExec(fileName string, timeOut time.Duration, kwargs KwArgs) (string, error)
type Args
func (a Args) EscapeWith(chars string) Args
func (a Args) Sorted() Args
type DagEdge
func GetInComingEdges(downStreamNode DagNode, inComingEdgeMap map[Label]NodeInfo) []DagEdge
func GetOutGoingEdges(upStreamNode DagNode, outOutingEdgeMap map[Label][]NodeInfo) []DagEdge
type DagNode
func TopSort(downStreamNodes []DagNode) (sortedNodes []DagNode, outOutingEdgeMaps map[int]map[Label][]NodeInfo, ...)
type Graph
type GraphNode
type GraphOptions
type KwArgs
func MergeKwArgs(args []KwArgs) KwArgs
func (a KwArgs) Copy() KwArgs
func (a KwArgs) EscapeWith(chars string) KwArgs
func (a KwArgs) GetDefault(k string, defaultV interface{}) interface{}
func (a KwArgs) GetString(k string) string
func (a KwArgs) HasKey(k string) bool
func (a KwArgs) PopDefault(k string, defaultV interface{}) interface{}
func (a KwArgs) PopString(k string) string
func (a KwArgs) SortedKeys() []string
type Label
type Node
func FilterMultiOutput(streamSpec []*Stream, filterName string, args Args, kwArgs ...KwArgs) *Node
func NewFilterNode(name string, streamSpec []*Stream, maxInput int, args []string, kwargs KwArgs) *Node
func NewGlobalNode(name string, streamSpec []*Stream, args []string, kwargs KwArgs) *Node
func NewInputNode(name string, args []string, kwargs KwArgs) *Node
func NewMergeOutputsNode(name string, streamSpec []*Stream) *Node
func NewNode(streamSpec []*Stream, name string, incomingStreamTypes sets.String, ...) *Node
func NewOutputNode(name string, streamSpec []*Stream, args []string, kwargs KwArgs) *Node
func (n *Node) Equal(other DagNode) bool
func (n *Node) Get(a string) *Stream
func (n *Node) GetFilter(outgoingEdges []DagEdge) string
func (n *Node) GetInComingEdges() []DagEdge
func (n *Node) Hash() int
func (n *Node) IncomingEdgeMap() map[Label]NodeInfo
func (n *Node) ShortRepr() string
func (n *Node) Stream(label Label, selector Selector) *Stream
func (n *Node) String() string
type NodeInfo
type RunHook
type Selector
type Stream
func Concat(streams []*Stream, kwargs ...KwArgs) *Stream
func Filter(streamSpec []*Stream, filterName string, args Args, kwArgs ...KwArgs) *Stream
func Input(filename string, kwargs ...KwArgs) *Stream
func MergeOutputs(streams ...*Stream) *Stream
func NewStream(node *Node, streamType string, label Label, selector Selector) *Stream
func Output(streams []*Stream, fileName string, kwargs ...KwArgs) *Stream
func (s *Stream) ASplit() *Node
func (s *Stream) Audio() *Stream
func (s *Stream) ColorChannelMixer(kwargs ...KwArgs) *Stream
func (s *Stream) Compile() *exec.Cmd
func (s *Stream) Concat(streams []*Stream, kwargs ...KwArgs) *Stream
func (s *Stream) Crop(x, y, w, h int, kwargs ...KwArgs) *Stream
func (s *Stream) DrawBox(x, y, w, h int, color string, thickness int, kwargs ...KwArgs) *Stream
func (s *Stream) Drawtext(text string, x, y int, escape bool, kwargs ...KwArgs) *Stream
func (s *Stream) Equal(other Stream) bool
func (s *Stream) ErrorToStdOut() *Stream
func (s *Stream) Filter(filterName string, args Args, kwArgs ...KwArgs) *Stream
func (s *Stream) Get(index string) *Stream
func (s *Stream) GetArgs() []string
func (s *Stream) GlobalArgs(args ...string) *Stream
func (s *Stream) HFlip(kwargs ...KwArgs) *Stream
func (s *Stream) Hash() int
func (s *Stream) Hue(kwargs ...KwArgs) *Stream
func (s *Stream) Output(fileName string, kwargs ...KwArgs) *Stream
func (s *Stream) OverWriteOutput() *Stream
func (s *Stream) Overlay(overlayParentNode *Stream, eofAction string, kwargs ...KwArgs) *Stream
func (s *Stream) OverwriteOutput(stream *Stream) *Stream
func (s *Stream) Run() error
func (s *Stream) RunLinux() error
func (s *Stream) RunWithResource(cpuRequest, cpuLimit float32) error
func (s *Stream) SetPts(expr string) *Node
func (s *Stream) Split() *Node
func (s *Stream) String() string
func (s *Stream) Trim(kwargs ...KwArgs) *Stream
func (s *Stream) VFlip(kwargs ...KwArgs) *Stream
func (s *Stream) Video() *Stream
func (s *Stream) View(viewType ViewType) (string, error)
func (s *Stream) WithCpuCoreLimit(n float32) *Stream
func (s *Stream) WithCpuCoreRequest(n float32) *Stream
func (s *Stream) WithCpuSet(n string) *Stream
func (s *Stream) WithErrorOutput(out io.Writer) *Stream
func (s *Stream) WithInput(reader io.Reader) *Stream
func (s *Stream) WithMemSet(n string) *Stream
func (s *Stream) WithOutput(out ...io.Writer) *Stream
func (s *Stream) WithTimeout(timeOut time.Duration) *Stream
func (s *Stream) ZoomPan(kwargs ...KwArgs) *Stream
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type DagNode interface {
Hash() int
// Compare two nodes
Equal(other DagNode) bool
// Return a full string representation of the node.
String() string
// Return a partial/concise representation of the node
ShortRepr() string
// Provides information about all incoming edges that connect to this node.
//
// The edge map is a dictionary that maps an “incoming_label“ to “(outgoing_node, outgoing_label)“. Note that
// implicity, “incoming_node“ is “self“. See "Edges" section above.
IncomingEdgeMap() map[Label]NodeInfo
}

Node in a directed-acyclic graph (DAG).

Edges: DagNodes are connected by edges. An edge connects two nodes with a label for each side: - “upstream_node“: upstream/parent node - “upstream_label“: label on the outgoing side of the upstream node - “downstream_node“: downstream/child node - “downstream_label“: label on the incoming side of the downstream node

For example, DagNode A may be connected to DagNode B with an edge labelled “foo” on A’s side, and “bar” on B’s side:

_____ _____ | | | | | A >[foo]—[bar]> B | || ||

Edge labels may be integers or strings, and nodes cannot have more than one incoming edge with the same label.

DagNodes may have any number of incoming edges and any number of outgoing edges. DagNodes keep track only of their incoming edges, but the entire graph structure can be inferred by looking at the furthest downstream nodes and working backwards.

Hashing: DagNodes must be hashable, and two nodes are considered to be equivalent if they have the same hash value.

Nodes are immutable, and the hash should remain constant as a result. If a node with new contents is required, create a new node and throw the old one away.

String representation: In order for graph visualization tools to show useful information, nodes must be representable as strings. The “String“ operator should provide a more or less “full” representation of the node, and the “ShortRepr“ property should be a shortened, concise representation.

Again, because nodes are immutable, the string representations should remain constant.

1
2
3
4
5
6
7
8
9
10
11
12
// 节点
type Node struct {
streamSpec []*Stream
name string // input、global_args、overwrite_output、merge_output、output
incomingStreamTypes sets.String
outgoingStreamType string
minInputs int
maxInputs int
args []string
kwargs KwArgs
nodeType string
}
1
2
3
4
5
6
7
8
// 流
type Stream struct {
Node *Node //
Label Label //
Selector Selector //
Type string //
Context context.Context //
}