mirror of
https://github.com/fmang/opustags.git
synced 2024-11-10 07:27:22 +01:00
190 lines
8.5 KiB
Groff
190 lines
8.5 KiB
Groff
.TH opustags 1 "April 2024" "@PROJECT_NAME@ @PROJECT_VERSION@"
|
||
.SH NAME
|
||
opustags \- Ogg Opus tag editor
|
||
.SH SYNOPSIS
|
||
.B opustags --help
|
||
.br
|
||
.B opustags
|
||
.RI [ OPTIONS ]
|
||
.I INPUT
|
||
.br
|
||
.B opustags
|
||
.I OPTIONS
|
||
.B -i
|
||
\fIFILE\fP...
|
||
.br
|
||
.B opustags
|
||
.I OPTIONS
|
||
.B -o
|
||
.I OUTPUT INPUT
|
||
.SH DESCRIPTION
|
||
.PP
|
||
\fBopustags\fP can read and edit the comment header of an Ogg Opus file.
|
||
It has two modes: read-only, and read-write for tag editing.
|
||
.PP
|
||
In read-only mode, only the beginning of \fIINPUT\fP is read, and the tags are
|
||
printed on standard output. Lines prefixed by tabs are continuation of the previous tag.
|
||
\fIINPUT\fP can either be the name of a file or \fB-\fP to read from standard input.
|
||
You can use the options below to edit the tags before printing them.
|
||
This could be useful to preview some changes before writing them.
|
||
.PP
|
||
In editing mode, you need to specify an output file with \fB--output\fP, or use \fB--in-place\fP to
|
||
overwrite the input files. If the output is a regular file, the result is first written to a
|
||
temporary file and then moved to its final location on success. On error, the temporary output file
|
||
is deleted.
|
||
.PP
|
||
Tag editing can be performed with the \fB--add\fP, \fB--delete\fP and \fB--set\fP
|
||
options. Options can be specified in any order and don’t conflict with each other.
|
||
First the specified tags are deleted, then the new tags are added.
|
||
.PP
|
||
You can delete all the tags with \fB--delete-all\fP. This operation can be combined with \fB--add\fP
|
||
to set new tags without being bothered by the old ones.
|
||
.PP
|
||
If you want to replace all the tags, you can use the \fB--set-all\fP option which will cause
|
||
\fBopustags\fP to read tags from standard input.
|
||
The format is the same as the one used for output: newline-separated \fIFIELD=Value\fP assignment.
|
||
All the previously existing tags as deleted.
|
||
.PP
|
||
The Opus format specifications requires that tags are encoded in UTF-8, so that's the only encoding
|
||
opustags supports. If your system encoding is different, the tags are automatically converted to and
|
||
from your system locale. When you edit an Opus file whose tags contains characters unsupported by
|
||
your system encoding, the original UTF-8 values will be preserved for the tags you don't explicitly
|
||
modify.
|
||
.SH OPTIONS
|
||
.TP
|
||
.B \-h, \-\-help
|
||
Display a brief description of the options.
|
||
.TP
|
||
.B \-o, \-\-output \fIFILE\fI
|
||
Specify the output file.
|
||
The input file will be read, its tags edited, then written to the specified output file. If
|
||
\fIFILE\fP is \fB-\fP then the resulting Opus file will be written to standard output.
|
||
The output file can’t be the same as the input file.
|
||
.TP
|
||
.B \-i, \-\-in-place
|
||
Overwrite the input file instead of creating a separate output file. It has the same effect as
|
||
setting \fB--output\fP to the same path as the input file and enabling \fB--overwrite\fP.
|
||
This option conflicts with \fB--output\fP.
|
||
.TP
|
||
.B \-y, \-\-overwrite
|
||
By default, \fBopustags\fP refuses to overwrite an already-existent file.
|
||
Use \fB-y\fP to allow overwriting.
|
||
Note that this option is not needed when the output is a special file like \fI/dev/null\fP.
|
||
.TP
|
||
.B \-d, \-\-delete \fIFIELD[=VALUE]\fP
|
||
If value is not specified, delete all the tags whose field name is \fIFIELD\fP.
|
||
Otherwise, delete all the comments whose field name is \fIFIELD\fP and value is \fIVALUE\fP.
|
||
In both cases, the field names are case-insensitive, and expected to be ASCII.
|
||
.TP
|
||
.B \-a, \-\-add \fIFIELD=VALUE\fP
|
||
Add a tag. Note that multiple tags with the same field name are perfectly acceptable, so you can add
|
||
multiple fields with the same name, and previously existing tags will also be preserved.
|
||
When the \fB--delete\fP is used with the same \fIFIELD\fP, only the older tags are deleted.
|
||
.TP
|
||
.B \-s, \-\-set \fIFIELD=VALUE\fP
|
||
This option is provided for convenience. It delete all the fields of the same
|
||
type that may already exist, then adds it with the wanted value.
|
||
This is strictly equivalent to \fB--delete\fP \fIFIELD\fP \fB--add\fP
|
||
\fIFIELD=VALUE\fP. You can combine it with \fB--add\fP to add tags of the same
|
||
type. As deletion occurs before adding, \fB--set\fP won’t erase the tags
|
||
added with \fB--add\fP.
|
||
.TP
|
||
.B \-D, \-\-delete-all
|
||
Delete all the previously existing tags.
|
||
.TP
|
||
.B \-S, \-\-set-all
|
||
Sets the tags from scratch.
|
||
All the original tags are deleted and new ones are read from standard input.
|
||
Each line must specify a \fIFIELD=VALUE\fP pair and be separated with line feeds.
|
||
Empty lines and lines starting with \fI#\fP are ignored.
|
||
Multiline tags must have their continuation lines prefixed by a single tab (in other words, every
|
||
\fI\\n\fP must be replaced by \fI\\n\\t\fP).
|
||
.TP
|
||
.B \-e, \-\-edit
|
||
Edit tags interactively by spawning the program specified by the EDITOR
|
||
environment variable. The allowed format is the same as \fB--set-all\fP.
|
||
If TERM and VISUAL are set, VISUAL takes precedence over EDITOR.
|
||
.TP
|
||
.B \-\-output-cover \fIFILE\fP
|
||
Save the cover art of the input Opus file to the specified location.
|
||
If the input file does not contain any cover art, this option has no effect.
|
||
To allow overwriting the target location, specify \fB--overwrite\fP.
|
||
In the case of multiple pictures embedded in the Opus tags, only the first one is saved.
|
||
Note that the since the image format is not fixed, you should consider an extension-less file name
|
||
and rely on the magic number to deduce the type. opustags does not add or check the target file’s
|
||
extension.
|
||
You can specify \fB-\fP for standard output, in which case the regular output will be suppressed.
|
||
.TP
|
||
.B \-\-set-cover \fIFILE\fP
|
||
Replace or set the cover art to the specified picture.
|
||
Specify \fB-\fP to read the picture from standard input.
|
||
In theory, an Opus file may contain multiple pictures with different roles, though in practice only
|
||
the front cover really matters. opustags can currently only handle one front cover and nothing else.
|
||
.TP
|
||
.B \-\-vendor
|
||
Print the vendor string from the OpusTags packet and do nothing else. Standard tags operations are
|
||
not supported when specifying this flag.
|
||
.TP
|
||
.B \-\-set-vendor \fIVALUE\fP
|
||
Replace the vendor string by the specified value. This action can be performed alongside tag
|
||
edition.
|
||
.TP
|
||
.B \-\-raw
|
||
OpusTags metadata should always be encoded in UTF-8, as per RFC 7845. However, some files may be
|
||
corrupted or possibly even contain intentional binary data. In that case, --raw lets you edit that
|
||
kind of binary data without ensuring the validity of the tags encoding. This option may also be
|
||
useful when your system encoding is different from UTF-8 and you wish to preserve the full UTF-8
|
||
character set even though your system cannot display it.
|
||
.TP
|
||
.B \-z
|
||
When editing tags programmatically with line-based tools like grep or sed, tags containing newlines
|
||
are likely to corrupt the result because these tools won’t interpret multi-line tags as a whole. To
|
||
make automatic processing easier, \fB-z\fP delimits tags by a null byte (ASCII NUL) instead of line
|
||
feeds. That same \fB-z\fP flag is also supported by GNU grep or GNU sed and, combined with opustags
|
||
-z, would make them process the input tag-by-tag instead of line-by-line, thus supporting multi-line
|
||
tags as well. This option also disables the TAB prefix for continuation lines after a line feed.
|
||
.SH EXAMPLES
|
||
.PP
|
||
List all the tags in file foo.opus:
|
||
.PP
|
||
opustags foo.opus
|
||
.PP
|
||
Copy in.opus to out.opus, with the TITLE tag added:
|
||
.PP
|
||
opustags in.opus --output out.opus --add "TITLE=Hello world!"
|
||
.PP
|
||
Remove the previously existing ARTIST tags and add the two X and Y ARTIST tags, then display the new
|
||
tags without writing them to the Opus file:
|
||
.PP
|
||
opustags in.opus --add ARTIST=X --add ARTIST=Y --delete ARTIST
|
||
.PP
|
||
Edit tags interactively in Vim:
|
||
.PP
|
||
EDITOR=vim opustags --in-place --edit file.opus
|
||
.PP
|
||
Replace all the tags in dest.opus with the ones from src.opus:
|
||
.PP
|
||
opustags src.opus | opustags --in-place dest.opus --set-all
|
||
.PP
|
||
Use GNU grep to remove all the CHAPTER* tags, with -z to support multi-line tags:
|
||
.PP
|
||
opustags -z file.opus | grep -z -v ^CHAPTER | opustags -z --in-place file.opus --set-all
|
||
.SH CAVEATS
|
||
.PP
|
||
\fBopustags\fP currently has the following limitations:
|
||
.IP \[bu]
|
||
Multiplexed streams are not supported.
|
||
.IP \[bu]
|
||
Control characters inside tags are printed raw rather than being escaped.
|
||
.PP
|
||
Internally, the OpusTags packet in an Ogg Opus file may contain extra arbitrary binary data after
|
||
the comments. This block of data is currently not editable, but is always preserved. The same
|
||
applies for the vendor string.
|
||
.PP
|
||
If you need a feature not currently supported, feel free to open an issue or send an email with your
|
||
use case.
|
||
.SH AUTHOR
|
||
Frédéric Mangano <fmang+opustags@mg0.fr>
|
||
.PP
|
||
Report bugs at <https://github.com/fmang/opustags/issues>
|