[FFmpeg-user] ffmpeg filters

Jim DeLaHunt list+ffmpeg-user at jdlh.com
Fri Nov 15 18:19:25 EET 2019

On 2019-11-15 16:53, David Previs wrote:
>   -y -i "c:\ffmpeg\Black.mp4" -i "C:\pw\temp\watermark99.png" -filter_complex
>   "overlay=x=(main_w-overlay_w)/2:y=(main_h-overlay_h)/2",
>   drawtext="fontsize=24:fontcolor=ffff00 at 0.5:fontfile=/Windows/Fonts/Arial.ttf
>   :text='Huntley Film
>   Archives':x=(w-text_w)/2:y=(h-text_h)-2","drawtext=fontfile='C\:\\WINDOWS\\F
>   onts\\Arial.ttf'\:fontcolor=White\:fontsize=12\:timecode
>   ='00\:00\:00\:00'\:r=25\:x=(w-text_w)/2\:y=(h-text_h)-2" -ac 2 -s 640x480
>   -preset veryfast "c:\ffmpeg\Output.mp4"


I've had my own fights with the ffmpeg filter syntax. You might find it 
helpful to read, very carefully, the syntax documentation at 
<http://ffmpeg.org/ffmpeg-all.html#Filtergraph-description>. It is dense 
and opaque, but turns out to be pretty correct.

It's a little bit harder to figure out your problem, because you are 
still not supplying us the complete, unchanged, uncut command 
invocation. The excerpt above does not include the token "ffmpeg.exe", 
which I'll bet you had at the start of the command line. It includes 
eight newlines, and I'll bet the actual command you entered had only one 
newline. It has a space at the start of every line.

So based on this incomplete invocation, I suggest you eliminate all 
spaces after commas. I imagine ffmpeg reads a filterchain like:

    "overlay=x=…/2", drawtext="fontsize=24:…

And interprets the comma as separating the first filter description and 
from the second, and interprets the second filter description as 
starting with a space. The space is a delimiter, so the filter name, 
between delimiting comma and delimiting space, is a null string.

Note that the filtergraph description in the documentation does not 
mention that it discards insignificant whitespace. Nor does it does not 
do the decent thing and mention that it treats whitespace as 
significant. Opaque.

I would suggest that you eliminate all spaces in your filtergraph, 
except for the literal spaces in the string 'Huntley Film Archives'. I 
also suggest that you enclose the entire filtergraph in a single pair of 
double quotes, instead of putting double quotes around each filter 

My experience is that each non-trivial ffmpeg complex filter will drive 
you mad with its syntax and escaping at least once. Good luck.

Best regards,
       —Jim DeLaHunt, software engineer, Vancouver, Canada


     --Jim DeLaHunt, jdlh at jdlh.com     http://blog.jdlh.com/ (http://jdlh.com/)
       multilingual websites consultant

       355-1027 Davie St, Vancouver BC V6E 4L2, Canada
          Canada mobile +1-604-376-8953

More information about the ffmpeg-user mailing list