On 12.03.2013 15:02, Anton Khirnov wrote:
Hi,
On Mon, 11 Mar 2013 19:23:12 -0400, Keith Lawson
<[email protected]> wrote:
Hello,
I'm attempting "mask" a time selection of a video using the
split, select and delogo filters but I just can't seem to get my
head
around the split filter. Looking at the start of the example[1] at
the
start of the libav documentation it certainly appears that what I
want
to do is possible but I'm struggling to build the proper filter.
For
example I would like to mask the entire video of a 640x480 video
from 0
- 10 seconds. Based on the example in the docs and this[2]
stackoverflow
posting I've tried things like:
./avconv -i input -vf "[in] split
[T1], fifo, [T2] overlay [out]; [T1]
fifo,select='gte(t,0)*lte(t,10)',delogo=x=0:y=0:w=640:h=480 [T2]"
output
Hoping that would do something like :
input --> split --> fifo
-----------------------------------------------------> overlay -->
output
| ^
| |
+------> fifo --> select 0-10 seconds --> delogo
--------+
But I'm either completely unable to get the command to run or
when I do I don't get the desired results. Any help or suggestions
for a
more appropriate approach would be greatly appreciated.
First of all, when you ask for help with avconv, please always attach
full
commandlines that you tried and the output avconv printed. That
eliminates a lot
of pointless guessing on our part.
Secondly, I'm afraid those docs are a little obsolete. For one thing,
you should
never insert the fifo filter manually. It is always done
automatically when
needed.
Also in those complex situations when you deal with filters with
multiple inputs
or outputs, it's better to explicitly label everything and not rely
on automatic
mappings, as it's more clear what's going on.
In any case, i think that
-vf '[in] split [split_main][split_delogo];
[split_main][delogoed]overlay[out];
[split_delogo] select=gte(t\,0)*lte(t\,10),delogo=<delogo
params>[delogoed];'
should do roughly what you want EXCEPT for a problem with overlay.
This filter isn't working for me. I get:
avconv -i test.avi -vf "[in] split
[split_main][split_delogo];[split_delogo]
select=gte(t\,0)*lte(t\,10),delogo=x=0:y=0:w=640:h=480[delogoed];
[split_main][delogoed]overlay[out];" testmask.avi
avconv version 0.8.5-6:0.8.5-1~bpo60+1, Copyright (c) 2000-2012 the
Libav developers
built on Jan 24 2013 17:05:37 with gcc 4.4.5
Input #0, avi, from 'test.avi':
Duration: 00:05:12.64, start: 0.000000, bitrate: 785 kb/s
Stream #0.0: Video: wmv2, yuv420p, 640x480, 25 tbr, 25 tbn, 25 tbc
File 'testmask.avi' already exists. Overwrite ? [y/N] y
[buffer @ 0x6c64a0] w:640 h:480 pixfmt:yuv420p
No such filter: ''
Error opening filters!
I can't for the life of me figure out where it's getting the "no such
filter" so I played with it a bit more and tried the following using
copy as an output to overlay and ended up segfaulting avconv:
avconv -i test.avi -vf
"[in]split[copy][mask];[copy]copy[copyout];[mask]select=gte(t\,5)*lte(t\,10),delogo=x=0:y=0:w=640:h=480[maskout];[copyout][maskout]overlay[out]"
testmask.avi
avconv version 0.8.5-6:0.8.5-1~bpo60+1, Copyright (c) 2000-2012 the
Libav developers
built on Jan 24 2013 17:05:37 with gcc 4.4.5
Input #0, avi, from 'test.avi':
Duration: 00:05:12.64, start: 0.000000, bitrate: 785 kb/s
Stream #0.0: Video: wmv2, yuv420p, 640x480, 25 tbr, 25 tbn, 25 tbc
File 'testmask.avi' already exists. Overwrite ? [y/N] y
[buffer @ 0x10744a0] w:640 h:480 pixfmt:yuv420p
[overlay @ 0x10a5c40] auto-inserting filter 'auto-inserted scaler 0'
between the filter 'Parsed filter 3 delogo' and the filter 'Parsed
filter 4 overlay'
[scale @ 0x10a45a0] w:640 h:480 fmt:yuv420p -> w:640 h:480 fmt:yuva420p
flags:0x4
[overlay @ 0x10a5c40] main w:640 h:480 fmt:yuv420p overlay x:0 y:0
w:640 h:480 fmt:yuva420p
[overlay @ 0x10a5c40] main_tb:1/1000000 overlay_tb:1/1000000 ->
tb:1/1000000 exact:1
Output #0, avi, to 'testmask.avi':
Metadata:
ISFT : Lavf53.21.1
Stream #0.0: Video: mpeg4, yuv420p, 640x480, q=2-31, 200 kb/s, 25
tbn, 25 tbc
Stream mapping:
Stream #0:0 -> #0:0 (wmv2 -> mpeg4)
Press ctrl-c to stop encoding
Segmentation fault
In its current form, after overlay gets an EOF on its secondary
input, it will
continue overlaying the last image from it. That is useful e.g. when
you want to
overlay a single-picture logo on a video, but in this case you want
it to stop
overlaying once the secondary stream ends. That cannot be done
currently, but
should be quite easy to implement. I will look into it soonish.
_______________________________________________
libav-tools mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-tools