On Thu, Jul 17, 2014 at 12:33:41PM +0200, Gerion Entrup wrote: > Good day, > > I'm currently working on a video signature filter for ffmpeg. This allows you > to > fingerprint videos.
Oh, nice. > This fingerprint is built up of 9mb/s of bits or 2-3 mb/s bits compressed. > > In this context a few questions come into my mind: > - Should I print this whole bitstream to stdout/stderr at the end? Is it > maybe > a better choice to made an own stream out of this. But which type of stream > this is? How does the fingerprint looks like? Could it make sense as a gray video output fractal, or maybe some kind of audio signal? Also, you still have the string metadata possibility (git grep SET_META libavfilter). > (btw, the video signature algorithm needs 90 following frames, so I can > theoretically write every 90 frames something somewhere.) Do you cache all these frames or just update your caches/stats & drop them? > - If I print the whole bitstream to stdout/stderr (my current > implementation), > is there a possibility to use this later in an external program? The only > other globally analyze filter I found is volumedetect. This filter at the end > prints per print_stats the calculated results to the console. Is there a > possibility within the API for an external program to use these values or do > I > have to grep the output? stdout/stderr really isn't a good thing. Using metadata is way better because you can output them from ffprobe, and parse them according to various outputs (XML, CSV, JSON, ...). Another solution I can now think of is to simply pass an output file as option to the filter. That's typically how we do the 2-pass thing with vidstab filter. [...] > Another thing that came into my mind: Can filter force other filters to go > into > the filterchain? I see it, when I force GREY_8 only in my filter, it > automatically enables the scale filter, too. Some filter are inserted automatically for conversion & constraints, but that's not decided by the filters but the framework itself. > The reason I asked is the lookup > for my filter. Currently my filter analyzes a video and then produces a lot > of > numbers. To compare two videos and decide, wheather they match or not, these > numbers has to be compared. I see three possibilities: > 1. Write an VV->V filter. Reimplement (copy) the code from the V->V signature > filter and give a boolean as output (match or match not). > 2. Take the V->V filter and write a python (or whatever) script that fetch > the > output and calculates then the rest. > 3. Write an VV->V filter, but enforce, that the normal signature filter is > executed first to both streams, use the result and then calculate the > matching > type. Unfortunately I have no idea, how to do this and whether it is possible > at all. Can you give me an advice? > So if you output a file in the filter itself: ffmpeg -i video -vf fingerprint=video.sig -f null - ffmpeg -i another -vf fingerprint=video.sig:check=1 -f null - Or if you save the signature "stream" in a video (in gray8 for instance): ffmpeg -i video -vf fingerprint -c:v ffv1 sig.nut ffmpeg -i another -i sig.nut -vf '[0][1] fingerprint=mode=check' -f null - The 2nd method is "better" because it doesn't require file handling in the library, and it also allows stuff like using a diff filter (if you also apply fingerprint - not with mode=check - on `another`) Am I understanding right your wondering? > The last possibility also would allow something like twopass volume > normalisation. Currently there is a volumedetect and volume filter. To > normalize once could run volumedetect, then fetch the output, and put the > values into the volume filter, but I currently don't see a way to do this > automatically directly in ffmpeg. Check tools/normalize.py, it's using ebur128 and the metadata system. > > (Once the filter is in a good state, I will try to bring it upstream.) > Cool > Best, > Gerion > -- Clément B.
pgpIUcBGsdmql.pgp
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel