ytdl-org / youtube-dl

Command-line program to download videos from YouTube.com and other video sites
http://ytdl-org.github.io/youtube-dl/
The Unlicense
132.41k stars 10.04k forks source link

Add support for rumble.com #10785

Open jegue opened 8 years ago

jegue commented 8 years ago

Please follow the guide below


Make sure you are using the latest version: run youtube-dl --version and ensure your version is 2016.09.27. If it's not read this FAQ entry and update. Issues with outdated version will be rejected.


The following sections concretize particular purposed issues, you can erase any section (the contents between triple ---) not applicable to your issue


If the purpose of this issue is a bug report, site support request or you are not completely sure provide the full verbose output as follows:

Add -v flag to your command line you run youtube-dl with, copy the whole output and insert it here. It should look similar to one below (replace it with your log inserted between triple ```):

$ youtube-dl -v <your command line>
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-v', u'http://www.youtube.com/watch?v=BaW_jenozKcj']
[debug] Encodings: locale cp1251, fs mbcs, out cp866, pref cp1251
[debug] youtube-dl version 2016.09.27
[debug] Python version 2.7.11 - Windows-2003Server-5.2.3790-SP2
[debug] exe versions: ffmpeg N-75573-g1d0487f, ffprobe N-75573-g1d0487f, rtmpdump 2.4
[debug] Proxy map: {}
...
<end of log>

If the purpose of this issue is a site support request please provide all kinds of example URLs support for which should be included (replace following example URLs by yours):


Description of your issue, suggested solution and other information

Explanation of your issue in arbitrary form goes here. Please make sure the description is worded well enough to be understood. Provide as much context and examples as possible. If work on your issue requires account credentials please provide them or explain how one can obtain them.

yan12125 commented 8 years ago

Please paste at least one video URL.

yan12125 commented 8 years ago

Closing as no response for a long time.

the-real-cyberpatrol commented 4 years ago

Please, reopen this bug.

It would be nice if rumble.com would be supported. It's still not supported by youtube-dl 2020.09.20.

Here are two video URLs: https://rumble.com/vanu5z-polizei-strmt-unser-dinner.html https://rumble.com/vank3h-lneburg-livestream-polizei-besteht-auf-masken-aber-nur-im-stehen..html

And here are the embedded iframe urls for the videos in the same order: https://rumble.com/embed/v81nzb/?pub=4 https://rumble.com/embed/v81dwt/?pub=4

Those videos have been live streams made by Samuel Eckert on the Corona Info Tour (kind of a demonstration tour) he's doing together with Dr. Bodo Schiffmann and Wolfgang Greulich through Germany, Switzerland and Austria. They use rumble.com as a replacement for YouTube due to YouTube's censorship. So there's no copyright infringement.

Both videos can be played perfectly in a browser at least with Firefox.

Earnestly commented 3 years ago

Could this issue be reopened?

remitamine commented 3 years ago

22791 depends on this.

answerquest commented 3 years ago

Seems to be working now (version 2020.12.05) - instead of the page url I put in the embed iframe url. Also gave me options

youtube-dl -F https://rumble.com/embed/[[ID]]/?pub=4
[RumbleEmbed] [[D]]: Downloading JSON metadata
[info] Available formats for [[ID]]:
format code  extension  resolution note
mp4-240p     mp4        240p        200k 
mp4-360p     mp4        360p        409k 
mp4-480p     mp4        480p        587k 
webm-480p    webm       480p        739k  (best)

Thanks youtube-dl!

Earnestly commented 3 years ago

If embed urls works then a possible way of extracting it could look like this:

curl -s https://rumble.com/vbgwka-dog-think-shes-covering-her-food.html \
    | xmllint --html --xpath 'string(//script[@type="application/ld+json"])' - 2> /dev/null \
    | jq -r '.[0].embedUrl'
# => https://rumble.com/embed/v8uqdm/

I think youtube-dl may have general capabilities to extract json from webpages from tags like this.

nick-s-b commented 3 years ago

It definitely does not work. It can't even recognize pages:

$ youtube-dl -f https://rumble.com/vd1xd5-lazy-latch.html
Usage: youtube-dl [OPTIONS] URL [URL...]

youtube-dl: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.
the-real-cyberpatrol commented 3 years ago

It definitely does not work. It can't even recognize pages:

It does work, but only with the embedded links so far. So when you go on the page click the button "EMBED" below the video and copy&paste the "Embed IFRAME URL".

It would indeed be nice if it would work with the normal URL, too.

dsblack commented 3 years ago

As others have mentioned, only the "embed" links work so far. It would be nice if the video url could look up the embed url automatically (if that's how the download is going to work).

It looks like short urls redirect properly -- https://rumble.com/vd9yyx gets forwarded and resolves to https://rumble.com/vd9yyx-scuba-diver-meets-gigantic-manta-ray-up-close-in-galapagos-silands.html within youtube-dl, which is good.

I was hoping I could just use the url with the short code (here, the "vd9yyx") and add "/embed" in the middle -- but the short code for the video page ends up being different from the short code in the embed link. This one is "vanss9" -- i.e., "https://rumble.com/embed/vanss9" for the shortest working embed url I could find.

I don't think playlists exist on rumble yet, though I know they're working on a lot of new features right now.

It might also be nice in the future if it would support downloading all videos from a channel, which is a type of list, e.g.: https://rumble.com/c/WildCreatures

Maybe also search result lists, though maybe that would be problematic for the quantity of results -- but maybe that's the user's problem. Anyway, example: https://rumble.com/search/video?q=whale%20shark

Note that I personally don't really need either of those in the near future; it's just a suggestion that may be useful eventually.

Earnestly commented 3 years ago

In case it was missed I have tried to provide an example of how the embedded url can be extracted: https://github.com/ytdl-org/youtube-dl/issues/10785#issuecomment-741973114

The main difference would be converting that xpath and json query into python equivalents.

I haven't yet looked into channels or search results but they appear to be relatively easy.


Edit: This is enough for the time being to fetch rumble channel or search result links from which the embedded link can be extracted:

curl -s 'channel or search results link' \
    | xmllint --html --xpath '//article[@class = "video-item"]/a/@href' - 2> /dev/null \
    | sed -n 's/ href="\([^"]\{0,\}\)"$/https:\/\/rumble.com\1/p'

PS: xmllint only supports XPath 1.0 which is why I resorted to sed. Hopefully someone who knows the code can find it useful when porting to python.

aenchevich commented 3 years ago

(Even) Embed URLs do not work.

The rumble page URL is: https://rumble.com/veg3uf-canadian-doctors-speak-out.html The embed URL is: https://rumble.com/embed/vbtxob/

$ youtube-dl https://rumble.com/embed/vbtxob/ [generic] vbtxob: Requesting header WARNING: Falling back on generic information extractor. [generic] vbtxob: Downloading webpage [generic] vbtxob: Extracting information

$ youtube-dl --version 2020.03.24

remitamine commented 3 years ago

@aenchevich you're using an outdated version.

dsblack commented 3 years ago

Yep, what @remitamine said. I just tested with version 2021.02.22 and 2021.03.03, and both worked with the embed urls (but still not the main urls).

aenchevich commented 3 years ago

(Even) Embed URLs do not work.

The rumble page URL is: https://rumble.com/veg3uf-canadian-doctors-speak-out.html The embed URL is: https://rumble.com/embed/vbtxob/

$ youtube-dl https://rumble.com/embed/vbtxob/ [generic] vbtxob: Requesting header WARNING: Falling back on generic information extractor. [generic] vbtxob: Downloading webpage [generic] vbtxob: Extracting information

$ youtube-dl --version 2020.03.24

the-real-cyberpatrol commented 3 years ago

(Even) Embed URLs do not work.

The rumble page URL is: https://rumble.com/veg3uf-canadian-doctors-speak-out.html

The embed URL is: https://rumble.com/embed/vbtxob/

The embed URL is: https://rumble.com/embed/vbtxob/?pub=4 I can download it perfectly with youtube-dl 2021.03.02

You should use the complete URL, not only a part of it. And you should update youtube-dl.

aenchevich commented 3 years ago

Yes, works with the newest version and the full embed URL. Thank you.

clort81 commented 3 years ago

I'd leave it open until youtube-dl can extract the embed URL from the page URL.

ToddAndMargo commented 3 years ago

https://rumble.com/vepb2p-yann-tiersen-comptine-dun-autre-t-guitar-cover-amelie-movie-soundtrack.html

$ youtube-dl https://sp.rmbl.ws/s8/2/r/j/n/E/rjnEb.caa.1.mp4?u=3&b=0

Works

ToddAndMargo commented 3 years ago

To manually find the video address with Firefox, press \<ctrl>\<i>, select the "media"tab, and look for "video":

Screenshot_2021-04-22_09-52-00

the-real-cyberpatrol commented 3 years ago

Or just start playing the video, right click onto the video and click "copy video address" (don't know how it's named exactly in the English version).

In this case it's a lot easier to click "Embed" and copy the "Embed IFRAME URL".

ToddAndMargo commented 3 years ago

On 4/22/21 12:26 PM, the-real-cyberpatrol wrote:

Or just start playing the video, right click onto the video and click "copy video address" (don't know how it's named exactly in the English version).

In this case it's a lot easier to click "Embed" and copy the "Embed IFRAME URL".

That does not work anymore in:

firefox-87.0-12.fc33.x86_64 vivaldi-stable-3.7.2218.55-1.x86_64 waterfox-classic-kpe-2021.03-53.2.x86_64

Right click is ignored. Only left click works.

:'(

ToddAndMargo commented 3 years ago

On 4/22/21 12:26 PM, the-real-cyberpatrol wrote:

Or just start playing the video, right click onto the video and click "copy video address" (don't know how it's named exactly in the English version).

In this case it's a lot easier to click "Embed" and copy the "Embed IFRAME URL".

The right click context menu is still active in

seamonkey-2.53.7-3.fc33.x86_64.rpm

But you can get around it by using in Firefox

ToddAndMargo commented 3 years ago

Hi All,

Figured it out. It is not a json call.

Basically you have to dig out the embedded video url from the original url. On the embedded url page (sans all the other junk), the address to the mp4 (and webm) is given.

I wrote my own downloader. Anyone who want my code is welcome to it. The process it pretty well documented.

-T

dskrad commented 3 years ago

Hi All,

Figured it out. It is not a json call.

Basically you have to dig out the embedded video url from the original url. On the embedded url page (sans all the other junk), the address to the mp4 (and webm) is given.

I wrote my own downloader. Anyone who want my code is welcome to it. The process it pretty well documented.

-T

Please share your downloader. Thanks

Earnestly commented 3 years ago

@dskrad I've already demonstrated two examples of this in the thread above.

ToddAndMargo commented 3 years ago

On 5/19/21 10:11 AM, Earnestly wrote:

@dskrad https://github.com/dskrad I've already demonstrated two examples of this in the thread above.

Since someone has beet me to it, I will just share the basics of what I did.

I program in Raku (Perl 6).

On this video:

https://rumble.com/vepb2p-yann-tiersen-comptine-dun-autre-t-guitar-cover-amelie-movie-soundtrack.html

I first downloaded the entire web site in a variable. with a module I wrote to interface with cURL.

Note that on there is a "content: ' • ' ` (chr 8226)" UTF16 character on one of the lines that terminates the "-o -" tty output with cURL, so I had to save to a file and then read file into the variable.

Once in the variable, I searched for the term "embedUrl" which gives the actual location of the video, sans all the garbage.

<script @.**@.":"VideoObject","name": "The Piano Soundtrack (guitar cover)","playerType":"HTML5","description":"The piano soundtrack (guitar cover) Learn Spanish guitar with one of my guitar courses: Songs for Spanish and Classical Guitar: https://www.thespanishguitarhub.com/book2/ Amazon USA: https://amzn.to/2","thumbnailUrl":"

https://i.rmbl.ws/s8/6/J/3/k/D/J3kDb.4Wpjb.1.jpg","uploadDate":"2021-03-11T15:21:52+00:00",

"duration":"PT00H02M52S","embedUrl":"https://rumble.com/embed/vbxbfr/","url":"https

if $WebPage.contains( "embedUrl" )  {
   if $Debug  { print "entering extract embedded Url\n"; }
   $EmbedAddr  = $WebPage;
   $EmbedAddr ~~ s| .*? "embedUrl" ||;
   $EmbedAddr ~~ s| .*? "http" |http|;
   $EmbedAddr ~~ s| \" .* ||;
   if $Debug  { PrintGreen "EmbedAddr = <$EmbedAddr>\n"; }

   ( $EmbedWebPage, $PageStatus ) = CurlGetWebSite( $EmbedAddr );
   if $PageStatus ne 0  {
      PrintRedErr "$SubName\: error: $EmbedAddr download failed. 

Cowardly exiting. Bummer Dude...\n"; return False; }

if $Debug { PrintBlue "EmbedWebpage = <$EmbedWebPage>\n"; }

       # exit;
} else

The embedded web page is https://rumble.com/embed/vbxbfr/

Then I download the embedded web page and have some fun:

<script type="text/javascript">!function(l,a){function 

d(){return(new Date).getTime()/1e3}var t,r,o,n,i,u,e=

"Rumble",f={F:0};(a=l[e]=l[e]||function(){a..push(arguments)}).=a._||[],f.f={},f.b={};f.f["vbxbfr"]= {"fps":29.97,"w":1920,"h":1080,"u":{"

mp4":{"url":"https:\/\/sp.rmbl.ws\/s8\/2\/J\/3\/k\/D\/J3kDb.caa.1.mp4","meta": ...

I dig out the mp4 and place it into $ClickHere with

if $Debug  { print "$SubName: Entering ClickHere regexes\n"; }
$ClickHere = $EmbedWebPage;
$ClickHere ~~ s| .*? 'mp4":{"url":"' ||;
$ClickHere ~~ s| \" .* ||;
$ClickHere ~~ s:global| \\ ||;
if $Debug  { PrintGreen "$SubName: ClickHere = <$ClickHere>\n"; }
# exit;

The location of the (mp4) video ($ClickHere) is https://sp.rmbl.ws/s8/2/J/3/k/D/J3kDb.caa.1.mp4

Then I dig out the extension (mp4) with:

if $Debug  { print "$SubName: NewFileName extenion extraction\n"; }
$Ext  = $ClickHere;
$Ext ~~ s| .* '.' ||;
if $Debug  { PrintBlue "$SubName: Ext = <$Ext>\n"; }

The Extension ($Ext) is mp4

Then I dig out the name of the video with:

# <head>
# <title>The Piano Soundtrack (guitar cover) - Rumble</title>
$NewFileName = $EmbedWebPage;
$NewFileName ~~ s| '</title' .* ||;
$NewFileName ~~ s| .* "title>"  ||;
if $Debug  { PrintBlue "extracted title <$NewFileName>\n"; }

Then I pull out the spaces from the file name to make cURL happy:

$NewFileName ~~ s:global| " " |_|;
$NewFileName  = $WorkingDir ~ Q[/] ~ $NewFileName ~ Q[.] ~ $Ext;
if $Debug  { PrintGreen "$SubName: NewFileName = <$NewFileName>\n"; }

The name of the video ($NewFileName) is The_PianoSoundtrack(guitarcover)-_Rumble.mp4

So now cURL has all the information it need to download the file and store it where I want.

thpryrchn commented 3 years ago

I wrote a little bash script that gets everything I currently need... Gets the first video of the channel/user if you put that in as the url, otherwise it gets the info for the video that is given. If you put in a 2nd thing in there, it saves a json similar to youtube-dl.

#!/bin/bash
if [[ ! $1 ]]; then
    echo "usage:
    $(basename "$0") https://rumble.com/...... [JSONtoSave]"
    exit 1
fi
RumbleVideo="$(curl -s "$1" \ |
    xmllint --html --xpath '/html/body/main/div/div[2]/div[1]/ol/li/article/a/@href' - 2> /dev/null \
    | sed -n 's/ href="\([^"]\{0,\}\)"$/https:\/\/rumble.com\1/p')"
if [[ $RumbleVideo ]]; then
    echo "Rumble Video: $RumbleVideo"
else
    RumbleVideo="$1"
fi
RumbleMeta="$(curl -s "$RumbleVideo" \
    | xmllint --html --xpath 'string(//script[@type="application/ld+json"])' - 2> /dev/null )"
RumbleEmbed="$( echo "$RumbleMeta" | jq -r '.[0].embedUrl' )"
Rumble_description="$( echo "$RumbleMeta" | jq -r '.[0].description' )"
Rumble_thumbnailUrl="$( echo "$RumbleMeta" | jq -r '.[0].thumbnailUrl' )"
Rumble_name="$( echo "$RumbleMeta" | jq -r '.[0].name' )"

if [[ $RumbleEmbed ]]; then
    tmpscript=$(curl -s "$RumbleEmbed" |  xmllint --html --xpath 'string(//script[@type="text/javascript"])' - 2> /dev/null )
    echo "$tmpscript" > /Temp/javascript.js
    # echo "Test: $test"
    if [[ $(echo "$tmpscript" | grep 'live":true') ]]; then
        echo "Video is LIVE"
        live=true
    else
        live=false
        echo "Video is NOT LIVE"
    fi
    Rumble_HLS="$( echo "$tmpscript" | grep 'hls":{"url":"https:\|"mp4":{"url"' | sed -e 's!.*"hls":{"url":"!!' -e 's!.*"mp4":{"url":"!!' -e 's!.*"1080":{"url":"!!' -e 's!".*!!' -e 's!\\!!g' )"
    # Rumble_HLS="$( curl -s "$RumbleEmbed" | grep 'hls":{"url":"https:\|"mp4":{"url"' )"
    echo "Title: $Rumble_name"
    echo "Description: $Rumble_description"
    echo "Thumbnail Url: $Rumble_thumbnailUrl"
    echo "Rumble Embed Link: $RumbleEmbed"
    echo "Rumble HLS: $Rumble_HLS"

fi

if [[ $2 ]]; then
    jq -n --arg title "$Rumble_name" \
        --arg description "$Rumble_description" \
        --arg thumbnail "$Rumble_thumbnailUrl" \
        --arg fulltitle "$Rumble_name" \
        --arg manifest_url "$Rumble_HLS" \
        --arg webpage_url "$RumbleEmbed" \
        --arg isLive "$live" \
        '{description: $description, thumbnail: $thumbnail, fulltitle: $fulltitle, manifest_url: $manifest_url, webpage_url: $webpage_url, isLive: $isLive }' > "$2"
else
    jq -n --arg title "$Rumble_name" \
        --arg description "$Rumble_description" \
        --arg thumbnail "$Rumble_thumbnailUrl" \
        --arg fulltitle "$Rumble_name" \
        --arg manifest_url "$Rumble_HLS" \
        --arg webpage_url "$RumbleEmbed" \
        --arg isLive "$live" \
        '{description: $description, thumbnail: $thumbnail, fulltitle: $fulltitle, manifest_url: $manifest_url, webpage_url: $webpage_url, isLive: $isLive }'
fi
mayeaux commented 3 years ago

Out of the box youtube-dl doesn't work for me for Rumble. Would love to see it implemented though.

mayeaux commented 3 years ago

I wrote a little bash script that gets everything I currently need... Gets the first video of the channel/user if you put that in as the url, otherwise it gets the info for the video that is given. If you put in a 2nd thing in there, it saves a json similar to youtube-dl.

#!/bin/bash
if [[ ! $1 ]]; then
  echo "usage:
  $(basename "$0") https://rumble.com/...... [JSONtoSave]"
  exit 1
fi
RumbleVideo="$(curl -s "$1" \ |
  xmllint --html --xpath '/html/body/main/div/div[2]/div[1]/ol/li/article/a/@href' - 2> /dev/null \
  | sed -n 's/ href="\([^"]\{0,\}\)"$/https:\/\/rumble.com\1/p')"
if [[ $RumbleVideo ]]; then
  echo "Rumble Video: $RumbleVideo"
else
  RumbleVideo="$1"
fi
RumbleMeta="$(curl -s "$RumbleVideo" \
  | xmllint --html --xpath 'string(//script[@type="application/ld+json"])' - 2> /dev/null )"
RumbleEmbed="$( echo "$RumbleMeta" | jq -r '.[0].embedUrl' )"
Rumble_description="$( echo "$RumbleMeta" | jq -r '.[0].description' )"
Rumble_thumbnailUrl="$( echo "$RumbleMeta" | jq -r '.[0].thumbnailUrl' )"
Rumble_name="$( echo "$RumbleMeta" | jq -r '.[0].name' )"

if [[ $RumbleEmbed ]]; then
  tmpscript=$(curl -s "$RumbleEmbed" |  xmllint --html --xpath 'string(//script[@type="text/javascript"])' - 2> /dev/null )
  echo "$tmpscript" > /Temp/javascript.js
  # echo "Test: $test"
  if [[ $(echo "$tmpscript" | grep 'live":true') ]]; then
      echo "Video is LIVE"
      live=true
  else
      live=false
      echo "Video is NOT LIVE"
  fi
  Rumble_HLS="$( echo "$tmpscript" | grep 'hls":{"url":"https:\|"mp4":{"url"' | sed -e 's!.*"hls":{"url":"!!' -e 's!.*"mp4":{"url":"!!' -e 's!.*"1080":{"url":"!!' -e 's!".*!!' -e 's!\\!!g' )"
  # Rumble_HLS="$( curl -s "$RumbleEmbed" | grep 'hls":{"url":"https:\|"mp4":{"url"' )"
  echo "Title: $Rumble_name"
  echo "Description: $Rumble_description"
  echo "Thumbnail Url: $Rumble_thumbnailUrl"
  echo "Rumble Embed Link: $RumbleEmbed"
  echo "Rumble HLS: $Rumble_HLS"

fi

if [[ $2 ]]; then
  jq -n --arg title "$Rumble_name" \
      --arg description "$Rumble_description" \
      --arg thumbnail "$Rumble_thumbnailUrl" \
      --arg fulltitle "$Rumble_name" \
      --arg manifest_url "$Rumble_HLS" \
      --arg webpage_url "$RumbleEmbed" \
      --arg isLive "$live" \
      '{description: $description, thumbnail: $thumbnail, fulltitle: $fulltitle, manifest_url: $manifest_url, webpage_url: $webpage_url, isLive: $isLive }' > "$2"
else
  jq -n --arg title "$Rumble_name" \
      --arg description "$Rumble_description" \
      --arg thumbnail "$Rumble_thumbnailUrl" \
      --arg fulltitle "$Rumble_name" \
      --arg manifest_url "$Rumble_HLS" \
      --arg webpage_url "$RumbleEmbed" \
      --arg isLive "$live" \
      '{description: $description, thumbnail: $thumbnail, fulltitle: $fulltitle, manifest_url: $manifest_url, webpage_url: $webpage_url, isLive: $isLive }'
fi

Can you include some sample commands?

the-real-cyberpatrol commented 3 years ago

Out of the box youtube-dl doesn't work for me for Rumble. Would love to see it implemented though.

Use the EMBED IFRAME URL.

mayeaux commented 3 years ago

Out of the box youtube-dl doesn't work for me for Rumble. Would love to see it implemented though.

Use the EMBED IFRAME URL.

Why can't the extractor grab the Embed Iframe url, that's the actual fix not me clicking around and other people stumbling over it.

ballsystemlord commented 3 years ago

Rumble doesn't necessary use iframes when embedding videos. See for example: https://americasfrontlinedoctors.org/videos/white-coat-summit-the-one-year-anniversary/

Could we get support for rumble, please? Thanks!

Taipo commented 3 years ago

Why not just have a function that searches for the "embedUrl" in the html of a video page

"embedUrl":"https://rumble.com/embed/abcxyz0/"

mayeaux commented 3 years ago

Why not just have a function that searches for the "embedUrl" in the html of a video page

"embedUrl":"https://rumble.com/embed/abcxyz0/"

Seems like a fine solution to me.

Taipo commented 3 years ago

Would have to aggregate the URLs from the channel pages and the dates from the datetime tag, then search each URL for the embedURL tag.

ballsystemlord commented 3 years ago

I don't mean to kill your enthusiasm, but finding out how to trace embedded URLs back to rumble.com will not help without support in youtube-dl for rumble.com.

ToddAndMargo commented 3 years ago

I am able to do it. I am not sure what the issue is.

ballsystemlord commented 3 years ago

Your missing an antecedent. What is "it"?

BobDodds commented 3 years ago

Get the rumble embedUrl from the html page, which result works as url for youtube-dl:

wget -O- https://rumble.com/vkownr-summit-sessions-the-law-todd-callender-jd-how-to-file-a-criminal-complaint.html | sed -n -E 's/^.*embedUrl...([^"]+).*$/\1/p'

@ballsystemlord

[debug] youtube-dl version 2021.01.08

Sorry, I don't know Python to do the same thing. Could put this in ~/.bashrc ---

rumble-dl() {
 [ -n "$1" ] && for s in $*
  do url=`wget -O- $s | sed -n -E 's/^.*embedUrl...([^"]+).*$/\1/p'`
  [ -n "$url" ] && youtube-dl $url
 done
}

and then

rumble-dl https://rumble.com/vkownr-summit-sessions-the-law-todd-callender-jd-how-to-file-a-criminal-complaint.html

neofutur commented 3 years ago

Get the rumble embedUrl from the html page, which result works as url for youtube-dl:

wget -O- https://rumble.com/vkownr-summit-sessions-the-law-todd-callender-jd-how-to-file-a-criminal-complaint.html | sed -n -E 's/^.*embedUrl...([^"]+).*$/\1/p'

@ballsystemlord

[debug] youtube-dl version 2021.01.08

Sorry, I don't know Python to do the same thing. Could put this in ~/.bashrc ---

rumble-dl() {
 [ -n "$1" ] && for s in $*
  do url=`wget -O- $s | sed -n -E 's/^.*embedUrl...([^"]+).*$/\1/p'`
  [ -n "$url" ] && youtube-dl $url
 done
}

and then

rumble-dl https://rumble.com/vkownr-summit-sessions-the-law-todd-callender-jd-how-to-file-a-criminal-complaint.html

works great here ! thanks for the workaround !

ballsystemlord commented 3 years ago

Yes, that works well.

o6uoq commented 2 years ago

+1

thpryrchn commented 2 years ago

BTW, https://github.com/yt-dlp/yt-dlp is a Port of youtube-dl, but it adds more fixes and features. It has had Rumble support for a while. YouTube-dl needs to backport some of the changes that yt-dlp has. But Hey, I have moved on to yt-dlp. The commands are also backward compatible with Youtube-dl, so you won't have a learning curve.

@o6uoq

ryanthomas-org commented 2 years ago

Noting for the record that while youtube-dl supports the "embed" version of a given URL, this trick does not work for any video that is currently being live-streamed. Thus one cannot use mpv with built-in ytdl hook on an "embed" URL if it's live the way one can on a youtube video.

johndpope commented 2 years ago

nb. if the url for embed on live is https://rumble.com/embed/v1jhm8u/ the corresponding m3u8 live link seems to be v1jhm8u -> 1jhm8u https://rumble.com/live-hls-dvr/1jhm8u/playlist.m3u8 (which you can open with vlc)

Screen Shot 2022-10-07 at 5 05 25 pm