[FFmpeg-user] How to check if a youtube URL is valid before starting download?

Bo Berglund bo.berglund at gmail.com
Wed Jul 7 21:23:48 EEST 2021

On Wed, 7 Jul 2021 09:02:47 -0700, Carl Zwanzig <cpz at tuunq.com> wrote:

>On 7/7/2021 8:48 AM, Bo Berglund wrote:
>> But now I saw a different error I also want to check for, this is when the
>> stream semingly works fine but the video has frozen.
>Does that mean youtube continues to send duplicate frames (which are 
>received w/o error) or that no frames are received at all? The latter could 
>be noticed by watching the process network i/o (no received packets = no 
>received stream).

What happens is that the stream continues unabated but there is only a blue
triangle on the screen.

I downladed such a video and cut it down in size to about 3 minutes
(bluearrow.mp4) and ran the test on that local video just to see what would
Here is the complete result including my test of the exit code of ffmpeg:

$ ffmpeg -i bluearrow.mp4 -vf "freezedetect=n=0.01:d=5" -map 0:v:0 -f null -
ffmpeg version 4.3.2-0york0~18.04 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --prefix=/usr --extra-version='0york0~18.04'
--toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu
--incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl
--disable-stripping --enable-avresample --disable-filter=resample
--enable-gnutls --enable-ladspa --enable-libaom --enable-libass
--enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio
--enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype
--enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack
--enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt
--enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg
--enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr
--enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora
--enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx
--enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2
--enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx
--enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libzimg
--enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883
--enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bluearrow.mp4':
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:03:10.01, start: 0.000000, bitrate: 145 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv,
bt709), 854x480 [SAR 1:1 DAR 427:240], 9 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo,
fltp, 127 kb/s (default)
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
    Stream #0:0(und): Video: wrapped_avframe, yuv420p, 854x480 [SAR 1:1 DAR
427:240], q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc (default)
      handler_name    : VideoHandler
      encoder         : Lavc58.91.100 wrapped_avframe
[freezedetect @ 0x55ce112ce980] lavfi.freezedetect.freeze_start: 0
frame= 5700 fps=940 q=-0.0 Lsize=N/A time=00:03:10.00 bitrate=N/A speed=31.3x
video:2984kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing
overhead: unknown

$ echo $?

Notice that the exit code was 0 ($?) even though the video was frozen regarding
the image.

So now at least ffmpeg did something (while doing so it displayed something like
30x indicating it did the processing at 30 times normal speed.

Yet it did not output a finding of "frozen" or similar.

How is this filter supposed to output a result and what does that result look
I do not want another video, just a verdict that it is frozen or not.

Bo Berglund
Developer in Sweden

More information about the ffmpeg-user mailing list