GET_IPLAYER(1)
π GET_IPLAYER π
okay bestie, sit down, hydrate, because this is the manual page for get_iplayer β the get_iplayer(1) page, your one-stop shop for grabbing BBC stuff. It's giving very much "I have a spreadsheet and I'm not afraid to use it". Let's go. π«Ά
β¨ NAME β¨
get_iplayer β Stream Recording tool and PVR for BBC iPlayer and BBC Sounds
so yeah, it's a recorder and a PVR. two modes, one icon. π
β¨ SYNOPSIS β¨
get_iplayer [<options>] [<regex|index> ...]
get_iplayer --get [<options>] <regex|index> ...
get_iplayer <url> [--type=<type> <options>]
get_iplayer <pid> [--type=<type> <options>]
get_iplayer --refresh [--type=<type> <options>]
β¨ DESCRIPTION β¨
get_iplayer lists, searches and records BBC iPlayer TV and BBC Sounds radio programmes. literally all of it. β¨
ngl it has two modes, and they're both iconic in their own way:
- recording a complete programme so you can watch/listen later
- being a Personal Video Recorder (PVR) β it subscribes to your search terms and records programmes automatically like the little overachiever it is π
so if you hand it the regex ".*" (yes, incl. quotes, the quotes are not optional bestie), it updates and displays the list of currently available TV programmes. want radio instead? use --type=radio. every available programme has an alphanumeric identifier called a PID. that's its little name tag. π·οΈ
and in PVR mode, get_iplayer can be called from cron to record programmes on a schedule β set it and forget it, main character energy fr fr π
β¨ OPTIONS β¨
quick housekeeping before we dive in: Boolean options can be negated by adding a "no-" prefix, e.g., --no-subtitles or --no-whitespace. and yes, this applies even if the base option name already begins with "no-", e.g., --no-no-tag or --no-no-artwork. double negative? she said yes. π
π Search Options π
--available-before <hours>β only look at programmes that became available before<hours>hours ago--available-since <hours>β only look at programmes that became available in the last<hours>hours--before <hours>β only look at programmes that were added to the cache before<hours>hours ago--category <string>β narrow the search to matched categories (comma-separated regex list). defaults to substring match. and heads up: this only works with--history--channel <string>β narrow the search to matched channel(s) (comma-separated regex list). defaults to substring match--exclude <string>β narrow the search by excluding matched programme names (comma-separated regex list). defaults to substring match. bye felicia π--exclude-category <string>β narrow the search by excluding matched categories (comma-separated regex list). defaults to substring match. only works with--history--exclude-channel <string>β narrow the search by excluding matched channel(s) (comma-separated regex list). defaults to substring match--expires-after <hours>β only look at programmes that will expire after<hours>hours from now--expires-before <hours>β only look at programmes that will expire before<hours>hours from now--fields <field1>,<field2>,...β searches only in the fields you name. the fields get concatenated with spaces in the order you specified, and then your search term is applied to the resulting string. string go brrr π§΅--futureβ also search the future programme schedule, if it's been indexed (refresh that cache with:--refresh --refresh-future)--historyβ search your recordings history (requires a search term)--long,-lβ also search in programme descriptions and episode names (same as--fields=name,episode,desc)--search <search term>β the GetOpt-compliant way of specifying search args--since <hours>β only look at programmes added to the cache in the last<hours>hours--type <type>,<type>,...β only search in these types of programmes:tv,radio,all(tvis the default)
π₯οΈ Display Options π₯οΈ
--conditionsβ shows the GPLv3 conditions π--debugβ debug output (very verbose and rarely useful β she said what she said)--dump-optionsβ dumps all options with their internal option key names--help,-hβ intermediate help text--helpbasic,--usageβ basic help text--helplongβ advanced help text--hideβ hide previously recorded programmes π--info,-iβ show full programme metadata and availability of streams and subtitles (max 40 matches)--list <element>β show a list of distinct element values (with counts) for the selected programme type(s), then exit. valid elements are:'channel'--listformat <format>β display search results with a custom format. use substitution parameters in the format string (see docs for list)--long,-lβ show extended programme info--manpage <file>β create a man page based on the current help text (meta, honestly)--nocopyrightβ don't display the copyright header--page <number>β page number to display for multipage output--pagesize <number>β number of matches displayed on a page for multipage output--quiet,-qβ reduce logging output π€«--seriesβ display programme series names only, with the number of episodes--show-cache-ageβ display the age of the selected programme caches, then exit--show-optionsβ show options which are set and where they are defined--silentβ no logging output except the PVR download report. cannot be saved in preferences or PVR searches. β¨--sort <fieldname>β field to use to sort displayed matches--sortreverseβ reverse the order of sorted matches--streaminfoβ returns all of the media stream URLs of the programme(s) π--terseβ only show terse programme info (does not affect searching)--treeβ display programme listings in a tree view π³--verbose,-vβ show additional output (useful for diagnosing problems)--warrantyβ displays the warranty section of GPLv3-Vβ showget_iplayerversion and exit
π¬ Recording Options π¬
--attempts <number>β number of attempts to make or resume a failed connection.--attemptsis applied per-stream. programmes have multiple streams available for each recording quality. she's persistent πͺ--audio-onlyβ only download the audio stream for a TV programme. produces an.m4afile. implies--force--download-abort-onfailβ exit immediately if any stream fails to download. use this to avoid repeated failed download attempts if your connection is dropped or access is blocked--exclude-format <format>,<format>,...β comma-separated list of media stream formats to ignore when recording. valid values:hls,dash--exclude-supplier <supplier>,<supplier>,...β comma-separated list of media stream suppliers (CDNs) to skip. possible values:akamai,limelight,bidi,cloudfront. synonym:--exclude-cdn--forceβ ignore programme history (this also unsets the--hideoption)--get,-gβ start recording matching programmes. search terms required.--hashβ show recording progress as hashes##########π₯--include-format <format>,<format>,...β comma-separated list of media stream to use when recording. overrides--exclude-format. valid values:hls,dash--include-supplier <supplier>,<supplier>,...β comma-separated list of media stream suppliers (CDNs) to use if they're not included by default, or if they were previously excluded by--exclude-supplier. possible values:akamai,limelight,bidi,cloudfront. synonym:--include-cdn--log-progressβ force HLS/DASH download progress display to be captured when screen output is redirected to a file. normally the progress display is omitted unless you're writing to a terminal--mark-downloadedβ mark programmes in search results, or ones specified with--pid/--url, as downloaded by inserting records in the download history--no-merge-versionsβ do not merge programme versions with the same name and duration--no-proxyβ ignore the--proxysetting in preferences and/or thehttp_proxyenvironment variable--no-resumeβ do not resume partial HLS/DASH downloads--no-verifyβ do not verify the size of downloaded HLS/DASH file segments, or the file resize upon resume--overwriteβ overwrite recordings if they already exist--partial-proxyβ only uses the web proxy where absolutely required (try this extra option if your proxy fails)--pid <pid>,<pid>,...β record arbitrary PIDs that don't necessarily appear in the index--pid-indexβ update (if necessary) and use the programme index cache with--pid. the cache is not searched for the programme by default with--pid. synonym:--pid-refresh--proxy,-p <url>β web proxy URL, e.g.,http://username:password@server:portorhttp://server:port. the value of thehttp_proxyenvironment variable (if present) will be used unless--proxyis specified. used for both HTTP and HTTPS. overridden by--no-proxy--quality <quality>,<quality>,...β TV and radio recording quality preference. see--tv-qualityand--radio-qualityfor available values and defaults. default:defaultfor programme type--radio-quality <quality>,<quality>,...β radio recording quality preference (overrides--quality):high,std,med,low,default(aliases:320k,128k,96k,48k). comma-delimited list in descending order of preference. default:high,std,med,low--start <secs|hh:mm:ss>β recording/streaming start offset (heads up: the actual start may be several seconds earlier for HLS and DASH streams)--stop <secs|hh:mm:ss>β recording/streaming stop offset (heads up: the actual stop may be several seconds later for HLS and DASH streams)--subtitles-requiredβ do not download a TV programme if subtitles are not available. no subs no service π--test,-tβ test only, no recording (only shows search results with--pvrand--pid-recursive)--tv-lower-bitrate,--tvlbrβ prefer 25fps (or lower-bitrate 50fps) streams for TV programmes, if available--tv-quality <quality>,<quality>,...β TV recording quality preference (overrides--quality):fhd,hd,sd,web,mobile,default(aliases:1080p,720p,540p,396p,288p). comma-delimited list in descending order of preference. default:hd,sd,web,mobile--url <url>,<url>,...β record the PIDs contained in the specified iPlayer episode URLs. alias for--pid--versions <versions>β version of programme to record. the list is processed from left to right and the first version found is downloaded. example:'--versions=audiodescribed,default'will prefer audiodescribed programmes if available. versions:'default,audiodescribed,signed,combined'. default:'default'
okay that's the first chunk bestie, we're not done yet β more coming, don't go anywhere π
π Recursive Recording Options
--pid-recursiveβ bestie, this is the "gimme the WHOLE show" button π If the value you passed to--pidis a series PID or a brand PID, it records every related episode. Needs--pidto be there, no exceptions.--pid-recursive-channel <channel>[,<channel>,...]β filters that episode list down to only the programmes where<channel>shows up in the channel name.<channel>can be a regex or a comma-separated list of substrings. Requires--pid-recursive.--pid-recursive-exclude <exclude>[,<exclude>,...]β the bouncer π« kicks out every programme where<exclude>(regex, or comma-separated list of substrings) appears in the series name or the episode title. Requires--pid-recursive.--pid-recursive-exclude-channel <channel>[,<channel>,...]β same bouncer energy, but it looks at the channel name. Anything where<channel>(regex or comma-separated list of substrings) appears in the channel name gets excluded. Requires--pid-recursive.--pid-recursive-listβ if your--pidis a series or brand PID, this lists the available episodes and does not download a single one. It implies--pid-recursive. Requires--pid.--pid-recursive-search <search>[,<searchl>,...]β only keeps programmes where<search>(regex, or comma-separated list of substrings) appears in the series name or episode title. Requires--pid-recursive.--pid-recursive-type <type>β narrows the episode list to programmes of type<type>(which isradioortv). Requires--pid-recursive.
πΎ Output Options
--command,-c <command>β a user command to run after a programme records successfully π drop substitution parameters right into the command string (the docs have the list).--command-radio <command>β user command that runs after a radio programme records successfully. Same substitution-parameter situation (docs, list, go look). This one overrides--command.--command-tv <command>β user command that runs after a TV programme records successfully. Substitution parameters again (docs, list). Also overrides--command.--creditsβ downloads the programme credits, if they're available π--credits-onlyβ downloads only the programme credits, if available. No programme, just the credits.--cuesheetβ makes a cue sheet (a.cuefile) for the programme, if the data's there. Radio programmes only. Heads up though: the cue sheet will be very inaccurate and will need further editing. Also it may need a UTF-8 BOM (byte-order mark) added before some applications will recognise the encoding. π--cuesheet-offset [-]<offset>β shifts the track times in the cue sheet and the track list by however many seconds you say. Synonym:--tracklist-offset.--cuesheet-onlyβ only makes the cue sheet (.cuefile) for the programme, if data's available. Radio programmes only.--file-prefix <format>β the filename prefix template (and nope, this is excluding the directory and the extension). Use substitution parameters in the template (docs, list). Default:<name> - <episode> <pid> <version>.--limitprefixlength <length>β the max length for a file prefix. Defaults to240, which leaves room inside the standard256limit β¨--metadataβ creates a metadata info file after recording. Valid values:generic,json. XML gets generated for'generic', JSON for'json'. If you don't specify a value,'generic'is used.--metadata-onlyβ creates the specified metadata info file with no recording and no streaming at all. Just the metadata, bestie.--mpeg-tsβ forces raw audio and video files to be re-muxed into an MPEG-TS file no matter what the stream format is. Overrides--raw.--no-metadataβ don't create a metadata info file after recording. This overrides--metadata.--no-sanitiseβ don't sanitise the output file and directory names. Implies--whitespace. Invalid characters for Windows ("*:<>?|) and macOS (:) will be removed.--output,-o <dir>β the recording output directory π--output-radio <dir>β output directory specifically for radio recordings (overrides--output).--output-tv <dir>β output directory specifically for TV recordings (overrides--output).--rawβ don't remux or change the recording in any way, periodt. Saves the output file in its native container format (HLS->MPEG-TS,DASH->MP4).--subdir,-sβ saves recorded files into a subdirectory of the output directory. Default: same name as the programme (peep--subdir-format).--subdir-format <format>β the format used for naming that subdirectory. Use substitution parameters in the format string (docs, list).--suboffset <offset>β offsets the subtitle timestamps by however many milliseconds you give it. Requires--subtitles.--subs-embedβ embeds soft subtitles in the MP4 output file. Ignored with--audio-onlyand--ffmpeg-obsolete. Requires--subtitles. Implies--subs-mono.--subs-monoβ creates monochrome titles, with a leading hyphen used to show when the speaker changes. Requires--subtitles. Not required with--subs-embed.--subs-rawβ additionally saves the raw subtitles file. Requires--subtitles.--subtitlesβ downloads subtitles intosrt/SubRip format, if they're available and supported π¦--subtitles-onlyβ only downloads the subtitles. Not the programme. Just the subs.--tag-onlyβ only updates the programme metadata tag and does not download the programme. Use it with--historyor--tag-only-filename.--tag-only-filename <filename>β adds metadata tags to the specified file (this gets ignored unless you're using it with--tag-only).--thumbβ downloads the thumbnail image, if available π--thumb-ext <ext>β the thumbnail filename extension to use.--thumbnail-onlyβ only downloads the thumbnail image if available, not the programme.--thumbnail-seriesβ forces use of the series/brand thumbnail (series preferred) instead of the episode thumbnail.--thumbnail-size <width>β the thumbnail size to use for the current recording and metadata. Specify width:192,256,384,448,512,640,704,832,960,1280,1920. Invalid values will be mapped to the nearest available one. Default:1920(1280with--thumbnail-square).--thumbnail-squareβ downloads the square version of the thumbnail image. Limits--thumbnail-sizeto1280.--tracklistβ creates a track list of the music played in the programme, if the data's available. Fair warning: the track times and durations may be missing or incorrect π--tracklist-onlyβ only creates the track list of music played in the programme, if the data's available.--whitespace,-wβ keeps whitespace in file and directory names. Default behaviour is to replace whitespace with underscores.
πΊ PVR Options
--comment <string>β adds a comment to a PVR search π--pvr <search name>β runs the PVR using all the saved PVR searches (this is meant to be run periodically, like from cron or Task Manager). You can limit the list by adding a regex to the command. Synonyms:--pvrrun,--pvr-run.--pvr-add <search name>β saves the named PVR search with the search terms you specified. Search terms are required unless--pidis specified. Synonyms:--pvradd.--pvr-del <search name>β removes the named search from the PVR searches. Synonyms:--pvrdel.--pvr-disable <search name>β disables (does not delete) a named PVR search. Synonyms:--pvrdisable.--pvr-enable <search name>β re-enables a named PVR search that you previously disabled. Synonyms:--pvrenable.--pvr-exclude <string>β excludes PVR searches from running, by search name (comma-separated regex list). Defaults to substring match. Synonyms:--pvrexclude.--pvr-listβ shows the PVR search list. Synonyms:--pvrlist.--pvr-queueβ adds the currently matched programmes to the queue for a later one-off recording using the--pvroption. Search terms required unless--pidis specified. Synonyms:--pvrqueue.--pvr-scheduler <seconds>β runs the PVR using all saved PVR searches every<seconds>. Synonyms:--pvrscheduler.--pvr-seriesβ creates a PVR search for each unique series name in the search results. Search terms required. Synonyms:--pvrseries.--pvr-single <search name>β runs a named PVR search. Synonyms:--pvrsingle.
βοΈ Config Options
--cache-rebuildβ rebuilds the cache with the full 30-day programme index. Use--refresh-limitto restrict the cache window.--expiry,-e <secs>β cache expiry in seconds (default4hrs).--limit-matches <number>β limits the number of matching results for any search (and for every PVR search too).--prefs-addβ add/change the specified saved user or preset options.--prefs-clearβ remove ALL saved user or preset options. Yes, all of them, bestie π--prefs-delβ remove the specified saved user or preset options.--prefs-showβ show the saved user or preset options.--preset,-z <name>β use the specified user options preset.--preset-listβ show all valid presets β¨--profile-dir <dir>β overrides the user profile directory.--refreshβ refreshes the cache.--refresh-abort-onerrorβ aborts the cache refresh for a programme type if the data for any channel fails to download. Use--refresh-excludeto temporarily skip the failing channels.--refresh-exclude <channel>,<channel>,...β excludes the matched channel(s) when refreshing the cache (comma-separated regex list). Defaults to substring match. Overrides--refresh-include-groups[-{tv,radio}]status for the specified channel(s).--refresh-exclude-groups <group>,<group>,...β excludes channel groups when refreshing the radio or TV cache (comma-separated values). Valid values:'national','regional','local'.--refresh-exclude-groups-radio <group>,<group>,...β excludes channel groups when refreshing the radio cache (comma-separated values). Valid values:'national','regional','local'.--refresh-exclude-groups-tv <group>,<group>,...β excludes channel groups when refreshing the TV cache (comma-separated values). Valid values:'national','regional','local'.--refresh-futureβ obtains the future programme schedule when refreshing the cache.--refresh-include <channel>,<channel>,...β includes the matched channel(s) when refreshing the cache (comma-separated regex list). Defaults to substring match. Overrides--refresh-exclude-groups[-{tv,radio}]status for the specified channel(s).--refresh-include-groups<group>,<group>,...β when you're refreshing the radio or TV cache, this is where you say which channel groups you actually want, comma-separated obvs. Valid values:'national','regional','local'β¨--refresh-include-groups-radio<group>,<group>,...β same energy but radio-cache-only bestie. Comma-separated values, valid ones are'national','regional','local'π--refresh-include-groups-tv<group>,<group>,...β and this one's the TV-only twin. Comma-separated values:'national','regional','local'π--refresh-limit<days>β the minimum number of days of programmes to cache. Default:7, Min:1, Max:30. keep it in the range bestie πΈ--refresh-limit-radio<days>β how many days of radio programmes to cache. Default:7, Min:1, Max:30π»--refresh-limit-tv<days>β how many days of TV programmes to cache. Default:7, Min:1, Max:30πΊ--skipdeletedβ literally just skips downloading metadata/thumbs/subs when the media file isn't there anymore. Use it with--history&--metadataonly/--subsonly/--thumbonlyπ«Ά--webrequest<urlencoded string>β drop all your options in as one urlencoded string shaped like"name=val&name=val&..."π
β¨ External Program Options β¨
okay so these are the "where do I find the other program" options, iconic behaviour tbh
--atomicparsley<path>β the location of the AtomicParsley binary π--ffmpeg<path>β location of the ffmpeg binary. Unless you pass--ffmpeg-obsolete, it's assumed to be ffmpeg3.0or higher π--ffmpeg-forceβ bypass the version checks and just assume ffmpeg is version3.0or higher. living dangerously, love that for you π₯--ffmpeg-loglevel<level>β sets the logging level for ffmpeg. Heads up:--quietand--silentoverride this. Default:'fatal'π--ffmpeg-obsoleteβ for when you're on an obsolete version of ffmpeg (<1.0) that might not support certain options. No cap: without this option, MP4 conversion may fail with obsolete versions of ffmpeg. You've been warned bestie π
π Tagging Options π
--no-artworkβ don't embed the thumbnail image in the output file. It also removes existing artwork. All the other metadata values still get written tho π--no-tagβ don't tag downloaded programmes. periodt β--tag-creditsβ adds programme credits (if available) into the long description field π«Ά--tag-encoding<name>β (Windows only) single-byte character encoding for non-ASCII characters in metadata tags. The encoding name has to be known to the Perl Encode module. Unicode (UTF*orUCS*) character encodings are not supported. Default: the active code page orcp1252(Windows code page 1252) πͺ--tag-format-showβ format template for the programme name in tag metadata. Use substitution parameters in the template (see docs for the list). Default:<name>β--tag-format-titleβ format template for the episode title in tag metadata. Use substitution parameters in the template (see docs for the list). Default:<episodeshort>β¨--tag-isodateβ use ISO8601 dates (YYYY-MM-DD) in album/show names and track titles π--tag-no-unicodeβ (Windows only) don't attempt Unicode tagging, use single-byte character encoding instead (see--tag-encoding) π--tag-podcastβ tags downloaded radio and tv programmes as iTunes podcasts. Just so you know: incompatible with Music/Podcasts/TV apps on macOS10.15and higher π--tag-podcast-radioβ tags only downloaded radio programmes as iTunes podcasts (also incompatible with Music/Podcasts/TV apps on macOS10.15and higher) π»--tag-podcast-tvβ tags only downloaded tv programmes as iTunes podcasts (and yeah, incompatible with Music/Podcasts/TV apps on macOS10.15and higher) πΊ--tag-tracklistβ adds the track list of music played in the programme (if available) to the lyrics field π΅
πΈ Misc Options πΈ
--encoding-console-in<name>β character encoding for standard input (currently unused, so it's giving placeholder energy). The encoding name must be known to the Perl Encode module. Default (only if auto-detect fails): Linux/Unix/macOS =UTF-8, Windows =cp850π¦--encoding-console-out<name>β character encoding used to encode search results and other output. Encoding name must be known to the Perl Encode module. Default (only if auto-detect fails): Linux/Unix/macOS =UTF-8, Windows =cp850π--encoding-locale<name>β character encoding used to decode command-line arguments. Encoding name must be known to the Perl Encode module. Default (only if auto-detect fails): Linux/Unix/OSX =UTF-8, Windows =cp1252π--encoding-locale-fs<name>β character encoding used to encode file and directory names. Encoding name must be known to the Perl Encode module. Default (only if auto-detect fails): Linux/Unix/macOS =UTF-8, Windows =cp1252π--encoding-webrequest<name>β character encoding used to encode commands sent from Web PVR. Encoding name must be known to the Perl Encode module. Default =UTF-8π--index-maxconn<number>β maximum number of connections to use for concurrent programme indexing. Default:5, Min:1, Max:10π₯--release-checkβ forces a check for a new release if you use it on the command line. If it's saved in preferences instead, it checks for a new release weekly π--throttle<Mb/s>β bandwidth limit (in Mb/s) for media file download. Default: unlimited. Synonym:--bwπ
π Deprecated Options π
--no-index-concurrentβ do not use concurrent indexing to update the programme cache. Lowkey a warning bestie: cache updates will be very slow. like, painfully slow π
π AUTHOR π
get_iplayer was written by Phil Lewis <iplayer2 (at sign) linuxcentre.net> and is now maintained by the contributors at https://github.com/get-iplayer/get_iplayer
This manual page was originally written by Jonathan Wiltshire <jmw@debian.org> for the Debian project (but may be used by others).
π COPYRIGHT NOTICE π
get_iplayer v3.36
Copyright (C) 2008-2010 Phil Lewis, 2010- get_iplayer contributors
This program comes with ABSOLUTELY NO WARRANTY; for details use --warranty.
This is free software, and you are welcome to redistribute it under certain
conditions; use --conditions for details.
and that's a wrap on the whole page bestie π this lil' manual is from get_iplayer v3.36, dated May 2025, and it's page GET_IPLAYER(1) β go forth and download responsibly, mwah π
β¨
π¦ where this page comes from
- fedora 43: get_iplayer 3.36-2.fc43 Β· GPL-3.0-or-later
- fedora 44: get_iplayer 3.36-3.fc44 Β· GPL-3.0-or-later
- nixpkgs unstable: perl5.42.3-get_iplayer 3.36
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms