Skip to content

keanucz/AdobeConnectDL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

16 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AdobeConnectDL logo

AdobeConnectDL

GitHub release Build Test Lint License

This is a Go CLI (using Cobra) that automatically grabs the MP4 and VTT URLs from an Adobe Connect recording page, downloads them, merges everything together, and also spits out a nice .txt transcript and other metadata alongside the recording.

I wrote this because my university uses Adobe Connect to host lectures and store recordings, and for some reason you can only view recordings online, not download them. Given that I'm sometimes in places with no Internet access or terrible connectivity, I built this tool to solve my own (and my fellow students') woes so we can watch our lectures anywhere, any time.

โœจ What it does

For each Adobe Connect recording URL you give it, AdobeConnectDL will:

  • ๐Ÿ”ป Locate the backing MP4 and subtitle (VTT) URLs from the recording page
  • ๐Ÿ“ฅ Download the recording and subtitles
  • ๐ŸŽ›๏ธ Embed subtitles into the video
  • ๐Ÿ—‚๏ธ Extract and save:
    • Transcript (transcript.txt)
    • Chat log (chat_log.txt)
    • Captions (captions.vtt)
    • Attached documents (plus a documents.txt index)
    • Metadata (metadata.json)
  • ๐Ÿ“ Put everything into a neatly named directory for that recording

๐Ÿš€ Usage

  1. Download the binary

    Grab the binary from the releases page for your platform. โฌ‡๏ธ

    I've embedded a copy of MP4Box for most platforms, so you shouldn't need to install any external dependencies.

    macOS users: See Running on macOS below for instructions on running unsigned binaries.

  2. Open the recordings list

    For any lecture you want to download, go to the Adobe Connect recordings page (pictured below):

    Screenshot of meeting recordings list page

  3. CRUCIAL STEP: open the specific recording

    Click on the recording you want to download.

    In your browserโ€™s URL bar you should see something like:

    https://your-domain.adobeconnect.com/recording-id/?session=YOUR_SESSION_TOKEN
    

    This is the URL you need to pass to adobeconnectdl.
    (If you use the generic list page URL instead, the tool wonโ€™t work.)

    Screenshot of lecture recording page

  4. Run adobeconnectdl

    Feed the recording URL into the CLI and let it do its thing:

     โฏ adobeconnectdl download "<https://acme.adobeconnect.com/p1a2b3c4d5e6/?&session=xyz123sessiontoken>"
    
     โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
     โ”‚  ๐ŸŽฌ adobeconnectdl dev               โ”‚
     โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
    
     INFO starting batch download count=1
     INFO MP4Box located path=/usr/local/bin/MP4Box
     INFO download pool started workers=12
     INFO processing recording 1/1 url="<https://acme.adobeconnect.com/p1a2b3c4d5e6/?&session=xyz123sessiontoken>"
     INFO downloading recording data via pool url="<https://acme.adobeconnect.com/p1a2b3c4d5e6/output/p1a2b3c4d5e6.zip?download=zip>"
     INFO downloading video via pool url="<https://cdn1.adobeconnect.com/static/recordings/10/123456789/9876543210?connect-return-url=https%3A%2F%2Facme.adobeconnect.com%2Fsystem%2Ferror-cas&key=AbCdEfGhIjKlMnOpQrStUvWxYz%3D&param1=abc123xyz789&recording-version=1&ts=1765369691&sign=ZYXwVuTsRqPoNmLkJiHgFeDcBa%3D>"
     INFO video download: 5% (16.4/328.0 MB) recording=1/1
     INFO video download: 10% (32.8/328.0 MB) recording=1/1
     INFO video download: 15% (49.2/328.0 MB) recording=1/1
     INFO video download: 20% (65.6/328.0 MB) recording=1/1
     INFO video download: 25% (82.0/328.0 MB) recording=1/1
     INFO video download: 30% (98.4/328.0 MB) recording=1/1
     INFO video download: 35% (114.8/328.0 MB) recording=1/1
     INFO video download: 40% (131.2/328.0 MB) recording=1/1
     INFO video download: 45% (147.6/328.0 MB) recording=1/1
     INFO video download: 50% (164.0/328.0 MB) recording=1/1
     INFO video download: 55% (180.4/328.0 MB) recording=1/1
     INFO video download: 60% (196.8/328.0 MB) recording=1/1
     INFO video download: 65% (213.2/328.0 MB) recording=1/1
     INFO video download: 70% (229.6/328.0 MB) recording=1/1
     INFO video download: 75% (246.0/328.0 MB) recording=1/1
     INFO video download: 80% (262.4/328.0 MB) recording=1/1
     INFO video download: 85% (278.8/328.0 MB) recording=1/1
     INFO video download: 90% (295.2/328.0 MB) recording=1/1
     INFO video download: 95% (311.6/328.0 MB) recording=1/1
     INFO video download: 100% (328.0/328.0 MB) recording=1/1
     INFO downloaded path=.p1a2b3c4d5e6_temp.zip bytes=1048576
     INFO extracting zip path="C:\Users\demo\Documents\Projects\AdobeConnectDL\Course ABC123 - Cohort X_0\raw.zip"
     INFO zip extracted path="C:\Users\demo\Documents\Projects\AdobeConnectDL\Course ABC123 - Cohort X_0\raw"
     INFO downloading documents via pool count=5
     INFO downloading documents via pool count=5
     INFO downloaded path=links.txt bytes=512
     INFO downloaded path="ABC123_L12_Notes.pdf" bytes=450000
     INFO downloaded path="ABC123_L12_Slides.pdf" bytes=475000
     INFO downloaded path="ABC123_Reading_Pack.pdf" bytes=610000
     INFO downloaded path="ABC123_L12_Activity.pptx" bytes=4470000
     INFO downloaded path=.p1a2b3c4d5e6_temp.mp4 bytes=343597383
     INFO embedding subtitles path="C:\Users\demo\Documents\Projects\AdobeConnectDL\Course ABC123 - Cohort X_0\captions.vtt"
     INFO subtitles embedded successfully
     INFO download complete title="Course ABC123 - Cohort X_0" location="C:\Users\demo\Documents\Projects\AdobeConnectDL\Course ABC123 - Cohort X_0"
     INFO video saved path="C:\Users\demo\Documents\Projects\AdobeConnectDL\Course ABC123 - Cohort X_0\recording.mp4"
    
     โœ“ Saved recording "Course ABC123 - Cohort X_0" to C:\Users\demo\Documents\Projects\AdobeConnectDL\Course ABC123 - Cohort X_0
    
     โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”
     Download Summary: 1 successful, 0 failed
    
     ๐Ÿ“Š Download Statistics:
       Total batch time: 17.359s
     INFO download pool stopped completed=7 failed=0

๐Ÿ“ฆ Outputs at a glance

For each recording, you'll typically get a directory like:

  • ๐ŸŽฅ recording.mp4 โ€“ the final MP4 with subtitles baked in
  • ๐Ÿ’ฌ captions.vtt โ€“ raw subtitles
  • ๐Ÿ“ transcript.txt โ€“ plain-text transcript
  • ๐Ÿ—จ๏ธ chat_log.txt โ€“ chat window contents with names & timestamps
  • ๐Ÿ“„ documents/ โ€“ any attached documents from the session
  • ๐Ÿ“‘ documents.txt โ€“ quick index of attached documents
  • ๐Ÿงพ metadata.json โ€“ assorted recording metadata
  • ๐Ÿ” raw.zip / raw/ โ€“ original Adobe Connect assets (FLV/XML etc.), if you want to poke at them

๐ŸŽ Running on macOS (unsigned binary)

With Apple Silicon, macOS became much stricter about running unsigned binaries. Since AdobeConnectDL is not signed & notarised with an Apple Developer certificate, macOS will block execution by default.

