Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
/.config

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, Marton Balint wrote (reply to this):



On Mon, 9 Jun 2025, softworkz wrote:

> From: softworkz <[email protected]>
>
> Signed-off-by: softworkz <[email protected]>
> ---
> .gitignore       |  1 +
> fftools/Makefile | 14 ++++++++++++--
> 2 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/.gitignore b/.gitignore
> index 59c89da5e0..989c702b6c 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -32,6 +32,7 @@
> /.config
> /.version
> /ffmpeg
> +/ffmpeg-sg

Please, do not copy this from tools folder to the main build dir. The rest 
of the tools are also simply kept in the tools folder, no copying is 
necessary during the build process.

Thanks,
Marton

> /ffplay
> /ffprobe
> /config.asm
> diff --git a/fftools/Makefile b/fftools/Makefile
> index b3c08ae5a0..378de79665 100644
> --- a/fftools/Makefile
> +++ b/fftools/Makefile
> @@ -5,6 +5,11 @@ AVPROGS-$(CONFIG_FFPROBE)  += ffprobe
> AVPROGS     := $(AVPROGS-yes:%=%$(PROGSSUF)$(EXESUF))
> PROGS       += $(AVPROGS)
>
> +FFMPEG_SG_SCRIPT = $(SRC_PATH)/tools/ffmpeg-sg$(if $(filter .exe,$(EXESUF)),.cmd)
> +FFMPEG_SG_TARGET = ffmpeg-sg$(EXESUF)
> +FFMPEG_SG_ENABLED = $(and $(filter $(CONFIG_FFMPEG),yes),$(or $(filter $(target_os),win32),$(if $(target_os),,yes)))
> +FFMPEG_SG_FILES = $(if $(FFMPEG_SG_ENABLED),$(FFMPEG_SG_TARGET))
> +
> AVBASENAMES  = ffmpeg ffplay ffprobe
> ALLAVPROGS   = $(AVBASENAMES:%=%$(PROGSSUF)$(EXESUF))
> ALLAVPROGS_G = $(AVBASENAMES:%=%$(PROGSSUF)_g$(EXESUF))
> @@ -67,7 +72,10 @@ endef
>
> $(foreach P,$(AVPROGS-yes),$(eval $(call DOFFTOOL,$(P))))
>
> -all: $(AVPROGS)
> +all: $(AVPROGS) $(FFMPEG_SG_FILES)
> +
> +$(FFMPEG_SG_TARGET): $(FFMPEG_SG_SCRIPT)
> +	$(Q)$(CP) -p $(FFMPEG_SG_SCRIPT) $(FFMPEG_SG_TARGET)
>
> fftools/ffprobe.o fftools/cmdutils.o: libavutil/ffversion.h | fftools
> OUTDIRS += fftools
> @@ -85,11 +93,13 @@ install-progs-$(CONFIG_SHARED): install-libs
> install-progs: install-progs-yes $(AVPROGS)
> 	$(Q)mkdir -p "$(BINDIR)"
> 	$(INSTALL) -c -m 755 $(AVPROGS) "$(BINDIR)"
> +	$(if $(FFMPEG_SG_FILES),$(INSTALL) -c -m 755 $(FFMPEG_SG_FILES) "$(BINDIR)")
>
> uninstall: uninstall-progs
>
> uninstall-progs:
> 	$(RM) $(addprefix "$(BINDIR)/", $(ALLAVPROGS))
> +	$(if $(FFMPEG_SG_FILES),$(RM) "$(BINDIR)/$(FFMPEG_SG_FILES)")
>
> clean::
> -	$(RM) $(ALLAVPROGS) $(ALLAVPROGS_G) $(CLEANSUFFIXES:%=fftools/%) $(CLEANSUFFIXES:%=fftools/graph/%) $(CLEANSUFFIXES:%=fftools/textformat/%)
> +	$(RM) $(ALLAVPROGS) $(ALLAVPROGS_G) $(CLEANSUFFIXES:%=fftools/%) $(CLEANSUFFIXES:%=fftools/graph/%) $(CLEANSUFFIXES:%=fftools/textformat/%) $(FFMPEG_SG_FILES)
> -- 
> ffmpeg-codebot
> _______________________________________________
> ffmpeg-devel mailing list
> [email protected]
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> [email protected] with subject "unsubscribe".
>
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, "softworkz ." wrote (reply to this):



