QUVI-GET(1)
π QUVI-GET(1) π
okay bestie, welcome to quvi-get β straight out of the quvi Manual, section 1. this is the vilified media stream extraction tool and she is that girl. let's get into it π«Ά
β¨ NAME β¨
quvi-get β The vilified media stream extraction tool π
πΈ SYNOPSIS πΈ
quvi get [OPTIONS] [ARGS]
π¦ DESCRIPTION π¦
This command saves the media stream to a file. that's it, that's the job, and she does it beautifully π
π DEFAULT BEHAVIOUR π
so here's the vibe: the command will attempt to determine if any of the libquvi-scripts(7) accept the input URL before exiting with an error. like, it's checking first, respectfully. and the script type {playlist,media,...} determines how the command will handle the input URL π
π Playlist URLs
The entire playlist of media URLs will be extracted. yes, all of them. she's thorough.
π Media URLs
The media will be extracted. simple. iconic.
π SUPPORT π
The support for the media hosts is determined by the current selection of libquvi-scripts(7). so basically it depends on which scripts you've got, no cap π§
π CONFIGURATION π
See quvirc(5) for more information about the groups and the variables that quvi parses. go read it, i'll wait π
β INPUT β
The command will read stdin by default. The input is expected to contain URLs. The command arguments are expected to be either URLs or file paths. If the input is read from either stdin or a file, the contents are read as RFC2483. The input may contain file URIs. okay so she's flexible, she reads from everywhere, we love a versatile queen β¨
π OPTIONS π
π Core
-o,--check-mode-offlineβ Do not resolve URL redirections before passing the URL to thelibquvi-scripts(7)to determine whether the URL is accepted by any of the scripts. like, she skips the whole redirect detour, lowkey efficient.
config: core.check-mode-offline=<boolean>
-B,--print-subtitlesβ Query and print the available media subtitles. See also--print-format. subtitle dump, let's go π-S,--print-streamsβ Query and print the available media streams. See also--print-format. stream dump, also slay.-l,--subtitle-language PATTERN[,PATTERN,...]β Match a subtitle language using a regexPATTERN. The value may be a comma-separated list of regexPATTERNs (left-to-right order) that are matched against the available selection.
The value may also contain the reserved keyword croak which will cause libquvi(3) to exit with an error when reached.
Note π
The first available subtitle language will be chosen if nothing matched the PATTERN
config: core.subtitle-language=<PATTERN[,PATTERN,...]>
-s,--stream PATTERN[,PATTERN,...]β Match a stream using a regexPATTERN. The value may be a comma-separated list of regexPATTERNs (left-to-right order) that are matched against the available selection.
The value may contain the following reserved keywords:
croak- instructslibquvi(3)to exit with an error when reachedbest- instructslibquvi(3)to choose the best quality stream
The best quality is determined by the libquvi-scripts(7) by comparing the media quality properties, e.g. the video height property, although the actual method may vary depending on the data provided by the media hosting service.
Note π
The first available stream is selected if nothing matched
config: core.stream=<PATTERN[,PATTERN,...]>
-L,--subtitle-export-format FORMAT(default:srt) β Export the subtitle language to the specifiedFORMAT. The availableFORMATs are determined by the current selection of the subtitle exportlibquvi-scripts(7). exporting subs, we're literally so cultured π
config: core.subtitle-export-format=<FORMAT>
-b,--verbosity LEVEL(default:verbose) β Specify the verbosity level of the command.LEVELmay be:debug-verbose+ enable verbose output for libcurl (CURLOPT_VERBOSE)verbose- defaultquiet- errors onlymute- nothing at all
config: core.verbosity=<LEVEL>
π Exec
-A,--exec-dump-argvβ Print the argument array used to execute the child program. show us the receipts π
config: exec.dump-argv=<boolean>
-E,--exec-enable-stderrβ Do not discard child program's standard error. keep the messy parts, we stan transparency.
config: exec.enable-stderr=<boolean>
-O,--exec-enable-stdoutβ Do not discard child program's standard output.
config: exec.enable-stdout=<boolean>
-e,--exec COMMANDβ Execute a child program asynchoronously after parsing the media properties.COMMANDmay contain any of the following property sequences. Each occurence will be replaced by the command before theCOMMANDis executed:
%s Media property: start time (ms)
%T Media property: thumbnail URL
%d Media property: duration (ms)
%u Media stream property: URL
%I Media stream property: ID
%t Media property: title
%i Media property: ID
%e File extension[1]
%f Path to the saved media file[2]
[1]: The file extension is parsed from the HTTP content-type header.
quvi-get(1) replaces this sequence with HTTP media streams only.
quvi-dump(2) replaces it only when --query-metainfo is used with
HTTP media streams.
[2]: This sequence is unique to quvi-get(1)
This option may be specified multiple times. In the quvirc(5) file, specify the commands in a comma-separated list.
config: exec.external=<COMMAND[,COMMAND,...]>
π¦ Get
-w,--overwriteβ Overwrite the existing file. no hesitation, no mercy π-g,--output-regex PATTERN(default:multiple) β Apply a regexPATTERNagainst a media property.
The PATTERN will be used to match/replace all occurences β this is similar to the g modifier of Perl. The option supports the m// (match, m is optional) operation and the s/// substitution operation.
The syntax is similar to Perl-syntax except that this option expects a leading "property sequence" that specifies the media property to apply the regex PATTERN against. See the section called "Exec" for a complete list of the supported "property sequences".
This option may be specified multiple times. Inside the quvirc(5) file, specify the PATTERNs in a comma-separated list. Double any backslashes inside the quvirc(5) in the PATTERN.
The command applies the following PATTERNs by default:
%t:/\w|\s/
%t:s/\s\s+/ /
%t:s/^\s+//
%t:s/\s+$//
config: get.output-regex=<PATTERN[,PATTERN,...]>
-f,--output-file FILEβ Write the media to the specifiedFILE.-n,--output-name FORMAT(default:"%t.%e") β Specify the file nameFORMAT. This value determines how the saved media files will be named. All occurences of the supported media property sequences will be replaced. See the section called "Exec" for a complete list of the supported "property sequences". naming your files like a main character π
config: get.output-name=<FORMAT>
-i,--output-dir DIR(default:cwd) β Write the saved media to theDIR.
config: get.output-dir=<DIR>
-r,--resume-from OFFSET(default:0) β Specify the offset from which the transfer should continue. If this value is0(default), the command will attempt to resume the transfers automatically. If the value is>0, the command will attempt to resume the transfer from the specified offset.
If the value is >=0, the command will send an HEAD request to the HTTP server to query the content-{type,length} values. These are used to build the output filename and to determine whether the transfer should be resumed; the content-length value is compared to the local file length to determine whether transfer should resume.
Use of a negative value (<0) will cause the command to disable resuming completely causing the command to skip the step that sends the HEAD request to the HTTP server, and start the transfer from the 0 offset, and effectively, overwriting the existing file. The content-{type,length} values are parsed from the returned HTTP GET response, instead.
Technical π§ : libcurl requires settingCURLOPT_RESUME_FROM_LARGEbefore 'curl_easy_perform' is called. The the command has no way of knowing whether the transfer should be resumed if 'content-length' is not queried by sending a HTTP HEAD request before the transfer begins. A possible workaround is to specify from which offset the transfer should continue, but this requires that the user determines the value by hand.
config: get.resume-from=<OFFSET>
-k,--skip-transferβ Do not save the media. just vibes, no files.
config: get.skip-transfer=<boolean>
-t,--throttle RATE(default:0) β Do not exceed the transferRATE(Ki/s). Setting this value to0disables the throttle. This setting affects only the saving process of the media stream. slow and steady, bestie π’
config: get.throttle=<RATE>
πΈ HTTP
-c,--enable-cookiesβ Have libcurl parse the received cookies and use them in the subsequent HTTP requests. cookie moment πͺ
config: http.enable-cookies=<boolean>
-u,--user-agent USERAGENT(default:Mozilla/5.0) β Identify asUSERAGENTto the HTTP server.
Note π
libquvi-scripts(7) may override this value
config: http.user-agent=<USERAGENT>
π EXAMPLES π
- Save the stream:
$ quvi get MEDIA_URL
- Dump the available streams:
$ quvi get -S MEDIA_URL
- Save the selected stream:
$ quvi get -s foo MEDIA_URL
- Similar to the above but choose the stream "baz" if "foo" is not available:
$ quvi get -s foo,baz,best MEDIA_URL
$ quvi get -s foo,baz,croak MEDIA_URL
The first will grab whatever is the best quality if neither ("foo" or "baz") stream is available. The use of "croak" keyword will cause the command to exit with an error if neither stream is available.
- Dump the available subtitles:
$ quvi get -B MEDIA_URL
- Do not save the media stream, grab "cc_en" subtitles only:
$ quvi get -k -l cc_en,croak MEDIA_URL
Use of "croak" keyword will cause the command to exit with an error if "cc_en" subtitle was not available.
- Watch the entire playlist using
mplayer(1):
$ quvi get -e "mplayer %f" PLAYLIST_URL
β ENVIRONMENT β
See quvi(1)
π¦ EXIT STATUS π¦
Either EXIT_SUCCESS or EXIT_FAILURE. The actual value depends on the platform, on POSIX systems they are 0 (success) and 1 (failure). so like, 0 = we ate, 1 = we did not eat π
π SEE ALSO π
π FURTHER RESOURCES π
Home
Development code
git://repo.or.cz/quvi-tool.git
gitweb
http://repo.or.cz/w/quvi-tool.git
π AUTHORS π
Toni Gundogdu <legatvs@gmail.com> Author. (yes, the one and only π)
π₯ REPORTING BUGS π₯
Report bugs to the quvi-devel mailing list <quvi-devel@lists.sourceforge.net> where the development and the maintenance is primarily done. You do not have to be subscribed to the list to send a message there. so if something's broken, tell them, no gatekeeping, you don't even need to be in the club π«Ά
πΈ LICENSE πΈ
quvi is Free Software licensed under the GNU Affero GPLv3+
π QUVI π
Part of the quvi(1) suite
and that's the whole thing bestie, you're officially caught up π
quvi 0.9.5 Β· 11/10/2013 β yeah she's an older queen but she still eats π mwah, go extract something iconic π¦β¨
π¦ where this page comes from
- alpine 3.24: quvi-doc 0.9.5-r6 Β· LGPL-2.0-or-later
- debian bookworm: quvi 0.9.5-0.2 Β· AGPL-3.0-or-later
- debian trixie: quvi 0.9.5-0.2+b1 Β· AGPL-3.0-or-later
- ubuntu noble: quvi 0.9.5-0.2build3 Β· AGPL-3.0-or-later
- ubuntu questing: quvi 0.9.5-0.2build4
- ubuntu resolute: quvi 0.9.5-0.2build5 Β· AGPL-3.0-or-later
- ubuntu stonking: quvi 0.9.5-0.2build5 Β· AGPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms