| Fix blind-cat-cols and blind-cat-rows cmdline and document blind-disperse, blin… | |
| git clone git://git.suckless.org/blind | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit c295bcecda2cdf04b28c1b4767e05e815b41a04e | |
| parent 4751eda976c09f2409e93364b6b76fdc950bcda6 | |
| Author: Mattias Andrée <[email protected]> | |
| Date: Fri, 2 Jun 2017 22:31:08 +0200 | |
| Fix blind-cat-cols and blind-cat-rows cmdline and document blind-disperse, blin… | |
| Signed-off-by: Mattias Andrée <[email protected]> | |
| Diffstat: | |
| M README | 18 ++++++++++++++++++ | |
| M TODO | 5 ----- | |
| M man/blind-concat.1 | 5 ++++- | |
| M man/blind-cut.1 | 5 ++++- | |
| A man/blind-disperse.1 | 36 +++++++++++++++++++++++++++++… | |
| A man/blind-interleave.1 | 31 +++++++++++++++++++++++++++++… | |
| A man/blind-split-cols.1 | 38 +++++++++++++++++++++++++++++… | |
| A man/blind-split-rows.1 | 37 +++++++++++++++++++++++++++++… | |
| M man/blind-split.1 | 7 +++++-- | |
| M man/blind.7 | 18 ++++++++++++++++++ | |
| M src/blind-cat-cols.c | 23 +++++++++++------------ | |
| M src/blind-cat-rows.c | 23 +++++++++++------------ | |
| 12 files changed, 213 insertions(+), 33 deletions(-) | |
| --- | |
| diff --git a/README b/README | |
| @@ -15,6 +15,12 @@ UTILITIES | |
| blind-arithm(1) | |
| Perform simple arithmetic on a video | |
| + blind-cat-cols(1) | |
| + Place videos side by side | |
| + | |
| + blind-cat-rows(1) | |
| + Stack videos vertically | |
| + | |
| blind-colour-ciexyz(1) | |
| Convert CIE XYZ for use with blind-single-colour(1) | |
| @@ -36,6 +42,9 @@ UTILITIES | |
| blind-dissolve(1) | |
| Fade a video by chaning it's alpha channel | |
| + blind-disperse(1) | |
| + Framewise split a video into multiple videos | |
| + | |
| blind-extend(1) | |
| Add margins to a video | |
| @@ -63,6 +72,9 @@ UTILITIES | |
| blind-gauss-blur(1) | |
| Apply Gaussian blur to a video | |
| + blind-interleave(1) | |
| + Framewise interleave videos | |
| + | |
| blind-invert-luma(1) | |
| Invert the luminosity of a video | |
| @@ -111,6 +123,12 @@ UTILITIES | |
| blind-split(1) | |
| Split a video, by frame, into multiple videos | |
| + blind-split-cols(1) | |
| + Split a video vertically into multiple videos | |
| + | |
| + blind-split-rows(1) | |
| + Split a video horizontally into multiple videos | |
| + | |
| blind-stack(1) | |
| Overlay videos | |
| diff --git a/TODO b/TODO | |
| @@ -1,9 +1,4 @@ | |
| Write manpages for: | |
| - blind-interleave framewise interleave videos | |
| - blind-disperse inverse of blind-interleave | |
| - Useful for processing a video on multi… | |
| - blind-split-rows split stream into multiple streams by splittin… | |
| - blind-split-cols split stream into multiple streams by splittin… | |
| blind-cat-rows merge video by vertically stacking strea… | |
| blind-cat-cols merge video by putting streams beside ea… | |
| diff --git a/man/blind-concat.1 b/man/blind-concat.1 | |
| @@ -40,7 +40,10 @@ processes are rendering. | |
| .SH SEE ALSO | |
| .BR blind (7), | |
| .BR blind-to-video (1), | |
| -.BR blind-split (1) | |
| +.BR blind-split (1), | |
| +.BR blind-interleave (1), | |
| +.BR blind-cat-rows (1), | |
| +.BR blind-cat-cols (1) | |
| .SH AUTHORS | |
| Mattias Andrée | |
| .RI < [email protected] > | |
| diff --git a/man/blind-cut.1 b/man/blind-cut.1 | |
| @@ -29,7 +29,10 @@ is specified instead of | |
| .BR blind (7), | |
| .BR blind-from-video (1), | |
| .BR blind-split (1), | |
| -.BR blind-concat (1) | |
| +.BR blind-concat (1), | |
| +.BR blind-disperse (1), | |
| +.BR blind-split-cols (1), | |
| +.BR blind-split-rows (1) | |
| .SH AUTHORS | |
| Mattias Andrée | |
| .RI < [email protected] > | |
| diff --git a/man/blind-disperse.1 b/man/blind-disperse.1 | |
| @@ -0,0 +1,36 @@ | |
| +.TH BLIND-DISPERSE 1 blind | |
| +.SH NAME | |
| +blind-disperse - Framewise split a video into multiple videos | |
| +.SH SYNOPSIS | |
| +.B blind-disperse | |
| +.RI ( file | |
| +.IR frames )\ ... | |
| +.SH DESCRIPTION | |
| +.B blind-disperse | |
| +reads a video from stdin and splits into multiple videos. | |
| +Starting from the first frame in stdin, it writes a video | |
| +to the first specified | |
| +.I file | |
| +until the first specified number of | |
| +.I frames | |
| +have been written. | |
| +.B blind-disperse | |
| +then proceeds to do to the same for the next pair of | |
| +.I file | |
| +and | |
| +.I frames | |
| +until, and in including, the last pair. This process | |
| +is repeated until the last frame in stdin has been read. | |
| +.SH RATIONALE | |
| +This is useful processing a video on multiple computers. | |
| +.SH SEE ALSO | |
| +.BR blind (7), | |
| +.BR blind-interleave (1), | |
| +.BR blind-cut (1), | |
| +.BR blind-split (1), | |
| +.BR blind-split-cols (1), | |
| +.BR blind-split-rows (1), | |
| +.BR blind-skip-pattern (1) | |
| +.SH AUTHORS | |
| +Mattias Andrée | |
| +.RI < [email protected] > | |
| diff --git a/man/blind-interleave.1 b/man/blind-interleave.1 | |
| @@ -0,0 +1,31 @@ | |
| +.TH BLIND-INTERLEAVE 1 blind | |
| +.SH NAME | |
| +blind-interleave - Framewise interleave videos | |
| +.SH SYNOPSIS | |
| +.B blind-interleave | |
| +.RI ( file | |
| +.IR frames )\ ... | |
| +.SH DESCRIPTION | |
| +.BR blind-interleave , | |
| +for each specified pair of | |
| +.I file | |
| +and | |
| +.IR frames , | |
| +in order, reads | |
| +.I frames | |
| +frames from | |
| +.R file | |
| +and writes the read frames to stdout. | |
| +This process is repeated until the number of specified | |
| +.I frames | |
| +cannot be read from a | |
| +.IR file . | |
| +.SH SEE ALSO | |
| +.BR blind (7), | |
| +.BR blind-disperse (1), | |
| +.BR blind-concat (1), | |
| +.BR blind-cat-cols (1), | |
| +.BR blind-cat-rows (1), | |
| +.SH AUTHORS | |
| +Mattias Andrée | |
| +.RI < [email protected] > | |
| diff --git a/man/blind-split-cols.1 b/man/blind-split-cols.1 | |
| @@ -0,0 +1,38 @@ | |
| +.TH BLIND-SPLIT-COLS 1 blind | |
| +.SH NAME | |
| +blind-split-cols - Split a video horizontally into multiple videos | |
| +.SH SYNOPSIS | |
| +.B blind-split-cols | |
| +.RI ( file | |
| +.IR columns )\ ... | |
| +.SH DESCRIPTION | |
| +.B blind-split-cols | |
| +reads a video from stdin and splits into multiple videos. | |
| +Starting from the first column in stdin, it writes a video | |
| +to the first specified | |
| +.I file | |
| +until the first specified number of | |
| +.I columns | |
| +have been written. | |
| +.B blind-split-cols | |
| +then proceeds to do to the same for the next pair of | |
| +.I file | |
| +and | |
| +.I columns | |
| +until, and in including, the last pair. This process | |
| +is repeated until the last column in stdin has been read. | |
| +(In this context a column is technically defined as a segment of a row.) | |
| +.P | |
| +The sum of all | |
| +.I columns | |
| +must add up exactly to the width of the input video. | |
| +.SH SEE ALSO | |
| +.BR blind (7), | |
| +.BR blind-cat-cols (1), | |
| +.BR blind-cut (1), | |
| +.BR blind-split (1), | |
| +.BR blind-disperse (1), | |
| +.BR blind-split-rows (1) | |
| +.SH AUTHORS | |
| +Mattias Andrée | |
| +.RI < [email protected] > | |
| diff --git a/man/blind-split-rows.1 b/man/blind-split-rows.1 | |
| @@ -0,0 +1,37 @@ | |
| +.TH BLIND-SPLIT-ROWS 1 blind | |
| +.SH NAME | |
| +blind-split-rows - Split a video horizontally into multiple videos | |
| +.SH SYNOPSIS | |
| +.B blind-split-rows | |
| +.RI ( file | |
| +.IR rows )\ ... | |
| +.SH DESCRIPTION | |
| +.B blind-split-rows | |
| +reads a video from stdin and splits into multiple videos. | |
| +Starting from the first row in stdin, it writes a video | |
| +to the first specified | |
| +.I file | |
| +until the first specified number of | |
| +.I rows | |
| +have been written. | |
| +.B blind-split-rows | |
| +then proceeds to do to the same for the next pair of | |
| +.I file | |
| +and | |
| +.I rows | |
| +until, and in including, the last pair. This process | |
| +is repeated until the last row in stdin has been read. | |
| +.P | |
| +The sum of all | |
| +.I rows | |
| +must add up exactly to the height of the input video. | |
| +.SH SEE ALSO | |
| +.BR blind (7), | |
| +.BR blind-cat-rows (1), | |
| +.BR blind-cut (1), | |
| +.BR blind-split (1), | |
| +.BR blind-disperse (1), | |
| +.BR blind-split-cols (1) | |
| +.SH AUTHORS | |
| +Mattias Andrée | |
| +.RI < [email protected] > | |
| diff --git a/man/blind-split.1 b/man/blind-split.1 | |
| @@ -11,14 +11,14 @@ blind-split - Split a video, by frame, into multiple videos | |
| .SH DESCRIPTION | |
| .B blind-split | |
| reads a video from stdin and splits into multiple videos. | |
| -Starting from the first frame in stdin, it write a video | |
| +Starting from the first frame in stdin, it writes a video | |
| to the first specified | |
| .I file | |
| until the first specified | |
| .I end-point | |
| number of frames have been written. | |
| .B blind-split | |
| -the proceeds to write the following frames to the next | |
| +then proceeds to write the following frames to the next | |
| specified | |
| .B file | |
| until a total of | |
| @@ -85,6 +85,9 @@ rewrite its head with | |
| .BR blind-to-video (1), | |
| .BR blind-cut (1), | |
| .BR blind-concat (1), | |
| +.BR blind-disperse (1), | |
| +.BR blind-split-cols (1), | |
| +.BR blind-split-rows (1), | |
| .BR blind-rewrite-head (1) | |
| .SH AUTHORS | |
| Mattias Andrée | |
| diff --git a/man/blind.7 b/man/blind.7 | |
| @@ -22,6 +22,12 @@ first convert it with | |
| .BR blind-arithm (1) | |
| Perform simple arithmetic on a video | |
| .TP | |
| +.BR blind-cat-cols (1) | |
| +Place videos side by side | |
| +.TP | |
| +.BR blind-cat-rows (1) | |
| +Stack videos vertically | |
| +.TP | |
| .BR blind-colour-ciexyz (1) | |
| Convert CIE XYZ for use with blind-single-colour(1) | |
| .TP | |
| @@ -49,6 +55,9 @@ Decompress a video compressed by blind-compress(1) | |
| .BR blind-dissolve (1) | |
| Fade a video by chaning it's alpha channel | |
| .TP | |
| +.BR blind-disperse (1) | |
| +Framewise split a video into multiple videos | |
| +.TP | |
| .BR blind-extend (1) | |
| Add margins to a video | |
| .TP | |
| @@ -76,6 +85,9 @@ Converts a regular, cooked video to a blind video | |
| .BR blind-gauss-blur (1) | |
| Apply Gaussian blur to a video | |
| .TP | |
| +.BR blind-interleave (1) | |
| +Framewise interleave videos | |
| +.TP | |
| .BR blind-invert-luma (1) | |
| Invert the luminosity of a video | |
| .TP | |
| @@ -124,6 +136,12 @@ Skips frames in a video according to pattern | |
| .BR blind-split (1) | |
| Split a video, by frame, into multiple videos | |
| .TP | |
| +.BR blind-split-cols (1) | |
| +Split a video vertically into multiple videos | |
| +.TP | |
| +.BR blind-split-rows (1) | |
| +Split a video horizontally into multiple videos | |
| +.TP | |
| .BR blind-stack (1) | |
| Overlay videos | |
| .TP | |
| diff --git a/src/blind-cat-cols.c b/src/blind-cat-cols.c | |
| @@ -1,26 +1,25 @@ | |
| /* See LICENSE file for copyright and license details. */ | |
| #include "common.h" | |
| -USAGE("(file columns) ...") | |
| +USAGE("file ...") | |
| int | |
| main(int argc, char *argv[]) | |
| { | |
| struct stream *streams; | |
| - size_t parts, width = 0, *cols, i; | |
| + size_t width = 0, *cols; | |
| + int i; | |
| - UNOFLAGS(argc % 2 || !argc); | |
| + UNOFLAGS(!argc); | |
| - parts = (size_t)argc / 2; | |
| - streams = emalloc2(parts, sizeof(*streams)); | |
| - cols = alloca(parts * sizeof(*cols)); | |
| + streams = emalloc2((size_t)argc, sizeof(*streams)); | |
| + cols = alloca((size_t)argc * sizeof(*cols)); | |
| - for (i = 0; i < parts; i++) { | |
| - eopen_stream(streams + i, argv[i * 2]); | |
| - cols[i] = etozu_arg("columns", argv[i * 2 + 1], 1, SIZE_MAX); | |
| + for (i = 0; i < argc; i++) { | |
| + eopen_stream(streams + i, argv[i]); | |
| if (streams[i].width > SIZE_MAX - width) | |
| eprintf("output video is too tall\n"); | |
| - width += streams[i].width; | |
| + width += cols[i] = streams[i].width; | |
| if (i) { | |
| streams[i].width = streams->width; | |
| echeck_compat(streams, streams + i); | |
| @@ -31,10 +30,10 @@ main(int argc, char *argv[]) | |
| fprint_stream_head(stdout, streams); | |
| efflush(stdout, "<stdout>"); | |
| - for (i = 0; i < parts; i++, i = i == parts ? 0 : i) | |
| + for (i = 0; i < argc; i++, i = i == argc ? 0 : i) | |
| if (esend_pixels(streams + i, STDOUT_FILENO, cols[i], "<stdout… | |
| break; | |
| - for (i = 0; i < parts; i++) | |
| + for (i = 0; i < argc; i++) | |
| close(streams[i].fd); | |
| free(streams); | |
| diff --git a/src/blind-cat-rows.c b/src/blind-cat-rows.c | |
| @@ -1,26 +1,25 @@ | |
| /* See LICENSE file for copyright and license details. */ | |
| #include "common.h" | |
| -USAGE("(file rows) ...") | |
| +USAGE("file ...") | |
| int | |
| main(int argc, char *argv[]) | |
| { | |
| struct stream *streams; | |
| - size_t parts, height = 0, *rows, i; | |
| + size_t height = 0, *rows; | |
| + int i; | |
| - UNOFLAGS(argc % 2 || !argc); | |
| + UNOFLAGS(!argc); | |
| - parts = (size_t)argc / 2; | |
| - streams = emalloc2(parts, sizeof(*streams)); | |
| - rows = alloca(parts * sizeof(*rows)); | |
| + streams = emalloc2((size_t)argc, sizeof(*streams)); | |
| + rows = alloca((size_t)argc * sizeof(*rows)); | |
| - for (i = 0; i < parts; i++) { | |
| - eopen_stream(streams + i, argv[i * 2]); | |
| - rows[i] = etozu_arg("rows", argv[i * 2 + 1], 1, SIZE_MAX); | |
| + for (i = 0; i < argc; i++) { | |
| + eopen_stream(streams + i, argv[i]); | |
| if (streams[i].height > SIZE_MAX - height) | |
| eprintf("output video is too wide\n"); | |
| - height += streams[i].height; | |
| + height += rows[i] = streams[i].height; | |
| if (i) { | |
| streams[i].height = streams->height; | |
| echeck_compat(streams, streams + i); | |
| @@ -31,10 +30,10 @@ main(int argc, char *argv[]) | |
| fprint_stream_head(stdout, streams); | |
| efflush(stdout, "<stdout>"); | |
| - for (i = 0; i < parts; i++, i = i == parts ? 0 : i) | |
| + for (i = 0; i < argc; i++, i = i == argc ? 0 : i) | |
| if (esend_rows(streams + i, STDOUT_FILENO, rows[i], "<stdout>"… | |
| break; | |
| - for (i = 0; i < parts; i++) | |
| + for (i = 0; i < argc; i++) | |
| close(streams[i].fd); | |
| free(streams); |