> -----Original Message-----
> From: ffmpeg-devel <[email protected]> On Behalf Of
> Marton Balint
> Sent: Mittwoch, 11. Juni 2025 21:18
> To: FFmpeg development discussions and patches <ffmpeg-
> [email protected]>
> Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> show-graph wrapper script in build output
> 
> 
> 
> On Mon, 9 Jun 2025, softworkz wrote:
> 
> > From: softworkz <[email protected]>
> >
> > Signed-off-by: softworkz <[email protected]>
> > ---
> > .gitignore       |  1 +
> > fftools/Makefile | 14 ++++++++++++--
> > 2 files changed, 13 insertions(+), 2 deletions(-)
> >
> > diff --git a/.gitignore b/.gitignore
> > index 59c89da5e0..989c702b6c 100644
> > --- a/.gitignore
> > +++ b/.gitignore
> > @@ -32,6 +32,7 @@
> > /.config
> > /.version
> > /ffmpeg
> > +/ffmpeg-sg
> 
> Please, do not copy this from tools folder to the main build dir. The
> rest
> of the tools are also simply kept in the tools folder, no copying is
> necessary during the build process.
> 
> Thanks,
> Marton
> 

On important platforms like Windows, there is no "install". People are
taking/copying the build output. If it's not part of the build output,
it won't arrive at any user.

Also, for security reasons, the script requires an ffmpeg binary in the
same directory. Unless the script is in the same directory as the 
ffmpeg binary, it has no value at all.

The previous patch has gone great circles because I have been subject to
false accusations and damage of reputation.
This situation is different: I have laid out my arguments and opinion,
but that's just one small voice of many and I have no intentions to go
crazy about or fight for it. No matter how this may come to a decision,
I don't want to stand in the center of it.

There's one crucial point about this patchset, though: 

The purpose is to make the feature available to the masses, both 
developers and users (see 'instant availability' in my earlier response
to Kieran).

If this cannot be achieved and agreed, then it would have failed its
goal but I'd still say that it was worth the attempt.

Yet, I hope you can understand when I say that anything less than this
goal, is nothing for which I will take any effort at all. The scripts
are there, they can be downloaded from my GitHub - for those who know.

Thanks, and best regards
sw




_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, Kieran Kunhya via ffmpeg-devel wrote (reply to this):

--===============4338711860443026609==
Content-Type: message/rfc822
Content-Disposition: inline

Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170])
	by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 48CFC687FCC
	for <[email protected]>; Thu, 12 Jun 2025 00:14:35 +0300 (EEST)
Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-70e3c6b88dbso1794587b3.0
        for <[email protected]>; Wed, 11 Jun 2025 14:14:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=googlemail.com; s=20230601; t=1749676473; x=1750281273; darn=ffmpeg.org;
        h=content-transfer-encoding:to:subject:message-id:date:from
         :in-reply-to:references:mime-version:from:to:cc:subject:date
         :message-id:reply-to;
        bh=dkTqc0UhjV8S1LhPSa2cTp9ArV9SPh35pPxbgYbNKE0=;
        b=WDr8kx91q3BgvcGiN2VMqhzDjMvjK5G3kLS0Z2oYGYrPP4zOc0JMBtc09jEHwcyyam
         1Qo31MXECjn6tDi6ZoevteBDjTa7UZpZhBkKIOhgbbXuklw8zGjOACDM7ycXtc4yc9QR
         CY1KobBmw2DUoIInkNcTpXhDRLoTVIjHIfI9NfDz6kPPMGVMeLcqatRaNsEO1CQ7nSYo
         eT8nbK4665a7EBoVwQC3vjLNuz7pf/7AqKfvp5tKNllXtCjvYG6/ddRpXhIHDPUoFbVu
         5Aam3i10Yph/zxlgENdli7aluI9lQAJysEiHHVw6Bgj4D2sl1qNePhbKfSiMXZ4JZPMo
         s40Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20230601; t=1749676473; x=1750281273;
        h=content-transfer-encoding:to:subject:message-id:date:from
         :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
         :subject:date:message-id:reply-to;
        bh=dkTqc0UhjV8S1LhPSa2cTp9ArV9SPh35pPxbgYbNKE0=;
        b=OgEpK056MZTBc+J0EH1B6xvx1acF5XMphye4hXB0b/nNyIxdyvQjYzMEYuVEX+0Gfg
         WumzAUhchiOqjn9IVDYv48QuBy83uz7FLJTWUP007bi3fW3Xkf7m77ye81kt4QUsO06q
         y84o5by/IfpV3qwO0Cn47zYmz3mCLvaRvFNdECCHA7dRvCDZA1lMtirOE7CQTQkNzfHf
         TCLenQQ9KEh0C+eAyt8td7+Ql3TD9B1kYBClA/gamLcwus1uje9HdwE9V1wYFFk1VxNe
         tv0fZXAVtQZwQUMlHWp4BIJscSvwXraQH0Yrdpl0fm6UjlnbwzUUHv3Br6qm0JqTSOOL
         yrPA==
