digitalFAQ.com Forums [Archives]

digitalFAQ.com Forums [Archives] (http://www.digitalfaq.com/archives/)
-   Video Encoding and Conversion (http://www.digitalfaq.com/archives/encode/)
-   -   Mencoder: Ffmpeg with Avisynth support (http://www.digitalfaq.com/archives/encode/9463-mencoder-ffmpeg-avisynth.html)

milan 05-05-2004 03:04 AM

ffmpeg with Avisynth support
 
Hi,

yesterday I tried to add Avisynth script support to ffmpeg/ffplay using Avisynth C interface. You can download compiled ffmpeg from http://ffdshow.sf.net/ffmpeg_avs.rar.

It's a first "draft" and has many bugs and limitations, including:

- crashes on exit - I guess it's because AVS_ScriptEnvironment isn't freed (I didn't found any function in avisynth C interface to do this)
- only video is supported
- no seeking
- no error handling
- I had problem implementing timestamps, but maybe it's OK now

If this would work, I'll make sources available and someone could compile mencoder using this modified libavformat.

[/url]

rds_correia 05-05-2004 03:44 AM

Hi Milan 8O ,
Welcome buddy :D .
We've been waiting for you for months :)
We've been trying to understand ffvfw/ffdshow usage and we really needed your help.
Anyway, we're now a bit more concentrated on Mencoder and I am very :D :D :D to see that you are willing to help us on Mencoder's ability to open avs scripts.
I'm sure other members will to compile it the way you just explained.
Hope to keep hearing from you now and then :P .
Cheers

digitall.doc 05-05-2004 04:28 AM

Hi Milan,
wellcome. Nice to see you visiting us.
It's good having people like you improving this ffmpeg thing.
Thanx :D

EDIT: VM or rds or Inc: as you're more used to compile mencoder, you could try as Milan advises, with this new ffmpeg, and we could test and help with debugging... well, if you have time, friends :roll:

Hydeus 05-05-2004 04:51 AM

Hi Milan.
1st post, and what a superb entry :lol:
Small problem: I can't force this to work in any way :oops:
The procedure entry point_avs_create_script_environment@4 could not be located in dynamic link avisynth_c.dll
I have avisynth_c.dll in ffmpeg and %systemroot% folders but it doesn't working. Any guides :?: :roll:

Jellygoose 05-05-2004 05:17 AM

as kwag would say: The future looks bright!

Welcome on board milan! If Mencoder would accept AVS scripts natively, it would be a great improvement! I'm not that smart, but wouldn't it actually be a gain in speed too, since the way we do it now with the avi-container slows things down a bit doesn't it? :roll:

incredible 05-05-2004 06:41 AM

FIRST: Milan, a big welcome to you in here! Wo do apriciate your presence more than very much!! :D

Second: @ Jell'

If you do convert direct from VOB to m2v/m1v and using sources like DVDs which are often well mastered (I said "often" so not all ;-) ).
Mencoder and its internal routines filters do have a very big potential so in a an easy encoding way that would be enough.

BUT ... in very tricky cases like if you do deal with PAL DVDs/captures where these have been just telecined from 23.976 to 29.97 and then for the PAL market direct "norm-converted" to 25fps (no IVTC first before! YEP, thats often done!).... this would need a complex scripting in avisynth, containing ways which are not possible in mencoders internal filters.
I do only say "StarTrek next generation", "Voyager", "Simpsons", "Futurama" etc. :arrow: the functions like restore24() or unblendpattern() are the only way to get these streams back to their real 23.976 WITHOUT still existing blendings in frames.

Also ... our MA script. You cant perform an IF YdifferenceToNext() ... adaptive "routine" by using mencoders internal possibilities only.
Filtering of Mencoder is static and thats the point where Avisynth still gives much of gain for higher standard video encoding routines.

:) Inc.

vmesquita 05-05-2004 08:40 AM

Welcome to the forum Milan!
:ole:

I can't wait to try this. It should also work with mencoder, because when compiling, we only copy the libavcodec and libavformat to mplayer folder. Well, we never know, but should work. :lol: Then you can submit the patch to mplayer-dev mailing list, I'm sure they will approve (with a few #defines to only compile with avisynth support in Windows)

Anyway, congratulations for the idea. :wink:

@Hydeuos
This looks like you're using an old DLL, try to use the latest version. :wink:

EDIT: This thread is related to ffmpeg, I'll move it to the correct forum. :wink:

digitall.doc 05-05-2004 09:07 AM

VM,
move there if needed to keep the forum organized...
but keep us informed here when working in mencoder :lol:

kwag 05-05-2004 10:51 AM

I'm late :!:
Welcome Milan :D

-kwag

vmesquita 05-05-2004 10:15 PM

Milan,

It always feezes when encoding in frame 48 or 51 with me. :cry: I did a batch file and adapted the optimized settings used in mencoder in case anyone wants to try

Code:

rem ####################
rem ## Configuration ###
rem ####################
SET MAX_BITRATE=2500
SET GOP=24
SET VBV=2000
SET BITRATE=1500
SET INPUT=carro-proc.avs
SET OUTPUT=santana-ff.mpg

ffmpeg.exe -an -vcodec mpeg2video -b %BITRATE% -aspect 1.3333 -intra_matrix 8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,12,14,18,27,29,34,
37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,29,34,
37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79 -inter_matrix 16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,28,30,
32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,
34,36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -maxrate %MAX_BITRATE% -rc_eq tex -bufsize %VBV% -g %GOP% -lmin 1 -mbqmin 1 -qmin 1 -preme 2 -precmp 2 -scplx_mask 0.3 -qblur 0 -i %INPUT% %OUTPUT%

( the ffmpeg line must be one line only, without brakes!)

Just to make it clear, it freezes with and without this settings, and I used a script with avisource only ( tested with some huffy captures). :wink:

Let me know if you need any specific test. :D

milan 05-06-2004 02:17 AM

First, I'd like to thank you for all the welcomes.

I posted to mencoder/avisynth thread because adding avisynth support to ffmpeg is for me just intermediate step in process of adding avisynth support to mencoder. I could modify mencoder directly, but I haven't compiled mplayer in windows yet, only ffmpeg.

@vmesquita:

I tried your example with two results:
1. I can confirm the problem with non-integer framerates - I'll investigate it further
2. When using HuffYUV source, ffmpeg didn't crash at exit.

milan 05-06-2004 02:35 AM

I uploaded new ffmpeg_avs.rar. Please try it, freeze when encoding should be fixed now.

vmesquita 05-06-2004 06:30 AM

Hi Milan,

Problem fixed! :D :D :D :D It really was only happening with non-integer frame-rates even with 29.97, but now it's working great.
I was testing a huffy source and like you it doesn't crash.

About mencoder: I don't think you need to add support to mencoder directly: when you compile mencoder, you just need to copy libavcodec and libavformat to mplayer folder. From what I understand you just added a new input type to libavformat, it may be working with mencoder already. :D If possible, make the sources available so I can compile. I can't wait to see this working on mencoder. :D :D :D

milan 05-06-2004 07:47 AM

I'm glad it's working now.

I tried to build mencoder using mingw with modified libavformat. However resulting mencoder stopped before encoding first frame. I'll investigate this later, because today I'd like to work on ffdshow too (I'd like to finally correctly implement MPEG1/2 decoding).

vmesquita 05-06-2004 07:59 AM

Great Milan! Let me know if you need any help. :wink: :D

digitall.doc 05-06-2004 10:36 AM

Hey guys,
we're all :blabla: in Mencoder and MencodeMe forum how great it is the advances done to work with avisynth from inside ffmpeg(/mencoder).
Thanx for your work :wink:

Hydeus 05-07-2004 06:02 AM

Quote:

Originally Posted by vmesquita
This looks like you're using an old DLL, try to use the latest version. :wink:

I'm using Kevin Atkinson 01-Jan-2004 21:31 build. Still no results :(

rds_correia 05-07-2004 06:44 PM

Oh man!
I just can't wait to see mplayer/mencoder reading avs scripts natively :D
Hope I could help you guys but I'm not the "brains" in the family :)
Just let us know when you have something for testing.
Cheers

digitall.doc 05-09-2004 06:59 AM

Hmmm, four days since first milan post. No news about ffmpeg-avisynth (-mencoder)... no news is bad news? :(

vmesquita 05-09-2004 09:22 AM

@Hydeus
Try putting the DLL in avisynth plugin folder (not in script folder). It solced the problem for me.

@digitall.doc
He's probably busy, let's wait and let him surprise us. :wink: :D

digitall.doc 05-09-2004 11:16 AM

And what about you, VM?. You were also testing it.
But I'm afraid you don't have the time... :lol:

milan 05-12-2004 05:48 AM

After successful compilation of mencoder in mingw I decided to implement Avisynth support directly to mplayer/mencoder. You can download it from http://ffdshow.sf.net/mencoderAVS.rar. This time it contains avisynth_c.dll too. It isn't compiled with DirectX support therefore mplayer is not very usable.

Limitations: audio isn't supported and errors aren't checked at all. No seeking.

I tested it with one simple avs script with all colorspaces (YV12, YUY2, RGB24, RGB32). I'm sure you'll give it much better testing :)

vmesquita 05-12-2004 05:58 AM

This is gerat, Milan! :D :D :D 8) I can't wait to test it. 8)

Jellygoose 05-12-2004 06:01 AM

thank you so much milan! will try it out tonight! :D

question: is this build optimized for a certain CPU type yet?

milan 05-12-2004 06:07 AM

I compiled it on P4, without any arguments to ./configure. I don't know mplayer build process much and I'm not sure if resulting binary can be used on older CPUs.

digitall.doc 05-12-2004 06:17 AM

:ole: milan
I'm at work now, and tonight on duty. But tomorrow I'll run and test it. :bugeyes:
What about speed?, does it slow down as using makeAVIS?
You da'man :bowdown:
:wink:

milan 05-12-2004 06:24 AM

I've never used makeAVIS with mencoder so I can't tell (actually only recently I learned that this combination is possible), but I guess it should be faster.

Jellygoose 05-12-2004 07:27 AM

hi milan.
your mencoder build crashes whenever I start it on my Athlon XP. Do you want me to post the windows error log? (it's long...) :roll:

milan 05-12-2004 07:32 AM

Output from

mencoder.exe -v -v xx.avs ....

would be helpful.

It's quite possible, that this build requires SSE2.

Jellygoose 05-12-2004 08:01 AM

hmmm how do I save the output. there's no crash using these arguments, however the window is closed quite fast. :oops:
I could read something like "head_check failed". Sorry for being no big help on this issue. :roll:

vmesquita 05-12-2004 08:06 AM

Quote:

Originally Posted by milan
I compiled it on P4, without any arguments to ./configure. I don't know mplayer build process much and I'm not sure if resulting binary can be used on older CPUs.

This won't work in any other CPU but P4. :( Not even AtlhonXP will work because it doesn't have SSE2.
Could please release the sources or reconfigure with:
Code:

./configure --enable-largefiles --enable-static --confdir=mplayer/ --enable-win32 --enable-runtime-cpudetection
The --enable-runtime-cpudetection allows it to run in any CPU, detecting at runtime. It's a bit slower than a CPU specific version, of course.
--enable-win32 enables the use of win32 decoders, you ca ndrop this if it causes problems.
--enable-static ensures that that you only need cygwin1.dll (and no other DLL) if you're using cygwin to compile
--enable-largefiles adds support to files greater than 2 Gb.

Thanks! :D

kwag 05-12-2004 08:08 AM

Quote:

Originally Posted by Jellygoose
hmmm how do I save the output. there's no crash using these arguments, however the window is closed quite fast. :oops:

Try mencoder.exe -v -v xx.avs [rest of your arguments] > crash.log

The file crash.log should display what happened.

-kwag

yaz 05-12-2004 09:17 AM

Quote:

Originally Posted by Jellygoose
hmmm how do I save the output. there's no crash using these arguments, however the window is closed quite fast. :oops:
I could read something like "head_check failed". Sorry for being no big help on this issue. :roll:

you're just kidding, aren't you ? :-)
wrap your command into a .bat & put a 'pause' at the very and. maybe, it helps :-) (some screen output can't be redirected, anyway)
the bests
y

Jellygoose 05-12-2004 10:37 AM

it's been a long time since working with DOS. Thanks kwag and yaz... 8)

Abond 05-12-2004 02:08 PM

Maybe first report. P4, 1.6 GHZ XP Home. Using directly MencodeMe give multiple "duplicate 1 frame(s)!" errors - file size is 0 KB. Runing the same from CLI give the same. I tried to put ConvertToYUY2() at the end of script (I don't know why I thought it will cure) and the error gone, but it shows every time (99%) :? Stoped it. Every attempt to repeat it gave me this duplicate frame error - as the encoder received only the first frame and discard it when received again (I think) :? The script included RemoveDirt and HybridFupp (704,576, preset="very high"). Aim - 1/3 DVD (file size).

rds_correia 05-12-2004 02:40 PM

Hi Milan,
It's always great to see you around :wink:
If you can show us how to include the avs support we'll provide the compilations here at the forum and we will be forever gratefull :bowdown:
Not to mention that each one of us will buy you a pack of beer :rotf: so you can do it like we do while we wait for our encodings are finished :drink:
Thanks buddy.
Cheers

milan 05-13-2004 06:33 AM

I compiled mplayer/mencoder using suggested configure options and updated http://ffdshow.sf.net/mencoderAVS.rar.

@Abond
Please could you send me that avisynth script and mencoder command line used? As I wrote before, I tested mencoderAVS with very simple avs file and libavcodec's mpeg4 codec.

@rds_correia
I'll release sources soon, but first I'd like to wait for Abond's answer.

vmesquita 05-13-2004 07:31 AM

Hi Milan,

I just tested with this script:
Code:

Avisource("D:\Videos\mymovie.avi",false)
WIDESCREEN=0
Overscan=0
AssumeFPS(23.976)
WIDTH=352
HEIGHT=480
function AddAudio(clip v1) {
v2 = Blankclip()
v1 = AudioDub(v1,v2)
return v1
}
Function DivXResize(clip c, int WIDTH, int HEIGHT, int OVERSCAN, string RESIZER, int widescreen) {
ratio=((c.width()+.0)/(c.height()+.0))+.0
halfheight43=(round(c.width()/1.33333)-c.height())/2
halfheight43=(widescreen==1)&&(ratio>1.7777) ? (round(c.width()/1.77777)-c.height())/2 : halfheight43


#Crop to fullscreen it this has been asked
fullscreen_cropper=round ((c.width()-(c.height()*1.33333) ) /2)
f_c_mod=fullscreen_cropper % 2
fullscreen_cropper=( f_c_mod == 1) ? (fullscreen_cropper+1) : fullscreen_cropper
c= (widescreen == 2) ? c.crop(fullscreen_cropper,0,(c.width()-2*fullscreen_cropper),0): c

#What would be the height keeping the aspect ratio if width was 640/320-NTSC or 768/384-PAL(4:3)
no_borders_height1=c.height()
#4:3 (option 0 and 2)
no_borders_height1=(HEIGHT == 480) ? (640*c.height())/(c.width()) : no_borders_height1
no_borders_height1=(HEIGHT == 240) ? (320*c.height())/(c.width()) : no_borders_height1

no_borders_height1=(HEIGHT == 576) ? (768*c.height())/(c.width()) : no_borders_height1
no_borders_height1=(HEIGHT == 288) ? (384*c.height())/(c.width()) : no_borders_height1

#anamorphic (option 1)
no_borders_height1=(HEIGHT == 480)&&(widescreen==1)&&(ratio>1.7777) ? (848*c.height())/(c.width()) : no_borders_height1
no_borders_height1=(HEIGHT == 240)&&(widescreen==1)&&(ratio>1.7777) ? (424*c.height())/(c.width()) : no_borders_height1

no_borders_height1=(HEIGHT == 576)&&(widescreen==1)&&(ratio>1.7777) ? (1024*c.height())/(c.width()) : no_borders_height1
no_borders_height1=(HEIGHT == 288)&&(widescreen==1)&&(ratio>1.7777) ? (512*c.height())/(c.width()) : no_borders_height1


#Now how much we have to shrink to make it fit inside a macroblock?
mod16height=no_borders_height1 % 16

#If the rest is <=8, subtracts the rest, else, completes to 16.
completion= (mod16height <= 8) ? (-mod16height) : (16-mod16height)
no_borders_height2=no_borders_height1+completion

#finally resize
c=Eval( RESIZER + "(c," +  string(WIDTH) + "," + string(no_borders_height2) + ")" )

#add lateral overscan
c=letterbox(c,0,0,overscan*8,overscan*8)
return(c)
}

Function DivXBorders(clip c, int HEIGHT, int OVERSCAN) {
halfheight43=(HEIGHT-c.height())/2
c=addborders(c,0,halfheight43,0,halfheight43)
#Add vertical overscan
c=letterbox(c,overscan*8,overscan*8,overscan*8,overscan*8)
return(c)
}

converttoyv12()
BlindPP(cpu=4)
Blockbuster(method="noise",detail_min=1,detail_max=3,variance=0.1,seed=1)
Convolution3D(1, 6, 12, 6, 8, 2.8, 0)
DivXResize(WIDTH, HEIGHT, 0, "LanczosResize",WIDESCREEN)
Undot()
TemporalSoften(2,7,7,3,2)
DCTFilter(1,1,1,1,1,1,0.5,0)
#Blockbuster(method="noise",detail_min=1,detail_max=10,variance=0.3,seed=5623)
DivXBorders(HEIGHT,OVERSCAN)
converttoyuy2()
AddAudio()
MonitorFilter


sampler(length=15)

And it worked fine, only crashed in the end. I did 2 passes, both crashed in the end.
My include file:
Code:

of=rawvideo=1
ovc=lavc=1
nosound=1
sws=2
lavcopts=vcodec=mpeg2video:vrc_eq=tex:vmax_b_frames=2:
vrc_maxrate=2500:aspect=1.3333:keyint=24:vrc_buf_size=917:preme=2:precmp=2:vstrict=-1:autoaspect=1:
scplx_mask=0.3:vqblur=0:mbqmin=1:vqmin=1:mbqmin=1:lmin=1:
intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,12,14,18,27,
29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,29,34,
37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79
:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,
26,28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,
30,32,34,36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44
ofps=23.976

And my command-line:
Code:

D:\Temp\mencodeme>Mencoder.exe -include temp.conf -lavcopts vbitrate=977:vpass=2 "D:\Temp\video\Movie0.avs" -o "D:\Temp\video\Movie0a.mpv"
The resulting encoded file is also fine. :wink: :D

milan 05-13-2004 08:17 AM

After downloading 6 missing filters, I was able to test your script with same result as you: output file seemed to be OK, but mencoder crashed on exit. I'm just guessing what could cause this. For me it reports error in xvidVFW.dll, but I'm not sure if it's really crashing there. Please try some huffYUV source, this didn't crash for me.

And as I wrote before, I don't know how to release AVS_ScriptEnvironment variable. So even if this doesn't causes crash, it'd still cause resources leak.

BTW I implemented seeking support in demux_avisynth.

vmesquita 05-13-2004 10:58 AM

Quote:

Originally Posted by milan
Please try some huffYUV source, this didn't crash for me.

I tried with the initial build and it didn't crash. I'll do another test later, right now I am in a hurry.
Quote:

BTW I implemented seeking support in demux_avisynth.
Cool! 8) 8) 8) 8) :D


All times are GMT -5. The time now is 11:15 AM  —  vBulletin © Jelsoft Enterprises Ltd

Site design, images and content © 2002-2024 The Digital FAQ, www.digitalFAQ.com
Forum Software by vBulletin · Copyright © 2024 Jelsoft Enterprises Ltd.