8 ms·
Ntsc-rs – open-source video emulation of analog TV and VHS artifacts
- unexpectedVCR 4mo agoYes I use NTSC-RS already and it's accurate to me. It even has a web app. It looks good as I'm even on their GitHub discussions as the-NTSC-RS-guy.
- natas 5mo agopretty cool!
- devindotcom 5mo agoI do love that this is an area of such active development. But I'm curious to see what the artifact simulation crowd thinks of it. I most often encounter them as shaders for emulators and such, but of course this kind of structure degradation of a pristine video is also in high demand these days for video production. Producers want that 90s-camcorder look but crews can't actually use the clunky 90s-camcorder hardware and formats.
- nemomarx 5mo agoI'm actually surprised there isn't much of a scene for authentic camcorder footage - directors love to bust out real black and white film cameras for stuff?
- devindotcom 5mo agoFilm is a fun, interesting, authentic, and useful medium for filmmakers, and there are established workflows for it. A camcorder writing interlaced video to miniDV may have its charms (I still have a great old Panasonic 3CCD one) but as a filmmaking tool it would be really inconvenient. Shooting in an ordinary digital workflow and adding the effect later is a no brainer production-wise. That said, I would not be surprised to see camcorders, DV or VHS or whatever, rise up as a Polaroid-like alternative to smartphone cameras! Old digital point and shoots are already popular that way.
- bufordsharkley 5mo agoI've never been a smartphone user, and have moved from a Flip Camcorder, to various point-and-shoots in video mode (never liked very much), and just in the last 3 years, have discovered that Sony handicams are now pocket-sized, I never considered carrying around one before, but it's actually completely reasonable. The model (HDRCX405) is wonderful, 30x optical zoom a real value-add over smartphones, but also I just love the ergonomics in general, very easy to pick it up, and start a video within a second. That said, Sony discontinued the low-end handicam line last year (this model went from $200 new to $800 used), which is really unfortunately, right as I hope this niche might gain momentum.
- xattt 5mo agoIn 2009, I recorded a video of the after effects of a torrential downpour in Toronto on a Sony HDV camera. I also called up a few news stations to see if I could sell it. I ended up reaching CFTO (CTV Toronto), and took the footage over to Channel 9 Court. What happened next took me by complete surprise. The flagship station of a national network had no deck in the building that would play HDV mini DV tapes. I hadn’t brought my camcorder or my MBP either, so I couldn't quickly convert it into a format that they could use. I ended up going home, and exporting via FCP and burning onto a DVD. It worked, I got to see the inside of a news station and I got $135 for it. The news broadcast later that day showed about 10 seconds of my footage, which by extrapolation, was the highest-ever hourly rate I’ve ever earned: ~$48,600/hour. The lesson here was that DV and DV-adjacent workflows were difficult in a pro context even when they were mainstream in the consumer market.
- kraussvonespy 5mo agoThis started long ago. In the 1980s, pros used 60 minute Umatic cassettes because it was the standard and it was the highest quality format. Home users had VHS and Beta (and laserdisc and CED discs and...) The pro market was mostly short videos / news segments / local insertion commercials so a 60 minute Umatic tape limitation was fine with the pros. In the home market, VHS won over Beta in part because the recording time was longer and it meant that most rental movies didn't need a second cassette and a swap in the middle of the movie. To your point, most video production companies had VHS and Beta decks if they needed home formats (I was playing with my VHS-C camcorder and caught that plane crash on tape), but even in the dark ages of NTSC, pros didn't want to use home formats unless they absolutely had to.
- numpad0 5mo agoThe difference is that films had better performances than digital equivalents in some areas for a long time. It isn't/wasn't just nostalgia. The imaging device used in electronic camcorders before the transition to CCD had visibly gray whites. They weren't so great by any standards. Hence very few chases it, with nostalgia being the sole reason to do it.
- Yeask 5mo ago[dead]
- JdeBP 5mo agoYou're not getting the full experience of analogue telly artifacts until you emulate colour subcarrier phase shift and colour burst detection failure. (-: And of course PAL and Hanover bars.
- stevesimmons 5mo agoWhich is why NTSC was often said to mean Never Twice the Same Color!
- xattt 5mo agoGood thing they fixed it in Always The Same Color.
- picofarad 5mo agoAll Told, Same Crap
- reaperducer 5mo agoIn my decades working in TV it was always "Never The Same Color." See also: Picture At Last! See also: System Essentially Contrary to the American Method
- ReptileMan 5mo agoFrench gonna french. I have always been fascinated by their engineering. There was this joke that Renault headquarters is 16 floors, on the 16 is the top brass, on the 15 are the engineers that design the cars, and the rest 14 floors try desperately to figure out how to assemble them.
- LeFantome 5mo agoNice job working in SECAM
- cf100clunk 4mo agoGoing way back, in Canada the jokes were: NTSC = ''never twice same colour'' SECAM = ''système électronique pour confondre les americaines.''
- nekiwo 5mo agonever expected valadaptive to be on front page of HN
- zellyn 5mo agoI once tried to fully analyze the amazing NTSC emulation used in OpenEmulator. I went down a rabbit hole that involved losing motivation several lessons in to a signal processing class on YouTube, but for those interested, I did at least pull quite a lot of it apart here: https://observablehq.com/@zellyn/apple-ii-ntsc-emulation-openemulator-explainer https://observablehq.com/@zellyn/apple-ii-ntsc-emulation-ope... I also ported it to JavaScript (linked from above page)
- gblargg 5mo agoI educated anyone who asked about the NTSC filter over the years because I wanted to see less-optimized implementations of it, given how much faster hardware is than the mid 2000s (it precalculated the kernels for every color at every phase offset and did the signed RGB math during rendering). There's something satisfying about being able to recreate the peculiarities of old hardware we grew up with, as a way of demystifying it.
- deleted 5mo ago[deleted]
- therepanic 5mo agoIt looks quite unusual, I will definitely try it.
- rpastuszak 5mo agoGreg! I love this!!! Just last night I was trying to rewatch the x-files and was telling Luna that I would need to get a TV filter/shader/overlay thingy to see it the way it was meant to be seen. You mind reader you
- gregsadetsky 5mo agoRafał!!! U+1F62D U+1F62D U+1F62D!!!! haha I'll email you. sorry everyone, just two pal's pall'ing around xx
- agentifysh 5mo agoheres a test output it looks convincing https://x.com/AgentifySH/status/2063351105162224119 https://x.com/AgentifySH/status/2063351105162224119
- esafak 5mo agoYou need the 80s soundtrack for the full effect: https://www.youtube.com/watch?v=8oVfIFrpslI https://www.youtube.com/watch?v=8oVfIFrpslI
- ClikeX 5mo agoI'm flooded with nostalgia.
- BobbyTables2 5mo agoVintage 16x9 TV memories (;-> I wish my VCR was that good in LP mode back then!
- BigTTYGothGF 5mo agoIdle thought: I don't think I've ever seen one of these TV emulator things implement the situation where the vertical oscillator was slightly wrong and you get the picture slowly looping up the screen.
- gregsadetsky 5mo agoI actually posted ntsc-rs as it came up in my research - I'm also looking for something like what you're describing..! I was also looking into https://codeberg.org/fsphil/hacktv https://codeberg.org/fsphil/hacktv which generates a variety of different analog tv signals (meant to be broadcast using HackRF) - but yes, I want the opposite - an analog-receiver-emulator...? And one that would be "ok" with incorrect signals // fail like an analog TV would... :-)
- picofarad 5mo agoSlow scan and fast scan television encoders and decoders exist, probably the algorithm is public domain, so you can just increase the bandwidth and speed until you get what you're looking for, then you can tamper with IQ .wav files to edit the "signal". It can't be that hard for someone with skill and determination!
- superdisk 5mo agoThis one does. You can configure the noise injected into the signal and when it gets too much, it loses sync and the picture starts rolling. It's actually a software NTSC modulator/demodulator, not just an effect to simulate it. https://github.com/LMP88959/NTSC-CRT https://github.com/LMP88959/NTSC-CRT
- fnord77 5mo agoGreat, now I won't be able to trust that old videos aren't AI slop either.
- quantummagic 5mo agoI hope this leads to people being interested in more and larger public gatherings. Seeing things with our own eyes and having fun with other real people.
- elpocko 5mo agoThis will be the thing that does it. That sounds reasonable.
- Velocifyer 5mo agoYou can always use a VCR.
- joshuamcginnis 5mo agoI wonder if any of this was used to produce Backrooms
- modinfo 5mo agoTo have true VHS effect, I think we should train AI for this, examples from digital videos to record on true VHS tape, on multiples VHS devices then digitalize and calculate difference between original and digitalized from VHS. Then even we could have filter like: VHS Panasonic, VHS Sony... This would be very interesting project.
- marginalia_nu 5mo agoCan't you just cut out the AI from this pipeline by recording footage onto VHS and then digitizing that?
- caminanteblanco 5mo agoI think the idea would be allowing arbitrary videos to be converted without the need for a working tape drive
- jmbwell 5mo agoI might argue that generating and decoding an actual NTSC signal, as the OP project does, would be true in ways that a generative model based on all of that would not be.
- sillywalk 5mo agoI was immediately reminded of the fake VHS line artifacts for Stranger Things - A Bad Lip Reading[0], which I assume are sort of a bit about the fake film grain things during the opening titles in the Stranger Things show. [0] https://www.youtube.com/watch?v=S-4rhjO6xYg https://www.youtube.com/watch?v=S-4rhjO6xYg
- npunt 5mo agoTime to wheel out one of my favorite quotes about the signature of a medium: "Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature. CD distortion, the jitteriness of digital video, the crap sound of 8-bit - all of these will be cherished and emulated as soon as they can be avoided. It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart. The distorted guitar sound is the sound of something too loud for the medium supposed to carry it. The blues singer with the cracked voice is the sound of an emotional cry too powerful for the throat that releases it. The excitement of grainy film, of bleached-out black and white, is the excitement of witnessing events too momentous for the medium assigned to record them." - Brian Eno
- Kaliboy 5mo agoI never heard of this quote, but "heard" something similar a while ago, must have been 2020. I was watching a live worship session on Youtube and it was beautiful, kept my mind at peace. Now mind you at the same time I was also a perfectionist, which means you tend to see imperfections in others. Now at a certain point the singer's voice broke as she was hitting a high note. But before I could mentally register the imperfection I heard or felt such a clear gentle voice that said: "that was the most beautiful part". In an instant it reframed the imperfect into perfect for that moment and thus forever. And that's what your quote encompasses. Good read, thanks for sharing.
- 101008 5mo agoIn the same vein, the most beautiful part of Patti Smith performing "A Hard Rain's A-Gonna Fall" at Nobel Prize Award Ceremony is when she mistakes the lyrics. Whenever I need to cry, I watch that video.
- npunt 5mo agoCracks in the voice are so visceral. One I love is in the Rolling Stone's Gimme Shelter, Merry Clayton is just about screaming and her voice cracks and they kept the band's cheering reaction to it on the record [1]. Truly a case of the subject matter trying to break out of the medium. Related is that a lot of cultures embrace intentional imperfections in art for spiritual reasons, as it conveys authenticity and humility in the face of perfection. E.g. Persian flaw [2]. [1] https://en.wikipedia.org/wiki/Gimme_Shelter https://en.wikipedia.org/wiki/Gimme_Shelter [2] https://en.wikipedia.org/wiki/Persian_carpet#cite_note-68 https://en.wikipedia.org/wiki/Persian_carpet#cite_note-68
- peacedrone 5mo agoJust installed the OpenFX plugin and tested in DaVinci. It runs snappy and looks awesome with tons of control. It can go from subtle to soup. It really starts getting interesting when you automate the params. Appreciate that this is rooted in actual emulation. I'll definitely use this in my edits. Good find!
- MycroftJones 5mo agoFantastic! Is there something like this also for the scratch and hiss of old LP vinyl records? And the various types of squeals, crackles and fuzz of old ham radio setups? Never found anything that can really simulate those well.
- 1bpp 5mo agoI used to play with the free iZotope Vinyl VST, it does a decent job at emulating pop/hiss, wow/flutter, and frequency response. For ham radio-like sounds, maybe use SDR software like SDR++ and just pipe in a regular audio input, then mess with the decoding settings like LSB/USB.
- myself248 5mo agoThe trick is that the scratches need to recur at the right revolution rate, while the bandwidth needs to slowly decrease as the stylus nears the end of the groove. Hmm.
- liampulles 5mo agoI'll wait until they do some PAL emulation: take an NTSC source, blurrily upscale it to 576p, apply a crap deinterlacing algorithm to produce a technically progressive image, and some frame blending to get it to 25 fps. Shitorific.
- RgrTheShrubbr 5mo agoAre there audio emulators out there that simulate VHS compressed warped audio?
- gsich 5mo agoVHS audio was superb.
- RgrTheShrubbr 4mo agoIt really was. I recently got on the VHS bandwagon and the audio feels much more richer to me than say a blu-ray or streaming copy. There's something about the imperfections that resonates with me.
- gsich 4mo agoNot only that but VHS gained "Hi-Fi" in the 80ies. Only a CD had higher quality, but considering the equipment it was played probably not by much.
- atum47 5mo agoThat's nice. I've always been a fan of this effect. I myself was working on something (way simpler) in the past. I was just getting a pixel splitting into three separate values (r,g,b) and plotting them side by side to emulate LED behavior. I end up creating an image that you can use on your website to give the impression of lines - https://github.com/victorqribeiro/oldTerminal https://github.com/victorqribeiro/oldTerminal (that was the best I was able to do without using canvas, for the web). Some day I might try it again using modern css
- fs90 5mo agoThat's interesting!
- 1xn 5mo agothis is really good effect, fantastic output. I had VCR as a kid :-) Gonna have a look at it, specially as it is a Rust project. :clap clap: Thanks for posting this.
- ramses0 5mo agoI'm stupefied by the accuracy of the SP/LP/EP rendering differences. Apart from how "accurate" everything is, that one pushed it way past the uncanny valley and into "oh yeah, that's pretty much exactly what it looked like!"
- Vaslo 5mo agoVery cool but the number of settings is overwhelming, not even sure what to do.
- mrandish 5mo agoThis is no doubt a useful production tool when one needs to create the visible artifacts of VHS video for some motivated story reason but as someone who worked in the tech side of broadcast video production starting near the end of the analog era and through the transition to digital, I'm not generally a fan of doing so outside those specific contexts. The reason is that full bandwidth 6 Mhz analog composite or component video could look wonderful. If you ever have the chance to see a 2-inch quad VTR playing a master tape on a broadcast quality monitor pleased do. I suspect you'll be shocked at how good it looks, even to modern eyes. Yes, the absolute resolution is lower, but the magic of those analog broadcast standards was how gracefully they fit so much image into 6 Mhz of bandwidth. Conversely, VHS tape recording was the absolute worst, most compromised form of that. At the time, it was the best that could be done at consumer prices. But no one ever thought it was remotely good quality in any sense other than perhaps "better than nothing", and even that was hardly unanimous. There's something about full bandwidth broadcast quality analog composite video that can be genuinely aesthetically pleasing, even compared to digital HDTV. Sadly, very few consumers ever got to see it in its pure, unadulterated form. Even live broadcasts, after being sent up a transmitter tower and down an aerial antenna, were a decimated form of the original signal at the head end (although leagues better than VHS). Yes, modern digital IS better in almost all ways, but in a few ways there was, and still is, something uniquely 'good' about that analog head-end video signal. I won't say 'better' because that's an aesthetic and stylistic judgement but definitely 'good'. Whereas, there's literally nothing good about VHS. At no point ever did a 1980s video creator look on their equipment shelf, see a VHS camcorder next to... literally any other camera or recording system, and say "I'll take the VHS today because it's the better tool for this job." There's one context where I'm a huge proponent of recreating our analog past and that's when viewing 1980s and early 90s computer or game console graphics created to be displayed on 15khz analog composite video displays. That's when analog CRT emulation via GPU pixel shaders should always be used. The square razor sharp, hard-edged pixels of such content as seen on modern digital flat screens is an inaccurate distortion of the past because no one in that past, like the people involved in the creation or consumption of that media, ever saw square pixels like that. The only displays we had then were CRTs and images made for 15 Khz analog CRTs look not only different but much better on the displays they were designed on and for (or a good simulation of those displays).
- BashagtBot 5mo ago[dead]
- mgaunard 5mo agoWhy so much love for NTSC and so little for PAL and SECAM?
- emayljames 5mo agoInterlacing is synonymous with 80's/90's video
- mgaunard 5mo agoPAL and SECAM are also interlaced. Except PAL/SECAM don't have any of the color issues of NTSC.
- cf100clunk 4mo agoPAL's lower frame rate made for visible flicker, which viewers conditioned to NTSC could wearily detect.
- mgaunard 4mo agoFilm is 24fps which is lower than PAL. The 30fps of NTSC is actually associated with "cheap-looking" video.
- cf100clunk 4mo agoNTSC's rate was 29.97 and its lesser line count made images seem blurry to those who were used to PAL and SECAM. Folks viewing PAL after NTSC felt that the flicker caused eye fatigue.
- grishka 5mo agoWell I made this: https://github.com/grishka/miscellaneous/tree/master/AVDecoder https://github.com/grishka/miscellaneous/tree/master/AVDecod...
- pipes 5mo agoCan anyone explain how this is different than shaders in retro arch?
- zzo38computer 5mo agoI had written a NTSC emulator in C, based on some other equations I had found, although it expects command-line arguments to control many things (such as the phase), and expects a grey scale farbfeld picture as input and produces farbfeld as output, so it is with still pictures rather than videos.
- throwaway2046 5mo agoCould you provide a link to your project?
- zzo38computer 4mo agoThe server is down, but I copied the C code to here #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAU (6.283185307179586476925286766559005768394) static unsigned char head[16]; static float fopt[127]; static int iopt[127]; static float*tab; static float*buf; static float y,i,q,v,phase; static int n,s,width; #define R(a) ((a)>=0?buf[a]:0.0) #define C(a) (tab[((a)+iopt['t']+(int)fopt['m'])%iopt['t']]) int main(int argc,char**argv) { fopt['1']=0.966882; fopt['2']=0.623557; fopt['3']=-0.274788; fopt['4']=-0.635691; fopt['5']=-1.108545; fopt['6']=1.709007; iopt['y']=12; iopt['i']=iopt['q']=24; fopt['y']=12.0; fopt['i']=fopt['q']=24.0; fopt['l']=-11.0; fopt['h']=92.0; fopt['c']=0.009574; fopt['s']=0.8; fopt['a']=fopt['m']=fopt['p']=fopt['f']=0.0; fopt['t']=12.0; iopt['t']=12; iopt['v']=0; iopt['z']=0; fread(head,1,16,stdin); width=(head[8]<<24)|(head[9]<<16)|(head[10]<<8)|head[11]; for(n=1;n<argc;n++) if(argv[n][0] && argv[n][1]=='=') { iopt[argv[n][0]&127]=strtol(argv[n]+2,0,10); fopt[argv[n][0]&127]=strtof(argv[n]+2,0); } buf=malloc(width*sizeof(float)); tab=malloc(iopt['t']*sizeof(float)); if(!buf || !tab) { fprintf(stderr,"Allocation failed\n"); return 1; } while(fopt['m']<=0.0) fopt['m']+=fopt['t']; while(fopt['p']<=0.0) fopt['p']+=fopt['t']; if(!iopt['v']) iopt['v']=(3*iopt['t'])/4; for(n=0;n<iopt['t'];n++) tab[n]=sinf(fopt['f']+TAU*((float)n)/fopt['t']); fwrite(head,1,16,stdout); if(iopt['z']) for(;;) { if(!s) y=i=q=fopt['a']; n=fgetc(stdin); if(n==EOF) break; n=(n<<8)|fgetc(stdin); buf[s]=v=(fopt['h']-fopt['l'])*((float)n)/65535.0+fopt['l']; fgetc(stdin); fgetc(stdin); fgetc(stdin); fgetc(stdin); // unused input channels y+=v-R(s-iopt['y']); i+=v*C(s)-R(s-iopt['i'])*C(s-iopt['i']); q+=v*C(s+iopt['v'])-R(s-iopt['q'])*C(s+iopt['v']-iopt['q']); // Red v=fopt['s']*y/fopt['y']; n=(int)fmax(fmin(v*65535.0,65535.0),0.0); putchar(n>>8); putchar(n); // Green v=fopt['s']*i/fopt['i']; n=(int)fmax(fmin(v*65535.0,65535.0),0.0); putchar(n>>8); putchar(n); // Blue v=fopt['s']*q/fopt['q']; n=(int)fmax(fmin(v*65535.0,65535.0),0.0); putchar(n>>8); putchar(n); // Alpha putchar(fgetc(stdin)); putchar(fgetc(stdin)); if(!(s=(s+1)%width)) fopt['m']+=fopt['p']; } else for(;;) { if(!s) y=fopt['a'],i=q=0.0; n=fgetc(stdin); if(n==EOF) break; n=(n<<8)|fgetc(stdin); buf[s]=v=(fopt['h']-fopt['l'])*((float)n)/65535.0+fopt['l']; fgetc(stdin); fgetc(stdin); fgetc(stdin); fgetc(stdin); // unused input channels y+=v-R(s-iopt['y']); i+=v*C(s)-R(s-iopt['i'])*C(s-iopt['i']); q+=v*C(s+iopt['v'])-R(s-iopt['q'])*C(s+iopt['v']-iopt['q']); // Red v=y*fopt['c']/fopt['y']+i*fopt['1']*fopt['c']*fopt['s']/fopt['i']+q*fopt['2']*fopt['c']*fopt['s']/fopt['q']; n=(int)fmax(fmin(v*65535.0,65535.0),0.0); putchar(n>>8); putchar(n); // Green v=y*fopt['c']/fopt['y']+i*fopt['3']*fopt['c']*fopt['s']/fopt['i']+q*fopt['4']*fopt['c']*fopt['s']/fopt['q']; n=(int)fmax(fmin(v*65535.0,65535.0),0.0); putchar(n>>8); putchar(n); // Blue v=y*fopt['c']/fopt['y']+i*fopt['5']*fopt['c']*fopt['s']/fopt['i']+q*fopt['6']*fopt['c']*fopt['s']/fopt['q']; n=(int)fmax(fmin(v*65535.0,65535.0),0.0); putchar(n>>8); putchar(n); // Alpha putchar(fgetc(stdin)); putchar(fgetc(stdin)); if(!(s=(s+1)%width)) fopt['m']+=fopt['p']; } return 0; }
- alok-g 5mo agoCould this be used for training AI to do the reverse, i.e., generate high-quality videos from older analog TV and VHS artifacts? Start from high quality videos, use this or a similar library to generate analog/VHS videos that now have the ground truth available, train AI from the data.
- Ylpertnodi 5mo agoReddit - ukrainewarvideoreports - the Ukrainians are taking their relatively poor 'Last frame' drone shots and ai-ing them to be shockingly-detailed images of people about to die.
- grishka 5mo agoRelatedly, I recently made a software decoder for SECAM and PAL: https://github.com/grishka/miscellaneous/tree/master/AVDecoder https://github.com/grishka/miscellaneous/tree/master/AVDecod... Though in my case the purpose was to digitize my video tapes and teach myself about DSP.
- throwaway2046 4mo agoLooks interesting... Is there an equivalent encoder that can be used with this to generate VHS footage purely in software?
- grishka 4mo agoThere's this: https://codeberg.org/fsphil/hacktv https://codeberg.org/fsphil/hacktv It's not "VHS footage" though, but it can generate all kinds of analog video signals, some of which my decoder can decode.
- T3RMINATED 4mo ago[dead]