X-Gm-Message-State: AOJu0YxLwZf2QJnkgL+MIBH4VQJjt3QyrzgErVmJAvbkzK9o+rcdbXdm
	R10fKpsNIyotUv48/VsncmqJjZ4W/eoGJP5Wi0naEnaEgcj/9vBnd9+batW9nE6urj9dV0zwr5b
	E+Q/Uwk0b2SyBsjnRHadWxjvUUIGyCrWggQ==
X-Gm-Gg: ASbGncvTZOuwayDh8KdiKI0S0mZgVT0RIeXBJijTKbwyUJNF6CTCMZEc/QKjJz4oQiX
	NS0Sjgf43yzUgqyu3FKRu1KpVHKJScZVlHoKob1AeJVWUpvP2ic4R+kbrR8131szY/NwohJbDYF
	LqViu11J8236+WmH7SsUfnpHrMf+1sttpsY72j+tKKePY=
X-Google-Smtp-Source: AGHT+IHggUFhj9PMMWpRPdKapBLPhM3MiB6UjOy7+hnCfcWNl7BrPYsjO8VWaPDyLpWZS3c3t+BZ6MYWc0DM7vG1S68=
X-Received: by 2002:a05:690c:3584:b0:70c:a57c:94ba with SMTP id
 00721157ae682-71140ab7fe8mr78058997b3.17.1749676472516; Wed, 11 Jun 2025
 14:14:32 -0700 (PDT)
MIME-Version: 1.0
References: <[email protected]>
 <08e01d9ad96b56dac6f0f1f0912e0aa94f80e8d0.1749497028.git.ffmpegagent@gmail.com>
 <[email protected]> <DM8P223MB036554BDCE004848A84C5E45BA75A@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM>
In-Reply-To: <DM8P223MB036554BDCE004848A84C5E45BA75A@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM>
From: Kieran Kunhya <[email protected]>
Date: Wed, 11 Jun 2025 22:14:20 +0100
X-Gm-Features: AX0GCFtNNE9dkKU3so-3NNx739YQJCg2909lF9uJZht9kvE-YI7ZeepbOrJUVrE
Message-ID: <CABGuwEm72Ynf=anVta4rj0pOPThHeM0aweAbYVTBuvLsQSbJ4Q@mail.gmail.com>
Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include show-graph
 wrapper script in build output
