#################################################################################### ## ## This program is free software: you can redistribute it and/or modify it under ## the terms of the GNU General Public License as published by the Free Software ## Foundation, either version 3 of the License, or (at your option) any later ## version. ## ## This program is distributed in the hope that it will be useful, but WITHOUT ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License along with ## this program. If not, see . ## #################################################################################### ## ## AVISynth script to fix the "stair-step" problem in D90 videos ## ## Thanks to Lee Wilson for discovering this technique and detailing it ## Thanks to buildyo for providing the "magic numbers" ## Thanks to hdkhang for providing the optimized version with better rendering speed ## http://www.dvxuser.com/V6/showthread.php?t=149663 ## ## From the information provided by Lee Wilson and buildyo on dvxuser.com ## I came up with this quick and dirty script. It has since been tweaked by ## hdkang (a dvxuser.com forum member), which has greatly increased the rendering ## speed. If you have any further tweaks, please submit them to dcgear@gmail.com ## ## An overview of how to use this script and any updates will be available ## at http://www.dc-gear.com/d90/ ## #################################################################################### ############################################## ## SET THE PATH TO YOUR D90 MOVIE FILE HERE ## ############################################## video = "d:\movie.avi" ############################################## ## DONE EDITING THIS FILE ## ############################################## ## Load the video and convert to RGB ################################################ rgbsource = ConvertToRGB(DirectShowSource(video)) ## Create blended movie file to interpolate the missing lines ################################################ blendsource = Layer(rgbsource, rgbsource, x=0, y=-1, op="fast") ## Pull the main slices of the video ################################################ s01 = Crop(rgbsource, 0, 0, -0, -713) s02 = Crop(rgbsource, 0, 7, -0, -704) s03 = Crop(rgbsource, 0, 16, -0, -695) s04 = Crop(rgbsource, 0, 25, -0, -687) s05 = Crop(rgbsource, 0, 33, -0, -678) s06 = Crop(rgbsource, 0, 42, -0, -669) s07 = Crop(rgbsource, 0, 51, -0, -660) s08 = Crop(rgbsource, 0, 60, -0, -651) s09 = Crop(rgbsource, 0, 69, -0, -642) s10 = Crop(rgbsource, 0, 78, -0, -634) s11 = Crop(rgbsource, 0, 86, -0, -625) s12 = Crop(rgbsource, 0, 95, -0, -616) s13 = Crop(rgbsource, 0, 104, -0, -607) s14 = Crop(rgbsource, 0, 113, -0, -598) s15 = Crop(rgbsource, 0, 122, -0, -590) s16 = Crop(rgbsource, 0, 130, -0, -581) s17 = Crop(rgbsource, 0, 139, -0, -572) s18 = Crop(rgbsource, 0, 148, -0, -563) s19 = Crop(rgbsource, 0, 157, -0, -554) s20 = Crop(rgbsource, 0, 166, -0, -545) s21 = Crop(rgbsource, 0, 175, -0, -537) s22 = Crop(rgbsource, 0, 183, -0, -528) s23 = Crop(rgbsource, 0, 192, -0, -519) s24 = Crop(rgbsource, 0, 201, -0, -510) s25 = Crop(rgbsource, 0, 210, -0, -501) s26 = Crop(rgbsource, 0, 219, -0, -492) s27 = Crop(rgbsource, 0, 228, -0, -484) s28 = Crop(rgbsource, 0, 236, -0, -475) s29 = Crop(rgbsource, 0, 245, -0, -466) s30 = Crop(rgbsource, 0, 254, -0, -457) s31 = Crop(rgbsource, 0, 263, -0, -448) s32 = Crop(rgbsource, 0, 272, -0, -439) s33 = Crop(rgbsource, 0, 281, -0, -431) s34 = Crop(rgbsource, 0, 289, -0, -422) s35 = Crop(rgbsource, 0, 298, -0, -413) s36 = Crop(rgbsource, 0, 307, -0, -404) s37 = Crop(rgbsource, 0, 316, -0, -395) s38 = Crop(rgbsource, 0, 325, -0, -386) s39 = Crop(rgbsource, 0, 334, -0, -378) s40 = Crop(rgbsource, 0, 342, -0, -369) s41 = Crop(rgbsource, 0, 351, -0, -360) s42 = Crop(rgbsource, 0, 360, -0, -351) s43 = Crop(rgbsource, 0, 369, -0, -342) s44 = Crop(rgbsource, 0, 378, -0, -334) s45 = Crop(rgbsource, 0, 386, -0, -325) s46 = Crop(rgbsource, 0, 395, -0, -316) s47 = Crop(rgbsource, 0, 404, -0, -307) s48 = Crop(rgbsource, 0, 413, -0, -298) s49 = Crop(rgbsource, 0, 422, -0, -289) s50 = Crop(rgbsource, 0, 431, -0, -281) s51 = Crop(rgbsource, 0, 439, -0, -272) s52 = Crop(rgbsource, 0, 448, -0, -263) s53 = Crop(rgbsource, 0, 457, -0, -254) s54 = Crop(rgbsource, 0, 466, -0, -245) s55 = Crop(rgbsource, 0, 475, -0, -236) s56 = Crop(rgbsource, 0, 484, -0, -228) s57 = Crop(rgbsource, 0, 492, -0, -219) s58 = Crop(rgbsource, 0, 501, -0, -210) s59 = Crop(rgbsource, 0, 510, -0, -201) s60 = Crop(rgbsource, 0, 519, -0, -192) s61 = Crop(rgbsource, 0, 528, -0, -183) s62 = Crop(rgbsource, 0, 537, -0, -175) s63 = Crop(rgbsource, 0, 545, -0, -166) s64 = Crop(rgbsource, 0, 554, -0, -157) s65 = Crop(rgbsource, 0, 563, -0, -148) s66 = Crop(rgbsource, 0, 572, -0, -139) s67 = Crop(rgbsource, 0, 581, -0, -130) s68 = Crop(rgbsource, 0, 590, -0, -122) s69 = Crop(rgbsource, 0, 598, -0, -113) s70 = Crop(rgbsource, 0, 607, -0, -104) s71 = Crop(rgbsource, 0, 616, -0, -95) s72 = Crop(rgbsource, 0, 625, -0, -86) s73 = Crop(rgbsource, 0, 634, -0, -78) s74 = Crop(rgbsource, 0, 642, -0, -69) s75 = Crop(rgbsource, 0, 651, -0, -60) s76 = Crop(rgbsource, 0, 660, -0, -51) s77 = Crop(rgbsource, 0, 669, -0, -42) s78 = Crop(rgbsource, 0, 678, -0, -33) s79 = Crop(rgbsource, 0, 687, -0, -25) s80 = Crop(rgbsource, 0, 695, -0, -16) s81 = Crop(rgbsource, 0, 704, -0, -7) s82 = Crop(rgbsource, 0, 713, -0, -0) ## Pull the blended lines of the video ################################################ b01 = Crop(blendsource, 0, 6, -0, -713) b02 = Crop(blendsource, 0, 15, -0, -704) b03 = Crop(blendsource, 0, 24, -0, -695) b04 = Crop(blendsource, 0, 32, -0, -687) b05 = Crop(blendsource, 0, 41, -0, -678) b06 = Crop(blendsource, 0, 50, -0, -669) b07 = Crop(blendsource, 0, 59, -0, -660) b08 = Crop(blendsource, 0, 68, -0, -651) b09 = Crop(blendsource, 0, 77, -0, -642) b10 = Crop(blendsource, 0, 85, -0, -634) b11 = Crop(blendsource, 0, 94, -0, -625) b12 = Crop(blendsource, 0, 103, -0, -616) b13 = Crop(blendsource, 0, 112, -0, -607) b14 = Crop(blendsource, 0, 121, -0, -598) b15 = Crop(blendsource, 0, 129, -0, -590) b16 = Crop(blendsource, 0, 138, -0, -581) b17 = Crop(blendsource, 0, 147, -0, -572) b18 = Crop(blendsource, 0, 156, -0, -563) b19 = Crop(blendsource, 0, 165, -0, -554) b20 = Crop(blendsource, 0, 174, -0, -545) b21 = Crop(blendsource, 0, 182, -0, -537) b22 = Crop(blendsource, 0, 191, -0, -528) b23 = Crop(blendsource, 0, 200, -0, -519) b24 = Crop(blendsource, 0, 209, -0, -510) b25 = Crop(blendsource, 0, 218, -0, -501) b26 = Crop(blendsource, 0, 227, -0, -492) b27 = Crop(blendsource, 0, 235, -0, -484) b28 = Crop(blendsource, 0, 244, -0, -475) b29 = Crop(blendsource, 0, 253, -0, -466) b30 = Crop(blendsource, 0, 262, -0, -457) b31 = Crop(blendsource, 0, 271, -0, -448) b32 = Crop(blendsource, 0, 280, -0, -439) b33 = Crop(blendsource, 0, 288, -0, -431) b34 = Crop(blendsource, 0, 297, -0, -422) b35 = Crop(blendsource, 0, 306, -0, -413) b36 = Crop(blendsource, 0, 315, -0, -404) b37 = Crop(blendsource, 0, 324, -0, -395) b38 = Crop(blendsource, 0, 333, -0, -386) b39 = Crop(blendsource, 0, 341, -0, -378) b40 = Crop(blendsource, 0, 350, -0, -369) b41 = Crop(blendsource, 0, 359, -0, -360) b42 = Crop(blendsource, 0, 368, -0, -351) b43 = Crop(blendsource, 0, 377, -0, -342) b44 = Crop(blendsource, 0, 385, -0, -334) b45 = Crop(blendsource, 0, 394, -0, -325) b46 = Crop(blendsource, 0, 403, -0, -316) b47 = Crop(blendsource, 0, 412, -0, -307) b48 = Crop(blendsource, 0, 421, -0, -298) b49 = Crop(blendsource, 0, 430, -0, -289) b50 = Crop(blendsource, 0, 438, -0, -281) b51 = Crop(blendsource, 0, 447, -0, -272) b52 = Crop(blendsource, 0, 456, -0, -263) b53 = Crop(blendsource, 0, 465, -0, -254) b54 = Crop(blendsource, 0, 474, -0, -245) b55 = Crop(blendsource, 0, 483, -0, -236) b56 = Crop(blendsource, 0, 491, -0, -228) b57 = Crop(blendsource, 0, 500, -0, -219) b58 = Crop(blendsource, 0, 509, -0, -210) b59 = Crop(blendsource, 0, 518, -0, -201) b60 = Crop(blendsource, 0, 527, -0, -192) b61 = Crop(blendsource, 0, 536, -0, -183) b62 = Crop(blendsource, 0, 544, -0, -175) b63 = Crop(blendsource, 0, 553, -0, -166) b64 = Crop(blendsource, 0, 562, -0, -157) b65 = Crop(blendsource, 0, 571, -0, -148) b66 = Crop(blendsource, 0, 580, -0, -139) b67 = Crop(blendsource, 0, 589, -0, -130) b68 = Crop(blendsource, 0, 597, -0, -122) b69 = Crop(blendsource, 0, 606, -0, -113) b70 = Crop(blendsource, 0, 615, -0, -104) b71 = Crop(blendsource, 0, 624, -0, -95) b72 = Crop(blendsource, 0, 633, -0, -86) b73 = Crop(blendsource, 0, 641, -0, -78) b74 = Crop(blendsource, 0, 650, -0, -69) b75 = Crop(blendsource, 0, 659, -0, -60) b76 = Crop(blendsource, 0, 668, -0, -51) b77 = Crop(blendsource, 0, 677, -0, -42) b78 = Crop(blendsource, 0, 686, -0, -33) b79 = Crop(blendsource, 0, 694, -0, -25) b80 = Crop(blendsource, 0, 703, -0, -16) b81 = Crop(blendsource, 0, 712, -0, -7) ## Put it all together! ################################################ stack1 = StackVertical(s01,b01,s02,b02,s03,b03,s04,b04,s05,b05,s06,b06,s07,b07,s08,b08,s09,b09) stack2 = StackVertical(s10,b10,s11,b11,s12,b12,s13,b13,s14,b14,s15,b15,s16,b16,s17,b17,s18,b18) stack3 = StackVertical(s19,b19,s20,b20,s21,b21,s22,b22,s23,b23,s24,b24,s25,b25,s26,b26,s27,b27) stack4 = StackVertical(s28,b28,s29,b29,s30,b30,s31,b31,s32,b32,s33,b33,s34,b34,s35,b35,s36,b36) stack5 = StackVertical(s37,b37,s38,b38,s39,b39,s40,b40,s41,b41,s42,b42,s43,b43,s44,b44,s45,b45) stack6 = StackVertical(s46,b46,s47,b47,s48,b48,s49,b49,s50,b50,s51,b51,s52,b52,s53,b53,s54,b54) stack7 = StackVertical(s55,b55,s56,b56,s57,b57,s58,b58,s59,b59,s60,b60,s61,b61,s62,b62,s63,b63) stack8 = StackVertical(s64,b64,s65,b65,s66,b66,s67,b67,s68,b68,s69,b69,s70,b70,s71,b71,s72,b72) stack9 = StackVertical(s73,b73,s74,b74,s75,b75,s76,b76,s77,b77,s78,b78,s79,b79,s80,b80,s81,b81,s82) StackVertical(stack1, stack2, stack3, stack4, stack5, stack6, stack7, stack8, stack9) ## Resize back to 720p ################################################ Spline16Resize(1280, 720)