[FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: Now, make it a Killer-Feature!

Lynne dev at lynne.ee
Fri May 16 03:45:18 EEST 2025


On 16/05/2025 02:39, James Almer wrote:
> On 5/15/2025 9:36 PM, softworkz . wrote:
>>
>>
>>> -----Original Message-----
>>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of 
>>> softworkz .
>>> Sent: Freitag, 16. Mai 2025 02:33
>>> To: FFmpeg development discussions and patches <ffmpeg-devel at ffmpeg.org>
>>> Subject: Re: [FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: Now, 
>>> make it a
>>> Killer-Feature!
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of James
>>> Almer
>>>> Sent: Freitag, 16. Mai 2025 02:28
>>>> To: ffmpeg-devel at ffmpeg.org
>>>> Subject: Re: [FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: Now, 
>>>> make it
>>> a
>>>> Killer-Feature!
>>>>
>>>> On 5/15/2025 9:17 PM, softworkz . wrote:
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of 
>>>>>> Marton
>>>>>> Balint
>>>>>> Sent: Freitag, 16. Mai 2025 02:00
>>>>>> To: FFmpeg development discussions and patches <ffmpeg- 
>>>>>> devel at ffmpeg.org>
>>>>>> Subject: Re: [FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: 
>>>>>> Now, make
>>>> it a
>>>>>> Killer-Feature!
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, 15 May 2025, softworkz . wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> -----Original Message-----
>>>>>>>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
>>> Ramiro
>>>>>> Polla
>>>>>>>> Sent: Donnerstag, 15. Mai 2025 23:50
>>>>>>>> To: ffmpeg-devel at ffmpeg.org
>>>>>>>> Subject: Re: [FFmpeg-devel] [FFmpeg-cvslog] fftools/graphprint: 
>>>>>>>> Now,
>>> make
>>>>>> it a
>>>>>>>> Killer-Feature!
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> On Thu, May 15, 2025 at 11:11 PM softworkz <git at videolan.org> 
>>>>>>>> wrote:
>>>>>>>> [...]
>>>>>>>>> diff --git a/fftools/graph/filelauncher.c
>>> b/fftools/graph/filelauncher.c
>>>>>>>>> new file mode 100644
>>>>>>>>> index 0000000000..45514ca599
>>>>>>>>> --- /dev/null
>>>>>>>>> +++ b/fftools/graph/filelauncher.c
>>>>>>>> [...]
>>>>>>>>> +int ff_open_html_in_browser(const char *html_path)
>>>>>>>>> +{
>>>>>>>>> +    if (!html_path || !*html_path)
>>>>>>>>> +        return -1;
>>>>>>>>> +
>>>>>>>>> +#if defined(_WIN32)
>>>>>>>>> +
>>>>>>>>> +    // --- Windows ---------------------------------
>>>>>>>>> +    {
>>>>>>>>> +        HINSTANCE rc = ShellExecuteA(NULL, "open", html_path, 
>>>>>>>>> NULL,
>>>> NULL,
>>>>>>>> SW_SHOWNORMAL);
>>>>>>>>> +        if ((UINT_PTR)rc <= 32) {
>>>>>>>>> +            // Fallback: system("start ...")
>>>>>>>>> +            char cmd[1024];
>>>>>>>>> +            _snprintf_s(cmd, sizeof(cmd), _TRUNCATE, "start \"\"
>>>> \"%s\"",
>>>>>>>> html_path);
>>>>>>>>> +            if (system(cmd) != 0)
>>>>>>>>> +                return -1;
>>>>>>>>> +        }
>>>>>>>>> +        return 0;
>>>>>>>>> +    }
>>>>>>>>> +
>>>>>>>>> +#elif defined(__APPLE__)
>>>>>>>>> +
>>>>>>>>> +    // --- macOS -----------------------------------
>>>>>>>>> +    {
>>>>>>>>> +        // "open" is the macOS command to open a file/URL with 
>>>>>>>>> the
>>>>>> default
>>>>>>>> application
>>>>>>>>> +        char cmd[1024];
>>>>>>>>> +        snprintf(cmd, sizeof(cmd), "open '%s' 1>/dev/null 2>&1 
>>>>>>>>> &",
>>>>>>>> html_path);
>>>>>>>>> +        if (system(cmd) != 0)
>>>>>>>>> +            return -1;
>>>>>>>>> +        return 0;
>>>>>>>>> +    }
>>>>>>>>> +
>>>>>>>>> +#else
>>>>>>>>> +
>>>>>>>>> +    // --- Linux / Unix-like -----------------------
>>>>>>>>> +    // We'll try xdg-open, then gnome-open, then kfmclient
>>>>>>>>> +    {
>>>>>>>>> +        // Helper macro to try one browser command
>>>>>>>>> +        // Returns 0 on success, -1 on failure
>>>>>>>>> +        #define TRY_CMD(prog) do {
>>> \
>>>>>>>>> +            char buf[1024];
>>> \
>>>>>>>>> +            snprintf(buf, sizeof(buf), "%s '%s' 1>/dev/null 
>>>>>>>>> 2>&1 &",
>>> \
>>>>>>>>> +                     (prog), html_path);
>>> \
>>>>>>>>> +            int ret = system(buf);
>>> \
>>>>>>>>> +            /* On Unix: system() returns -1 if the shell can't 
>>>>>>>>> run.
>>> */\
>>>>>>>>> +            /* Otherwise, check exit code in lower 8 bits.
>>>> */\
>>>>>>>>> +            if (ret != -1 && WIFEXITED(ret) && 
>>>>>>>>> WEXITSTATUS(ret) == 0)
>>> \
>>>>>>>>> +                return 0;
>>> \
>>>>>>>>> +        } while (0)
>>>>>>>>> +
>>>>>>>>> +        TRY_CMD("xdg-open");
>>>>>>>>> +        TRY_CMD("gnome-open");
>>>>>>>>> +        TRY_CMD("kfmclient exec");
>>>>>>>>> +
>>>>>>>>> +        fprintf(stderr, "Could not open '%s' in a browser.\n",
>>>>>> html_path);
>>>>>>>>> +        return -1;
>>>>>>>>> +    }
>>>>>>>>> +
>>>>>>>>> +#endif
>>>>>>>>> +}
>>>>>>>> [...]
>>>>>>>>
>>>>>>>> Sorry I didn't have a closer look at the patchset while it was 
>>>>>>>> under
>>>>>>>> review, but system(cmd) is a big no-no. We could create a file 
>>>>>>>> with an
>>>>>>>> explicit path passed by the user, but then it's up to the user 
>>>>>>>> to open
>>>>>>>> it.
>>>>>>>
>>>>>>> What's bad about opening a file in the browser when that's the
>>> documented
>>>>>>> behavior of the cli parameter?
>>>>>>
>>>>>> Because ffmpeg is not a browser opener tool, but a transcoding 
>>>>>> tool. An
>>>>>> argument can be made for every feature you can think of (Why not 
>>>>>> add an
>>>>>> option which shuts down a computer when the transcoding is done? 
>>>>>> Why not
>>>>>> add a playable DOOM implementation so the user will not be bored when
>>>>>> waiting for the transcode to finish).
>>>>>>
>>>>>> Let's just revert this. The many ffmpeg cli frontends can open 
>>>>>> browsers
>>> if
>>>>>> they want.
>>>>>
>>>>> Many good arguments can be found for both sides.
>>>>
>>>> We don't launch external applications from the CLI, ever, under no
>>>> circumstances. This is not an exception.
>>>>
>>>>>
>>>>>> Because ffmpeg is not a browser opener tool
>>>>>
>>>>> By all respect, this isn't one.
>>>>>
>>>>>
>>>>> Anyway, I will let the TC decide about this, then.
>>>>
>>>> No, there's no need to involve the TC when everyone is telling you that
>>>> something is wrong.
>>>
>>> I think this is exactly the kind of case which the TC has been installed
>>> for to handle.
>>
>> To clarify: I'm not seeking a yes/no decision but rather the question of
>> "How it can be safely delivered while still being convenient".
> 
> We don't launch a damn video player when transcoding finishes. There's 
> no reason to launch a browser to display some generated webpage with a 
> graph just like there's no reason to do it for any other kind of output.
> 
> Print the name of the html, with a path if one was given, and that's 
> enough.

Exactly. We never open external applications
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xA2FEA5F03F034464.asc
Type: application/pgp-keys
Size: 624 bytes
Desc: OpenPGP public key
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20250516/59b051d8/attachment.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 236 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20250516/59b051d8/attachment.sig>


More information about the ffmpeg-devel mailing list