To: FFmpeg development discussions and patches <[email protected]>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, Jun 11, 2025 at 9:58=E2=80=AFPM softworkz .
<[email protected]> wrote:
>
>
>
> > -----Original Message-----
> > From: ffmpeg-devel <[email protected]> On Behalf Of
> > Marton Balint
> > Sent: Mittwoch, 11. Juni 2025 21:18
> > To: FFmpeg development discussions and patches <ffmpeg-
> > [email protected]>
> > Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> > show-graph wrapper script in build output
> >
> >
> >
> > On Mon, 9 Jun 2025, softworkz wrote:
> >
> > > From: softworkz <[email protected]>
> > >
> > > Signed-off-by: softworkz <[email protected]>
> > > ---
> > > .gitignore       |  1 +
> > > fftools/Makefile | 14 ++++++++++++--
> > > 2 files changed, 13 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/.gitignore b/.gitignore
> > > index 59c89da5e0..989c702b6c 100644
> > > --- a/.gitignore
> > > +++ b/.gitignore
> > > @@ -32,6 +32,7 @@
> > > /.config
> > > /.version
> > > /ffmpeg
> > > +/ffmpeg-sg
> >
> > Please, do not copy this from tools folder to the main build dir. The
> > rest
> > of the tools are also simply kept in the tools folder, no copying is
> > necessary during the build process.
> >
> > Thanks,
> > Marton
> >
>
> On important platforms like Windows, there is no "install". People are
> taking/copying the build output. If it's not part of the build output,
> it won't arrive at any user.

On windows and other desktops you just click the file name and a browser op=
ens.
Does this really need a script just to do that?

Should we have a script to run ffplay after a user has encoded a file as we=
ll?

Kieran

--===============4338711860443026609==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

--===============4338711860443026609==--

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, "softworkz ." wrote (reply to this):



> -----Original Message-----
> From: Kieran Kunhya <[email protected]>
> Sent: Mittwoch, 11. Juni 2025 23:14
> To: FFmpeg development discussions and patches <ffmpeg-
> [email protected]>
> Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> show-graph wrapper script in build output
> 
> On Wed, Jun 11, 2025 at 9:58 PM softworkz .
> <[email protected]> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: ffmpeg-devel <[email protected]> On Behalf Of
> > > Marton Balint
> > > Sent: Mittwoch, 11. Juni 2025 21:18
> > > To: FFmpeg development discussions and patches <ffmpeg-
> > > [email protected]>
> > > Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> > > show-graph wrapper script in build output
> > >
> > >
> > >
> > > On Mon, 9 Jun 2025, softworkz wrote:
> > >
> > > > From: softworkz <[email protected]>
> > > >
> > > > Signed-off-by: softworkz <[email protected]>
> > > > ---
> > > > .gitignore       |  1 +
> > > > fftools/Makefile | 14 ++++++++++++--
> > > > 2 files changed, 13 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/.gitignore b/.gitignore
> > > > index 59c89da5e0..989c702b6c 100644
> > > > --- a/.gitignore
> > > > +++ b/.gitignore
> > > > @@ -32,6 +32,7 @@
> > > > /.config
> > > > /.version
> > > > /ffmpeg
> > > > +/ffmpeg-sg
> > >
> > > Please, do not copy this from tools folder to the main build dir.
> The
> > > rest
> > > of the tools are also simply kept in the tools folder, no copying
> is
> > > necessary during the build process.
> > >
> > > Thanks,
> > > Marton
> > >
> >
> > On important platforms like Windows, there is no "install". People
> are
> > taking/copying the build output. If it's not part of the build
> output,
> > it won't arrive at any user.
> 
> On windows and other desktops you just click the file name and a
> browser opens.
> Does this really need a script just to do that?

Hi Kieran,

I believe that when you would try out both ways yourself and compare, 
you wouldn't ask the question. Or - if you wish, I can create a short
screen capture to illustrate?

Best regards
sw



_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, "softworkz ." wrote (reply to this):



> -----Original Message-----
> From: Kieran Kunhya <[email protected]>
> Sent: Mittwoch, 11. Juni 2025 23:14
> To: FFmpeg development discussions and patches <ffmpeg-
> [email protected]>
> Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> show-graph wrapper script in build output
> 
> On Wed, Jun 11, 2025 at 9:58 PM softworkz .
> <[email protected]> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: ffmpeg-devel <[email protected]> On Behalf Of
> > > Marton Balint
> > > Sent: Mittwoch, 11. Juni 2025 21:18
> > > To: FFmpeg development discussions and patches <ffmpeg-
> > > [email protected]>
> > > Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> > > show-graph wrapper script in build output
> > >
> > >
> > >
> > > On Mon, 9 Jun 2025, softworkz wrote:
> > >
> > > > From: softworkz <[email protected]>
> > > >
> > > > Signed-off-by: softworkz <[email protected]>
> > > > ---
> > > > .gitignore       |  1 +
> > > > fftools/Makefile | 14 ++++++++++++--
> > > > 2 files changed, 13 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/.gitignore b/.gitignore
> > > > index 59c89da5e0..989c702b6c 100644
> > > > --- a/.gitignore
> > > > +++ b/.gitignore
> > > > @@ -32,6 +32,7 @@
> > > > /.config
> > > > /.version
> > > > /ffmpeg
> > > > +/ffmpeg-sg
> > >


