[FFmpeg-user] Resolving -filter_complex overlay / -vf yadif conflicts in subprocess call Python script

Gyan ffmpeg at gyani.pro
Wed Sep 11 14:59:32 EEST 2019



On 11-09-2019 04:48 PM, digitensions via ffmpeg-user wrote:
> Hello!
>
> Thanks for admitting me to FFmpeg-user, and thanks to all those who maintain this list. The information I’ve been receiving since joining is outstanding.
>
> This is a bit of a basic question I fear, but searching online hasn’t helped.  I am just co-writing a Python script which uses subprocess calls to run an FFmpeg command. I’ve been try to combine a watermark overlay with a command that uses yadif.  As a command it would run like so:
>
> ffmpeg -i input_file -i watermark.png -filter_complex overlay -c:v libx263 -pix_fmt yuv420p -vf yadif -metadata copyright=“blah” -metadata comment=“contact blah” -c:a aaa -report output_file
>
> For reference, the script is here: https://github.com/digitensions/MACEscripts/blob/master/main.py
>
> My error message:
> ffmpeg started on 2019-09-11 at 11:12:45
> Report written to "ffmpeg-20190911-111245.log"
> ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
>    built with Apple LLVM version 9.0.0 (clang-900.0.39.2)
>    configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.3_1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-11.0.2.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
>    libavutil      56. 22.100 / 56. 22.100
>    libavcodec     58. 35.100 / 58. 35.100
>    libavformat    58. 20.100 / 58. 20.100
>    libavdevice    58.  5.100 / 58.  5.100
>    libavfilter     7. 40.101 /  7. 40.101
>    libavresample   4.  0.  0 /  4.  0.  0
>    libswscale      5.  3.100 /  5.  3.100
>    libswresample   3.  3.100 /  3.  3.100
>    libpostproc    55.  3.100 / 55.  3.100
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/Joanna/Desktop/new(ScriptTest)/[Chimney].mov':
>    Metadata:
>      major_brand     : qt
>      minor_version   : 512
>      compatible_brands: qt
>      encoder         : Lavf58.20.100
>    Duration: 00:00:26.32, start: 0.000000, bitrate: 163608 kb/s
>      Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le(tv, bt709, progressive), 1920x1080, 162452 kb/s, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 12800 tbn, 12800 tbc (default)
>      Metadata:
>        handler_name    : VideoHandler
>        encoder         : Lavc58.35.100 prores_ks
>        timecode        : 01:00:00:00
>      Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32 (24 bit), 1152 kb/s (default)
>      Metadata:
>        handler_name    : SoundHandler
>      Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s
>      Metadata:
>        handler_name    : TimeCodeHandler
>        timecode        : 01:00:00:00
> Input #1, png_pipe, from '/Users/Joanna/Desktop/new(ScriptTest)/bitc/venv/watermarks/FHD.png':
>    Duration: N/A, bitrate: N/A
>      Stream #1:0: Video: png, rgba(pc), 1920x1080 [SAR 2835:2835 DAR 16:9], 25 tbr, 25 tbn, 25 tbc
> Filtergraph 'yadif' was specified through the -vf/-af/-filter option for output stream 0:0, which is fed from a complex filtergraph.
> -vf/-af/-filter and -filter_complex cannot be used together for the same stream.
> (venv) Joanna:venv Joanna$
>
> I’m aware my source is progressive, my only available test file at present. I tried a few options combining yadif with the -filter_complex and had no success, but I wonder if those more knowledgeable would have an effective work around, or could point me to one?

The deinterlacing should be performed before overlay within the same 
filtergraph, so

     ffmpeg -i input_file -i watermark.png -filter_complex "[0]yadif=0:-1:1[v];[v][1]overlay"
            -c:v libx264 -pix_fmt yuv420p -c:a aac
            -metadata copyright=“blah” -metadata comment=“contact blah” -report output_file


The yadif filter will only deinterlace if the frame is marked as interlaced.


Gyan



More information about the ffmpeg-user mailing list