Subject: bug#43418: ffprobe/avprobe and ffmpeg/avconv should be added as dependencies of youtube-dl so it will function correctly

From: Mark H Weaver <[email-masked]>
Date: Wed, 16 Sep 2020 04:14:36 -0400

Leo Famulari <[email-masked]> writes:

> On Tue, Sep 15, 2020 at 02:06:11PM +0200, Tobias Geerinckx-Rice via Bug reports for GNU Guix wrote:
>> Matters would be different if the error message were less clear, or perhaps
>> if ffmpeg weren't so insanely great:
>> 
>>  λ guix size youtube-dl | tail -n1
>>  total: 186.9 MiB
>>  λ guix size youtube-dl ffmpeg | tail -n1
>>  total: 811.2 MiB
>
> I wonder, should we expect FFmpeg to already be referenced by somebody's
> profile if they are using youtube-dl? VLC and mpv both depend on FFmpeg.
> The use case of "download video and watch it on another machine (or
> never watch it)" seems somewhat esoteric.

I was just about to disagree with you, on the grounds that GStreamer,
and in particular Totem (a.k.a. GNOME Videos) does not depend on FFmpeg.
It is, in fact, possible to watch videos downloaded using 'youtube-dl',
with only gst-plugins-{base,good} installed, provided that you request
freedom-respecting formats like VP9 and Opus.

How to request freedom-respecting formats?  Unfortunately, the obvious
"--prefer-free-formats" usually doesn't work in my experience, but you
can run "youtube-dl -F <URL>" to see a list of available formats, and
then something like "youtube-dl -f 247+251 <URL>" (for non-live youtube
videos of sufficient resolution) to download VP9 and Opus and combine
them into a file.

However, in my recent experience, youtube usually provides the
freedom-respecting formats only as separate audio and video streams
which must be recombined by youtube-dl, and in that case the 'ffmpeg'
command line tool seems to be required.

So, ultimately I tend to agree with Leo that 'youtube-dl' is unlikely to
be useful without 'ffmpeg', and therefore it might as well depend on it
somehow.

I see two possible approaches: ffmpeg could be added to youtube-dl's
propagated-inputs, or it could be instead be added to 'inputs', and we
could substitute hardcoded paths to 'ffmpeg' in the built 'youtube-dl'.
I generally tend to favor the latter approach, but there are valid
arguments for each approach and I don't feel strongly about it.

What do you think?

       Mark