> Should we have a script to run ffplay after a user has encoded a file
> as well?
> 
> Kieran
-----------------

The difference to this - as far as I'm seeing it - is that that the 
execution graph display is of a very different nature: It is (at least
logically) not an output of FFmpeg like a produced media file. It 
rather provides insights into FFmpeg's own operations - to the operator
and not to the client/consumer of the output.
It could even be seen as a kind of (passive) UI - for monitoring and
diagnosis, which is something very different from launching a generated 
video file.

And regarding the latter - don't we have those output devices, where 
you just need to add a few letters to the command line to "launch" 
a video window that is showing the output?

Best regards,
sw













_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, Nicolas George wrote (reply to this):

softworkz . (HE12025-06-11):
> On important platforms like Windows, there is no "install". People are
> taking/copying the build output. If it's not part of the build output,
> it won't arrive at any user.

Oh, we did not think of that in the past 20 years, and we could not
consider it to decide the policy. Thank Cthulhu you came!

> Also, for security reasons, the script requires an ffmpeg binary in the
> same directory. Unless the script is in the same directory as the 
> ffmpeg binary, it has no value at all.

Then you need to program your script better.

-- 
  Nicolas George
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, "softworkz ." wrote (reply to this):



> -----Original Message-----
> From: ffmpeg-devel <[email protected]> On Behalf Of
> Nicolas George
> Sent: Donnerstag, 12. Juni 2025 09:41
> To: FFmpeg development discussions and patches <ffmpeg-
> [email protected]>
> Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> show-graph wrapper script in build output
> 
> softworkz . (HE12025-06-11):
> > On important platforms like Windows, there is no "install".
> People are
> > taking/copying the build output. If it's not part of the build
> output,
> > it won't arrive at any user.
> 
> Oh, we did not think of that in the past 20 years, and we could not
> consider it to decide the policy. Thank Cthulhu you came!

Absolutely correct. It wasn't thought about in the past 20 years.
That's why nobody (besides few) knows about or uses things like 
graph2dot. 


> > Also, for security reasons, the script requires an ffmpeg binary
> in the
> > same directory. Unless the script is in the same directory as the
> > ffmpeg binary, it has no value at all.
> 
> Then you need to program your script better.

"better" would be worse, so that's not gonna happen.
The way how the feature is meant to work is laid out clearly:

"Add '-sg' to the command line to get the execution graph shown
in the browser"

If you want something else, you can write your own script.
Whether the feature should be included or not, might be best left
up for decision by the TC, I'm just giving it some time for 
comments first, even though we know that proponents will be
quite and opponents loud, as always.

Best regards
sw

_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, Nicolas George wrote (reply to this):

softworkz . (HE12025-06-12):
> "better" would be worse, so that's not gonna happen.

Then your patch is not going to happen.

> The way how the feature is meant to work is laid out clearly:

If you cannot find a way to do this without copying the script, you need
to give up and try something easier.

-- 
  Nicolas George
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the FFmpeg mailing list, "softworkz ." wrote (reply to this):



> -----Original Message-----
> From: ffmpeg-devel <[email protected]> On Behalf Of
> Nicolas George
> Sent: Donnerstag, 12. Juni 2025 21:07
> To: FFmpeg development discussions and patches <ffmpeg-
> [email protected]>
> Subject: Re: [FFmpeg-devel] [PATCH 3/3] tools/ffmpeg-sg: Include
> show-graph wrapper script in build output
> 
> softworkz . (HE12025-06-12):
> > "better" would be worse, so that's not gonna happen.
> 
> Then your patch is not going to happen.
> 
> > The way how the feature is meant to work is laid out clearly:
> 
> If you cannot find a way to do this without copying the script, you
> need
> to give up and try something easier.
> 
> --
>   Nicolas George

Take your meds and try an AI chat if you want to annoy somebody.

sw
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

/.version
/ffmpeg
/ffmpeg-sg
/ffplay
/ffprobe
/config.asm
Expand Down
14 changes: 12 additions & 2 deletions fftools/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ AVPROGS-$(CONFIG_FFPROBE) += ffprobe
AVPROGS := $(AVPROGS-yes:%=%$(PROGSSUF)$(EXESUF))
PROGS += $(AVPROGS)

FFMPEG_SG_SCRIPT = $(SRC_PATH)/tools/ffmpeg-sg$(if $(filter .exe,$(EXESUF)),.cmd)
FFMPEG_SG_TARGET = ffmpeg-sg$(EXESUF)
FFMPEG_SG_ENABLED = $(and $(filter $(CONFIG_FFMPEG),yes),$(or $(filter $(target_os),win32),$(if $(target_os),,yes)))
FFMPEG_SG_FILES = $(if $(FFMPEG_SG_ENABLED),$(FFMPEG_SG_TARGET))

AVBASENAMES = ffmpeg ffplay ffprobe
ALLAVPROGS = $(AVBASENAMES:%=%$(PROGSSUF)$(EXESUF))
ALLAVPROGS_G = $(AVBASENAMES:%=%$(PROGSSUF)_g$(EXESUF))
Expand Down Expand Up @@ -67,7 +72,10 @@ endef

$(foreach P,$(AVPROGS-yes),$(eval $(call DOFFTOOL,$(P))))

all: $(AVPROGS)
all: $(AVPROGS) $(FFMPEG_SG_FILES)

$(FFMPEG_SG_TARGET): $(FFMPEG_SG_SCRIPT)
$(Q)$(CP) -p $(FFMPEG_SG_SCRIPT) $(FFMPEG_SG_TARGET)

fftools/ffprobe.o fftools/cmdutils.o: libavutil/ffversion.h | fftools
OUTDIRS += fftools
Expand All @@ -85,11 +93,13 @@ install-progs-$(CONFIG_SHARED): install-libs
install-progs: install-progs-yes $(AVPROGS)
$(Q)mkdir -p "$(BINDIR)"
$(INSTALL) -c -m 755 $(AVPROGS) "$(BINDIR)"
$(if $(FFMPEG_SG_FILES),$(INSTALL) -c -m 755 $(FFMPEG_SG_FILES) "$(BINDIR)")

uninstall: uninstall-progs

uninstall-progs:
$(RM) $(addprefix "$(BINDIR)/", $(ALLAVPROGS))
$(if $(FFMPEG_SG_FILES),$(RM) "$(BINDIR)/$(FFMPEG_SG_FILES)")

clean::
$(RM) $(ALLAVPROGS) $(ALLAVPROGS_G) $(CLEANSUFFIXES:%=fftools/%) $(CLEANSUFFIXES:%=fftools/graph/%) $(CLEANSUFFIXES:%=fftools/textformat/%)
$(RM) $(ALLAVPROGS) $(ALLAVPROGS_G) $(CLEANSUFFIXES:%=fftools/%) $(CLEANSUFFIXES:%=fftools/graph/%) $(CLEANSUFFIXES:%=fftools/textformat/%) $(FFMPEG_SG_FILES)
249 changes: 249 additions & 0 deletions tools/ffmpeg-sg
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
#!/bin/bash
#
# ffmpeg-sg - FFmpeg Show-Graph Wrapper (aka killer feature)
# Show the FFmpeg execution graph in default browser
#
# Copyright (c) 2025 softworkz
#
# This file is part of FFmpeg.
#
# FFmpeg is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# FFmpeg is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with FFmpeg; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#

set -euo pipefail

# Check for privilege level
check_privileges() {
# Check if running as root (UID 0)
if [ "$(id -u)" -eq 0 ]; then
echo "Error: This script should not be run as root for security reasons." >&2
echo "Media processing and browser launching do not require root privileges." >&2
exit 1
fi

# Check if running as sudo
if [ -n "${SUDO_USER:-}" ] || [ -n "${SUDO_UID:-}" ]; then
echo "Error: This script should not be run with sudo for security reasons." >&2
echo "Please run as a regular user: ./ffmpeg-sg [options]" >&2
exit 1
fi

# Check other privilege indicators
if [ -n "${PKEXEC_UID:-}" ]; then
echo "Error: This script should not be run with elevated privileges (pkexec)." >&2
exit 1
fi
}

# Validate path chars
validate_path() {
local path="$1"
case "$path" in
*[!ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/_.-]*)
echo "Error: Invalid characters in path: $path" >&2
return 1
;;
esac
return 0
}

# Get secure temp folder
get_temp_dir() {
local uid=$(id -u)
local temp_bases=("/tmp" "/var/tmp")

for base in "${temp_bases[@]}"; do
local temp_dir="$base/ffmpeg-$uid"

if ! validate_path "$temp_dir"; then
continue
fi

# Verify perms and owner
if [ -d "$temp_dir" ]; then
local perms=$(stat -c %a "$temp_dir" 2>/dev/null || echo "")
if [ "$perms" != "700" ]; then
echo "Error: Temp directory exists with unsafe permissions ($perms). Expected 700." >&2
exit 1
fi

local owner=$(stat -c %u "$temp_dir" 2>/dev/null || echo "")
if [ "$owner" != "$uid" ]; then
echo "Error: Temp directory not owned by current user." >&2
exit 1
fi
else
# Create folder
if ! mkdir -m 700 "$temp_dir" 2>/dev/null; then
continue
fi
fi

echo "$temp_dir"
return 0
done

echo "Error: Unable to determine temp directory." >&2
exit 1
}

# Create HTML filename and pre-create file
create_unique_html_file() {
local temp_dir="$1"
local base_timestamp=$(date '+%Y-%m-%d_%H-%M-%S')
local base_milliseconds=$(date '+%3N')

local filename="ffmpeg_graph_${base_timestamp}_${base_milliseconds}.html"
local full_path="$temp_dir/$filename"

if ! validate_path "$full_path"; then
echo "Error: Generated invalid file path." >&2
exit 1
fi

if (set -C; echo "<!-- FFmpeg Graph Placeholder -->" > "$full_path") 2>/dev/null; then
echo "$full_path"
return 0
fi

echo "Error: Could not create unique HTML file." >&2
exit 1
}

# Check for xdg-open
check_xdg_open() {
# Accept only standard system locations - no PATH lookup
local xdg_locations=("/usr/bin/xdg-open" "/bin/xdg-open" "/usr/local/bin/xdg-open")

for location in "${xdg_locations[@]}"; do
if [ -x "$location" ]; then
echo "$location"
return 0
fi
done

echo "Error: xdg-open not found in standard system locations." >&2
echo "Checked: ${xdg_locations[*]}" >&2
return 1
}

# Launch browser
open_html_in_browser() {
local html_path="$1"

if [ ! -f "$html_path" ]; then
echo "Warning: HTML file not found: $html_path" >&2
return 1
fi

# Validate again
if ! validate_path "$html_path"; then
echo "Error: Invalid file path for browser: $html_path" >&2
return 1
fi

local xdg_open_path
xdg_open_path=$(check_xdg_open)
if [ $? -ne 0 ]; then
return 1
fi

# Launch browser
"$xdg_open_path" "$html_path" </dev/null >/dev/null 2>&1 &

if [ $? -eq 0 ]; then
echo "Execution graph opened in browser: $html_path" >&2
return 0
else
echo "Warning: Could not open '$html_path' in a browser." >&2
return 1
fi
}

# Check for conflicting parameters
check_conflicting_params() {
local args=("$@")

for arg in "${args[@]}"; do
case "$arg" in
-print_graphs_file)
echo "Error: -print_graphs_file parameter already provided. This script manages graph file generation automatically." >&2
exit 1
;;
-print_graphs_format)
echo "Error: -print_graphs_format parameter already provided. This script uses mermaidhtml format automatically." >&2
exit 1
;;
esac
done
}

# Cleanup temp file on signal
cleanup_on_signal() {
local html_file="$1"
if [ -f "$html_file" ]; then
rm -f "$html_file" 2>/dev/null || true
fi
exit 130 # 128 + SIGINT
}

main() {
check_privileges

# Check if ffmpeg exists in current dir
if [ ! -x "./ffmpeg" ]; then
echo "Error: ./ffmpeg not found or not executable in current directory." >&2
exit 1
fi

# Check params
check_conflicting_params "$@"

local temp_dir
temp_dir=$(get_temp_dir)

local html_file
html_file=$(create_unique_html_file "$temp_dir")

trap "cleanup_on_signal '$html_file'" INT TERM

# Set umask for file creation
umask 077

# Execute ffmpeg with graph printing options and all passed arguments
local ffmpeg_exit_code=0
./ffmpeg -print_graphs_file "$html_file" -print_graphs_format mermaidhtml "$@" || ffmpeg_exit_code=$?

trap - INT TERM

# Open browser
if [ -f "$html_file" ]; then
local file_size=$(stat -c%s "$html_file" 2>/dev/null || echo 0)
local placeholder_size=34

if [ "$file_size" -gt "$placeholder_size" ]; then
open_html_in_browser "$html_file"
else
echo "Warning: FFmpeg completed but no graph data was written." >&2
fi
else
echo "Warning: FFmpeg completed but no graph file was found." >&2
fi

# Exit with ffmpeg exit code
exit $ffmpeg_exit_code
}

main "$@"
73 changes: 73 additions & 0 deletions tools/ffmpeg-sg.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
@echo off
setlocal EnableDelayedExpansion
REM
REM ffmpeg-sg - FFmpeg Show-Graph Wrapper (aka killer feature)
REM Show the FFmpeg execution graph in default browser
REM
REM Copyright (c) 2025 softworkz
REM
REM This file is part of FFmpeg.
REM
REM FFmpeg is free software; you can redistribute it and/or
REM modify it under the terms of the GNU Lesser General Public
REM License as published by the Free Software Foundation; either
REM version 2.1 of the License, or (at your option) any later version.
REM
REM FFmpeg is distributed in the hope that it will be useful,
REM but WITHOUT ANY WARRANTY; without even the implied warranty of
REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
REM Lesser General Public License for more details.
REM
REM You should have received a copy of the GNU Lesser General Public
REM License along with FFmpeg; if not, write to the Free Software
REM Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
REM

REM Check for ffmpeg.exe in folder
if not exist "ffmpeg.exe" (
echo Error: ffmpeg.exe not found in current directory.
exit /b 1
)

REM Check params
set "conflict_found="
for %%i in (%*) do (
if /i "%%i"=="-print_graphs_file" set "conflict_found=1"
if /i "%%i"=="-print_graphs_format" set "conflict_found=1"
)

if defined conflict_found (
echo Error: -print_graphs_file or -print_graphs_format parameter already provided.
echo This script manages graph file generation automatically.
exit /b 1
)

REM Validate temp dir
if not exist "%TEMP%" (
echo Error: Temp directory not accessible
exit /b 1
)

REM Generate HTML filename
set "date_part=%date:~-4,4%-%date:~-10,2%-%date:~-7,2%"
set "time_part=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "date_part=%date_part:/=-%"
set "time_part=%time_part: =0%"

set "html_file=%TEMP%\ffmpeg_graph_%date_part%_%time_part%_%RANDOM%.html"

REM Execute ffmpeg
REM Use start /wait /b to avoid "Terminate batch job" prompt on Ctrl-C
start /wait /b ffmpeg.exe -print_graphs_file "%html_file%" -print_graphs_format mermaidhtml %*
set "ffmpeg_exit_code=%ERRORLEVEL%"

REM Open browser if HTML file was created
if exist "%html_file%" (
echo "Execution graph opened in browser: %html_file%
start "FFmpeg Graph" "%html_file%"
) else (
echo Warning: FFmpeg completed but no graph file was generated.
)

REM Exit with ffmpeg exit code
exit /b %ffmpeg_exit_code%