Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to extract a video snippet from a video file that is being written in by ffmpeg in realtime

At the moment i am recording a LIVE stream video from youtube with youtube-dl (https://github.com/rg3/youtube-dl)

The command i use for this:

youtube-dl --id -f 92 https://www.youtube.com/watch?v=VYlQJbsVs48

92 is a format code that i got after executing a command to get the formats, that gave me this list:

format code  extension  resolution note
140          m4a        audio only DASH audio  144k , m4a_dash container, aac  @128k (48000Hz)
141          m4a        audio only DASH audio  272k , m4a_dash container, aac  @256k (48000Hz)
160          mp4        256x144    DASH video  124k , 15fps, video only
133          mp4        426x240    DASH video  258k , 30fps, video only
134          mp4        640x360    DASH video  616k , 30fps, video only
135          mp4        854x480    DASH video 1116k , 30fps, video only
136          mp4        1280x720   DASH video 2216k , 30fps, video only
137          mp4        1920x1080  DASH video 4141k , 30fps, video only
151          mp4        72p        HLS
132          mp4        240p       HLS
92           mp4        240p       HLS
93           mp4        360p       HLS
94           mp4        480p       HLS
95           mp4        720p       HLS
96           mp4        1080p      HLS  (best)

This is creating a file called VYlQJbsVs48.mp4.part that gets bigger and bigger of course.

Is there a way to extract a video snippet from that live stream or form the part file? Or maybe there is a better way of doing this?

What i have noticed is that if i force quit iTerm2 while youtube-dl is running the .part file it creates wont contain any index information (something to do with an moov atom not being present in the mp4 file - which is the information about the number of frames and other things - metadata i think), so it makes me think i cannot extract from the file.

Maybe if there would be a way that youtube-dl can write the index information at all times or maybe another way that i can record the live stream and get video snippets while its recording.

I forgot to mention i am doing this on OSX Yosemite. I have FFMPEG installed with homebrew and youtoube-dl

I am more than happy to try stuff on UBUNTU if there is a solution.

Any help would be greatly appreciated.

Thank you.

Alex

like image 862
alex.b Avatar asked Feb 26 '15 12:02

alex.b


1 Answers

This command will extract a 5 second snippet:

ffmpeg -i $(youtube-dl -f 92 -g https://www.youtube.com/watch?v=36YnV9STBqc) -c:v copy -c:a copy -t 00:00:05 snippet.mp4

With the -g option, youtube-dl only outputs the video stream URL.

Tested with ffmpeg 4.3, youtube-dl 2020.07.28 and a Youtube radio live stream.

Reference: superuser

like image 58
Pamphile Avatar answered Oct 24 '22 06:10

Pamphile