vimeo-dl ========
A tool to download Vimeo videos when you have access to their JSON playback manifest.
Usage
vimeo-dl --combine -i "${MASTER_JSON_URL}"
The input must be a master.json or playlist.json playback manifest URL,
including any signed query string. A Vimeo video page URL or an HLS .m3u8
URL cannot be used as input. If the JSON manifest uses path-like init segments,
request it with base64_init=1. If multiple segments resolve to the same media
URL, request it with query_string_ranges=1. Quote the URL in the shell so &
stays inside the argument. Signed manifest URLs can expire; obtain a fresh one
if the request returns an HTTP error. The tool does not print signed media URLs.
On filesystems with POSIX permissions, downloaded media is readable only by the
current user.
Advanced Usage
# Download a video as ${clip_id}-video.mp4 (1080p).
The highest bitrate track is automatically selected.
vimeo-dl -i "https://skyfire.vimeocdn.com/xxx/yyy/live-archive/video/240p,360p,540p,720p,1080p/master.json?base64_init=1&query_string_ranges=1"
# Download a video as ${clip_id}-video.mp4 (720p) with the specified user-agent.
vimeo-dl -i "https://skyfire.vimeocdn.com/xxx/yyy/live-archive/video/240p,360p,540p,720p,1080p/master.json?base64_init=1&query_string_ranges=1" \
--video-id "720p" \
--user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
you can use jq command to list available formats associated ids (https://jqlang.org)
curl -s $URL | jq '[.video[] | {id, height, width, codecs}] | sort_by(.height)'
# Download a video as ${clip_id}.mp4.
vimeo-dl -i "https://8vod-adaptive.akamaized.net/xxx/yyy/sep/video/9f88d1ff,b83d0f9d,da44206b,f34fd50d,f9ebc26f/master.json?base64_init=1" \
--video-id "b83d0f9d" \
--audio-id "b83d0f9d" \
--combine
Download a video as my-video-file-name.mp4.
vimeo-dl -i "https://8vod-adaptive.akamaized.net/xxx/yyy/sep/video/9f88d1ff,b83d0f9d,da44206b,f34fd50d,f9ebc26f/master.json?base64_init=1" \
--video-id "b83d0f9d" \
--audio-id "b83d0f9d" \
--combine \
--output-file-name "my-video-file-name"
The combine option is equivalent to the following command.
vimeo-dl -i "https://8vod-adaptive.akamaized.net/xxx/yyy/sep/video/9f88d1ff,b83d0f9d,da44206b,f34fd50d,f9ebc26f/master.json?base64_init=1" \
--video-id "b83d0f9d" \
--audio-id "b83d0f9d"
ffmpeg -i ${clip_id}-video.mp4 -i ${clip_id}-audio.mp4 -c copy ${clip_id}.mp4
Options
Usage:
vimeo-dl [flags]
Flags:
--audio-id string audio id
--combine combine video and audio into a single mp4 (ffmpeg is required)
-h, --help help for vimeo-dl
-i, --input string url for master.json or playlist.json (required)
-o, --output-file-name string output file name
--user-agent string user-agent for request
-v, --version version for vimeo-dl
--video-id string video id
Install
Installing or building from source requires the Go version specified in .go-version or newer.
Pre-compiled binaries
Currently, Windows, macOS and linux are supported.
- Download the latest release from the release page.
- Extract the downloaded
.tar.gzfile.
go install
go install github.com/akiomik/vimeo-dl@latest
Build
make build
Test
make test
Docker
Using Docker images is useful if you do not have ffmpeg installed.
Build docker image:
# build docker image (with ffmpeg)
docker build -t vimeo-dl .
build docker image without ffpeg
docker build -t vimeo-dl:no-ffmpeg --target=no-ffmpeg .
Use docker image (instead of the binary):
docker run -v "$(pwd)/downloads:/downloads" vimeo-dl ...