If you try to run the binary, you'll see an error like:

macOS warning: Apple could not verify binary is free of malware

Apple could not verify "adobeconnectdl" is free of malware that may harm your Mac or compromise your privacy

Instead of offering any help, macOS simply offers to move the binary to the trash. Very frustrating!

Option 1: Add Terminal as a Developer Tool (Recommended)

The cleanest solution is to add Terminal (or your favourite TTY) as a system Developer Tool. This allows it to run any unsigned binary without issues.

Step 1: Open System Settings and search for "developer". Click Allow applications to use developer tools in the sidebar. If Terminal is not listed, click the + button:

System Settings showing Allow applications to use developer tools with plus button

Step 2: Search for Terminal in the file dialog and select it:

File chooser searching for Terminal

Step 3: Ensure the toggle next to Terminal is enabled:

Toggle to enable Terminal in developer tools

Step 4: Restart Terminal and everything should now work:

Terminal showing successful execution

You can now run any unsigned binary from Terminal without issues!

Screenshots & text courtesy of Jesse Donat (CC BY-SA 3.0)

Option 2: Remove Quarantine Attribute

If you prefer not to enable developer tools globally, you can remove the quarantine attribute from the binary:

# Remove quarantine from the binary
xattr -dr com.apple.quarantine /path/to/adobeconnectdl

# Optional: self-sign the binary
codesign -s - --deep --force /path/to/adobeconnectdl

Option 3: Right-Click Open (GUI approach)

  1. Go to Finder > Applications (or wherever you placed the binary)
  2. Right-click on adobeconnectdl and choose Open from the context menu
  3. In the dialog, click Open
  4. On macOS 15 (Sequoia) and above, you may also need to go to System Settings > Privacy & Security and click Open Anyway

After any of these steps, the binary should work normally.

โšก Download Options

AdobeConnectDL uses Go's native HTTP client with concurrent downloads enabled by default for optimal performance. I ran some benchmarks and apparently 12 concurrent workers achieve the best throughput irregardless of network speed. (I also tried testing aria2/curl/wget and the difference between all of them was marginal, with aria2 coming close to native performance).

Concurrent vs Sequential Downloads

By default, AdobeConnectDL downloads the MP4, ZIP, and all documents concurrently using 12 workers:

# Concurrent download (default, fastest)
adobeconnectdl download "https://..."

# Sequential download (one file at a time)
adobeconnectdl download --sequential "https://..."

Overwrite Existing Files

By default, the tool will prompt before overwriting existing directories. Use -y to skip the prompt:

# Overwrite without prompting
adobeconnectdl download -y "https://..."

๐Ÿง  Technical details (under the hood)

There are basically two ways to download Adobe Connect recordings:

  1. Direct MP4 & VTT extraction (what AdobeConnectDL uses)
    Parse the lecture recording HTML/JavaScript, pull out the MP4 and VTT URLs, and download them directly.

  2. โ€œRaw assetsโ€ ZIP + reconstruction (the painful way)
    Download a ZIP file containing all the original Flash Video (FLV) chunks and XML files, then try to reconstruct the timeline from that.

I originally explored option 2 (and so did Codex). It turns out that trying to combine several randomly ordered FLV files into a single mp4 is... not fun.

However, that ZIP does contain some useful extra data: the transcript with unanonymised names and timestamps for the chat window, plus various session metadata and attachments. Thatโ€™s why the tool still downloads and keeps those raw assets, as theyโ€™re handy for preserving captions, chat logs, transcripts, attached documents, and so on.

Since Adobe Connect already provides an MP4 stored in S3 anyway, I found it far easier to:

  • Use the MP4 as the canonical recording
  • Pull subtitles, chat logs, transcripts, and documents from the raw assets
  • Embed the subtitles into the MP4

This gives you a single, portable video file plus all the sidecar data you might want for later processing or archival.

About

Utility that enables you to download one or more Adobe Connect recordings & associated metadata

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 2

  •  
  •