Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: YTPics – Download pictures from YouTube videos (ytpics.com)
134 points by web0_cc 10 months ago | hide | past | favorite | 39 comments
Lack of yt-dlp+ffmpeg and screenshots' limited size on my mobile phone prompted me to build a simple tool to download pictures from YouTube videos. Check it out. hope you guys find it useful



I have extracted frames with vlc before before. They always look like shit. Like with a lower resolution. Why? Like if you freeze a youtube video the pic looks clean.


If you use ffmpeg with png you will get sharper images. I was trying to extract a numberplate once and this worked out best.


I think that's just VLC being VLC, or maybe VLC's youtube support doesn't get the high quality streams. When I play youtube videos with mpv (which uses yt-dlp), 's' to snapshot produces clean images.


During streaming, lower res image frames are sent, to avoid buffering as much as possible, depending on your internet speed the res increases or decreases

When you stop the frame, the video can download the highest res version without any problem, so you get crystal clear glimpse when paused, but blurry images when film is rolling.


> When you stop the frame, the video can download the highest res version without any problem, so you get crystal clear glimpse when paused, but blurry images when film is rolling.

If this were the case, when the player is paused and the "higher resolution frame" downloaded, there would be a discernable delay due to network and download latency, which I'm 100% certain is not the case. Pause any YT video and it is instantaneous with no perceivable delay or jank.

Edit: @teitoklien thank you for the correction about Adaptive Bitrate Streaming, I've removed this part of my reply so as to not spread misinformation. Sorry for any confusion!


Um, no. You are wrong

Look into Adaptive Bitrate Streaming [0]. From what I’ve read HLS does work this way, when combined with Adaptive Bitrate streaming, the segment files are swapped midway depending on user device and connection quality (with each video segment being kept encoded at various qualities to change between as connection quality varies)

The screenshot thing is a fair question tho, why pausing leads to higher res. I think some players, do it custom, for User Experience, so that they can produce clean screenshots on pausing. I’ve seen YouTube do it for sure.

But for you’re main point, you’re objectively wrong, adaptive bit rates and swappable segment files are a thing.

Edit: (Don’t worry about it, being wrong is good hehe, i was wrong 7 times today while doing my work, helped me learn new things 3 out of those times, you helped me question myself and look back at my knowledge too, it’s been dusty for a while. Have a great day!)

[0] https://en.m.wikipedia.org/wiki/Adaptive_bitrate_streaming


It's basically an optical illusion. When things are in motion, your brain is better at ignoring the compression artifacts. When they're still, they're glaringly obvious.


parent comment specifically said that when frozen in player it looks clean


By "pictures" does this mean individual frames? FYI on desktop using an up to date Chrome, you can right click twice – slowly, not a double-click – and choose "Save video frame as..." (on macOS, at least)


Still helps to know that you have a consistent way of doing it, especially if you do it a lot.


Thats true. its for mobile devices which lack desktop browser features and extentsions


Also works on Windows, Firefox (labeled as "Take Snapshot" though)



I giggled at "This extension does not contain any malicious or tracking code. No viruses. No ads. Only good software.". If only everybody added this statement we would not have malicious addons.


A one line combination of YouTube-dl and ffmpeg can do this btw (without downloading the whole video)


This would be a good place to share that one line.


yt-dlp ${youtube_video_url} --get-url

ffmpeg -ss ${seconds} -i "${first_url_from_yt-dlp}" -t 1 -r 4/1 -q:v 2 -vf scale="0:-1" ${target}

-r 4/1: 4 frames per second

Again this app is for mobile devices which lack yt-dlp+ffmpeg


Nice, if you install termux (from fdroid) you can run it directly on your android.


Is it possible to get one screenshot from different periods of the same video like 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80% with just one command.

If yes, could you please share for me here, it'd be really helpful, thanks


Does this really not download the whole video? I havent checked but im just surprised that it's possible


No it doesn't. FFMPEG can seek video directly without loading all the content, even for Dash/HLS (but in this case yt-dlp typically returns a plain HTTP source, which I assume internally FFMPEG uses HTTP header range to seek?)

Keep in mind you need to make sure to use input seeking, though (-ss before -i).

Also I'm not sure why they need `-vf scale="0:-1"` part.


I was gonna say that realistically your one liner is gonna need to be ran probably 20, 30 times before you’re able to pick the exact frame that you want.

But with a little bit extra work you could make that one liner into a script that will extract a range of frames surrounding the chosen timestamp.


I use this ff add-on which adds a handy button direct to the player itself: https://github.com/gurumukhi/youtube-screenshot

looks like it just renders the current frame to a canvas element and saves it. https://github.com/gurumukhi/youtube-screenshot/blob/master/...


This is exactly the kind of thing I need for grabbing images for my Finnish news backup and studying site. Thank you!


Very cool. Just curious, is this legal? I would assume the legality falls on the user of the service?


Is taking screenshots of a paused YouTube video illegal?


Certain rights-holders want us believe that taking screenshots at 24Hz is illegal (see: youtube-dl takedowns)


Do any armchair lawyers (I know, I get what I pay for) want to chime in on the legality of creating user-definable 3-5 second gifs of YouTube videos, which link back to the video in question, for an online video curation library thing?


I mean, you will almost certainly be in a constant state of creating material in violation or copyright. Depending on the details of any specific copyright violation, it may be protected by Fair-use, and the length and lack of audio will likely help in your favor. But you'd have to defend those cases individually in court to even begin to make a fair-use argument. And I dont see how you could ever win any blanket decision in your favor.

With a good DMCA takedown story and compliance, you could potentially claim the copyright is responsibility of your users. And maybe you'll be too small, and the content, in general you are making too inconsequential, or even helpful (marketing wise) for anyone to care. But this is definitely be a project I would get a proper legal analysis of and have clear procedures and plans in place for any issues that may show up.


I tend to use VLC for this. http://www.videolan.org/


How is that done ?


VLC has the option to “Take Snapshot” and it can play online media. This is unless I'm missing something very obvious!


In the description it says app is for mobile devices



It’s nowhere near as powerful though, and I don’t think it can do this particular task.


It is a full port of VLC so it should be able to handle this task. You're probably referring to the frontend which differs from the ones used on desktop but that does not mean the functionality is not available. It is, you just access it differently. Either enable the 'Take a screenshot' option (Controls Settings -> Take a screenshot) and use that or send an intent to do so. The former works while watching videos, the latter makes it possible to automate this task from within termux, Tasker or Automagic.

You can also just install vlc in termux and use the command line interface:

   ~ $ apt search vlc
   Sorting... Done
   Full Text Search... Done
   vlc/stable 3.0.18-7 aarch64
     A popular libre and open source media player and multimedia engine

   vlc-qt/x11 3.0.18-7 aarch64
     A popular libre and open source media player and multimedia engine

   vlc-qt-static/x11 3.0.18-7 aarch64
     Static libraries for vlc-qt

   vlc-static/stable 3.0.18-7 aarch64
     Static libraries for vlc


My bad; I'm sorry for jumping into conclusions.


It would be neat if your UI let you step through frames (visually) to find the exact one you want.


Just works, no complaints from me




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: