Can converting 8-bit 4:2:0 UHD to HD really give you 10-bit 4:4:4 video?

As you might guess from the title, this post is mainly of interest to people involved in digital video, and it’s fairly technical, but experience suggests some people out there will find it interesting, so here goes.

If you have a solid grasp of what the numbers and abbreviations in the title refer to, you may want to jump ahead to the conclusions. Otherwise, here’e a quick review of 4:2:0, 4:4:4, 8-bit versus 10-bit, and all that.

What the numbers mean and why they’re important

Just like a movie on film, digital video is a rapid sequence of pictures. In digital video each picture is a rectangular mosaic of little squares called “pixels.” Actually, in standard definition and in interlaced video, the pixels aren’t necessarily square, but we’re not talking about that here. All we’re concerned about are high definition (specifically 1080p) and ultra-high definition. These are commonly abbreviated HD and UHD.

(UHD is sometimes called “4K,” but I think it’s better to reserve the terms “2K” and “4K” for the 2K and 4K standards for digital cinema. More on that below.)

Each HD picture consists of an array of 1920 pixels horizontally and 1080 vertically. UHD is double that in each dimension, 3840 by 2160, for four times the total number of pixels. (But despite what some advertising hype claims, that gives UHD twice the resolution of HD, not four times, given the way resolution is defined and measured.)

Pixels have color as well as brightness, but because our eyes are less sensitive to resolution in color as opposed to black and white, we can save digital storage space and bandwidth by storing color information only every other pixel, both vertically and horizontally. For historical reasons this is referred to as “4:2:0 chroma subsampling.” “Chroma” refers to color and “luma” to brightness.

(Or to be pendantic, “chroma” and “luma” are terms for the encoded, typically non-linear representation of the underlying color and brightness, which are “chrominance” and “luminance.”)

If on the other hand we store and transmit chroma information for every pixel, that’s 4:4:4. There’s also 4:2:2, which means that chroma is sampled for every other pixel horizontally but for every pixel vertically. As I explained in painful detail in an earlier post, the vertical dimension was favored mainly because of the needs of interlaced video, in which each picture (field) has half the nominal vertical resolution. For present purposes we can ignore 4:2:2, though it is commonly used in professional production, whether interlaced or not.

Each brightness measurement is encoded as a binary number and each chroma measurement as a pair of them, basically “redness” and “blueness.” If you’re wondering what happened to “greenness,” it can be deduced from redness, blueness, and brightness (the corresponding luma value).

The minimum practical size of each of these binary numbers is 8 bits, which is enough, if just barely, to allow for a smooth translation between brightness levels, at least given the right sort of encoding and not too much digital compression. Even so, you sometimes see what’s called “banding” the sky and on blank walls when watching DVDs, which use 8 bits per sample to encode the picture.

But if you’re going to tweak the image in post-production, for example for purposes of color correction and grading, it’s better to have a couple more bits per measurement. A 10-bit binary number, for example, has 1024 possible values versus just 256 for an 8-bit number.

All the foregoing applies to both HD and UHD, though the finer spatial resolution of UHD may make some limitations of 8-bit data less obvious.

What does converting UHD to HD get you?

OK, with that preamble out of the way, what’s the story on converting 8-bit 4:2:0 UHD video to 10-bit 4:4:4? Keep in mind that I’m assuming that the down-conversion is done in a reasonably smart way.

The 4:4:4 part is easy. UHD video shot with 4:2:0 chroma subsampling has 1920 by 1080 chroma measurements per image, which is exactly what you get with HD video and 4:4:4 chroma. So this part of the claim is obviously true: Converting UHD with 4:2:0 chroma to HD should indeed lead to 4:4:4, unless the conversion throws away the extra information. Of course, it might well do that, especially when finally exported into a distribution format, but if your editing and effects software and your computer hardware can handle 4:4:4, there’s no reason not to use it.

The 8-bit to 10-bit business is a little more complicated. Each HD pixel corresponds to a 4 by 4 array of UHD pixels, so to get each HD luma value we would combine the four 8-bit UHD values. But to record that result without any loss of information, we would need to use a 10-bit number (computed by simply summing the four 8-bit samples, in fact). So at least with respect to luma, there is definitely something to be said for the claim of ending up with 10-bit samples.

On the other hand, suppose the luma is uniform across the four UHD pixels. Then since the UHD pixels we’re starting with are 8-bit pixels, they can each register only one of the 256 possible values for an 8-bit image. Adding those four identical luma values together isn’t going to get any gradations between those values. You can get a 10-bit number all right, but the last two bits of the sum will be 00. (If it’s not obvious why, it’s because you’re in effect multiplying the 8-bit value by 4, which in binary is 100, and just as when multiplying by 100 in decimal arithmetic, the result ends in 00.)

On the other hand, if there’s a gradual gradation in brightness across the area, which there often will be, you would probably end up with 10-bit luma numbers that aren’t just padded 8-bit numbers. That means that using 10-bit samples for luma is likely preserving some information, even it’s not exactly identical to what you’d get from shooting 10-bit video to start with.

Finally, since with 8-bit 4:2:0 UHD there is only one chroma sample for each four pixels, the chroma samples after conversion are essentially what you’d get from a camera with 8-bit 4:4:4 chroma. So while you do wind up with more spatial chroma resolution, you’re not really getting any more in the way of subtle gradations in color as opposed to brightness. Each pixel is still going to be limited to 256 possible values each for “redness” and “blueness,” even if you pad them out to 10 bits by appending zeros (which is what should happen for consistency with the luma).

So basically, in terms of bit depth, converting 8-bit UHD to 10-bit HD doesn’t really give you the same as you’d get from a camera shooting 10-bit HD video.

Now, what does this mean in terms of things we actually care about? I think the advantages for 10-bit 4:4:4 over 8-bit 4:2:0 are

  • pulling chroma keys in green-screen or blue-screen work,
  • avoiding banding and blotching artifacts on bare walls, the sky, and the like, and
  • getting decent results from color correction and grading.

Taking each of these in turn:

Chroma key

Having 4:4:4 chroma should maximize spatial resolution in chroma keying, so this would appear to be an unambiguous true advantage of shooting in UHD and down-converting over shooting HD even when both start out 4:2:0.

Banding and blotching artifacts

With 8-bit images you will sometimes see blotches on a blank wall and banding in a clear blue sky as a result of gradual changes in brightness and color and the limited number of distinct values that can be represented with 8 bits per sample. (I suspect compression enters into this as well.) True 10-bit images are much less likely to be afflicted by this. The good news is that if we’re talking about changes in brightness across an image, adjacent UHD pixels should have slightly different 8-bit values and this should translate into more gradations of 10-bit pixel values after UHD to HD conversion. So I think this should avoid or at least greatly reduce the banding and blotching problem, at least in terms of brightness gradations as opposed to color gradations.

One reason I think this is true is what Dave Dugdale’s tests showed in this YouTube video. Basically, UHD 8-bit video was pretty much as free of banding in a blue sky as 10-bit HD video.

Color correction and grading in post-production

There seems to be agreement that simply transcoding HD 8-bit material to 10-bit for post work helps with color grading (though I’m not going to go off on a tangent about why). With 10-bit HD downconverted from 8-bit UHD I’d expect this to hold true or even slightly improve (because of the additional information in the luma channel).

Note that I haven’t done my own tests to verify my theoretical musings, so don’t take this as authoritative. Then again, shooting UHD and converting to HD may be the only practical way most of us can get 4:4:4 HD, at least with affordable equipment available today.

For more on this subject, including some ideas for how best to do the down-conversion, see the following pages (and search the web for more recent items on the same subject, since I suspect we’re going to be hearing more about it):

Andrew Reid’s article at EOSHD.

Allan Tepper’s article at Pro Video Coalition.

Barry Green’s article at HD Warrior.

A final note on 2K and 4K versus HD and UHD

Some people refer to UHD as “4K,” which I consider a bit misleading. I think it’s better to reserve the term “4K” for the 4K standard for digital cinema. UHD is indeed quite close to 4K in resolution (and HD is close to 2K), but the digital cinema standard has more bit depth and other advantages.

The 2K frame has 2048 by 1080 pixels and 4K has (as you’d expect) 4096 by 2160 pixels. The corresponding numbers for HD and UHD are (as noted a bunch of paragraphs ago) 1920 by 1080 and 3840 by 2160.

Note that in cinema the term 2K is derived from the 2048 horizontal pixels, while in television we refer to 1080p based on the vertical pixel count. They probably do this just to mess with us.

Notice that the pixel counts for cinematic 2K and 4K imply an aspect ratio of about 1.90:1, but in practice the full frame is pretty much never used. Most movies are instead shot for exhibition at 1.85:1 (often called “flat”) or 2.39:1 (“scope”), so in practice either the top and bottom or the sides are blacked out. In 2K the actual projection standard is 2048×858 for scope and 1998×1024 for 1.85:1. In 4K the pixel counts are simply doubled.

You might be wondering about what happened to 2.35:1 and 2.40:1. The old Cinemascope 2.35 standard was actually replaced by 2.39 in 1970, but people still call it “2.35” out of habit. As for 2.40, that’s 2.39 rounded to 2.4 and a zero tacked onto the end. When you see 2.35 and 2.40 in connection with a film made since the Nixon administration, just keep in mind that both really mean 2.39 in modern cinema, no matter what IMDb and the backs of your DVDs or Blu-rays say.

(Updated 2016 June 20, September 12, and November 18 and 2017 August 14 to correct some typos and improve clarity, I hope.)



Facebooktwitterredditpinterestlinkedintumblrmailby feather

Red State Update goes Democratic

Tennessee good old boys and amateur political commentators Jackie Broyles and Dunlap somehow find themselves debating Clinton versus Sanders to their own shock. (Caution: As usual, Dunlap’s language might not be safe for basic cable.)


Link: https://youtu.be/YQCla5_DsKw

Jackie Broyles and Dunlap are in reality comedians Travis Harmon and Jonathan Shockley. For more see redstateupdate.com and the relevant article in Wikipedia.



Facebooktwitterredditpinterestlinkedintumblrmailby feather

Review: Inside Out (2015 movie)

Riley is a pre-teen girl who lives a happy life in Minnesota playing hockey and spending time with her friends and loving parents. All that abruptly comes to an end when they move to San Francisco for her father’s career and a lot of things go wrong, starting with a delay in the delivery of their furniture that forces Riley to sleep in a sleeping bag in a depressingly bare room. Even her best friend back in Minnesota seems to have moved on with her life, and Riley takes it all very hard.

We see this played out in her mind, where her governing emotions Joy (voiced by Amy Poehler), Sadness (Phyllis Smith), Anger (Lewis Black, of course), Fear (Bill Hader), and Disgust (Mindy Kaling) try to deal with the internal consequences of her external stress as they watch the major aspects of her previously happy personality gradually fall apart.

The interior world is more cartoonish in appearance and much more comic in mood than the exterior, though serious stuff happens inside as well. As usual there are numerous hidden references to Pixar and Disney and a lot of attention to fine detail in the art as well as in the story development process. Neuroscientists and psychologists were brought it to talk about how thinking actually works, and while the film makes no attempt to represent that accuracy, there are references to it, such as having short-term memories moved into long-term storage during sleep.

The premise has things in common with the sitcom Herman’s Head (1971) and the personified organs in the last and best segment of Woody Allen’s Everything You Always Wanted to Know About Sex *But Were Afraid to Ask (1972), which in turn was a parody of Bell Labs science specials from the 1950s (in particular Hemo the Magnificent, originally broadcast in 1957).

A British comic strip called The Numskulls, which dates back to 1962 and is now published in a children’s magazine called The Beano, is also about characters inside someone’s head (someone named Edd). These characters personify functions—thinking, vision, and so on—rather than emotions, but huge numbers of people in the UK insist that Inside Out is a deliberate ripoff of The Numskulls. The strip’s creators dispute that, but they did publish a strip about it you can find here.

Of course, Inside Out’s antecedents go back a lot farther, at least to such works as Piers Plowman and Pilgrim’s Progress, in which the characters are personifications of abstractions and traits. In fact, Inside Out may come closer to a Christian allegory with the religion left out than to anything else.

I don’t think its Pixar’s best movie, but it’s pretty good and I recommend it.



Facebooktwitterredditpinterestlinkedintumblrmailby feather

Could approval voting make jungle primaries less objectionable?

Thanks to the success of Proposition 14 in the 2010 election, California now has a nonpartisan blanket primary system for most offices at the state level. (It doesn’t affect voting for local offices or for presidential candidates.) The more picturesque term for this is “jungle primaries.” What this means is that rather than each party having its own primary, all candidates from all parties for a given office run against each other in a single primary election, and the two with the most votes face off in the general election.

There are various arguments in favor of this scheme, but it has one huge disadvantage: It easily leads to cases in which both candidates in the general election are opposed by a majority of voters. In fact, this has actually happened. In a heavily Democratic district, Democrats split their votes among multiple popular candidates, while Republicans had just two choices to vote for from their own party. The result was that the two Republicans were the ones who made into the general election in the majority-Democratic district. (If you’re a Republican this might amuse you, but keep in mind that the reverse situation could easily occur as well.)

As a result, many people in California would like to see a return to traditional partisan primaries, and there’s a lot to be said for that. But an alternative I haven’t heard discussed would be to let primary voters use what’s called “approval voting.” In approval voting you cast a vote not just for your favorite choice but for every candidate you’d consider acceptable, however many that might be. The top two candidates, the two declared at least acceptable to the greatest number of voters, would then face off in the general election.

The obvious problem is that there would be no way in the primary for voters to distinguish a candidate they strongly prefer from one they deem a distant but still tolerable second or third or sixth choice. But no voting system is perfect. That’s literally true at the level of mathematics, in fact, in that it can be proven that a very brief and reasonable set of desirable attributes cannot be satisfied simultaneously. At least an approval-voting-based jungle primary would be trivially easy to implement and would usually avoid a situation in which the majority voters in the general election face a choice between candidates both of whom they intensely dislike.



Facebooktwitterredditpinterestlinkedintumblrmailby feather

Bear with me a minute on Trump

You’re probably sick of hearing about this guy, but there are a few things I read today that I think people really need to be aware of.

For a start, there’s Trump’s PR stunt claiming to raise money for veterans, one counter-programmed against a GOP debate Trump didn’t want to attend. It’s now clear that Trump and his spokespeople made a series of false statement about the event and the result, and it appears that Trump did not donate the $1 million he’d promised until more than four months later, after negative press reports were starting to make him look bad. Josh Marshall has a good, brief summary here. He concludes,

We should not lose sight of the fact that at the end of the day, almost $6 million went to apparently worthy organizations helping veterans. We should also not lose sight of the fact that Trump repeatedly lied about the money and seemed to be hoping to get away without contributing any of his own money at all, despite repeatedly taking credit for doing so.

Then there’s Trump University, a fairly standard sleazy get-rich-in-real-estate seminar scheme of the sort long pushed in late-night infomercials (though not quite so often as a few years back). The initial seminar turns out to be a source of some basic information of the sort you can find in a library or on line combined with a high-pressure sales pitch that if you really want to succeed you need to pay for additional training and coaching. According to various reports, only one of the supposed real-estate experts “hand-picked” by Trump as instructors had ever even met him, and they were told to pressure the students, many of them retirees hoping to live out their days in greater comfort, into maxing out their credit cards and applying for new ones in order to pay stiff fees that could reach $35,000. Kevin Drum quotes a number of damning items from just-released court documents in this brief blog post, and it’s also worth reading what Josh Marshall has to say about it.

Finally, one more item worth reading (from Josh Marshall quoting Mark Cuban), questions why, if Trump really is worth over $10 billion as he claims, he would stoop to so many embarrassingly sleazy things. Trump’s federal election campaign reports indicate he has $165 million in liquid assets such as securities and cash. That’s obviously a lot of money, but it seems odd for a self-described multi-billionaire to have less than two percent of his assets in stocks, bonds, and cash. Others have speculated that he won’t release his income tax returns, as presidential candidates have routinely done for decades, because the returns would show him to be rich but far less so than he claims to be.

(Update 2016 June 4: Apparently $35,000 wasn’t the upper limit of charges from Trump University, some paid tens of thousands more. They were apparently pressured to believe that they would easily make so much money by following the “secret” methods taught in the courses that paying off the credit card charges would be a breeze. Nope.)



Facebooktwitterredditpinterestlinkedintumblrmailby feather

Review: Jesse Stone: Lost in Paradise (2015 movie)

CBS broadcast eight Jesse Stone TV movies from 2005 until 2012 that starred Tom Selleck as a former Los Angeles cop turned chief of police of Paradise, a fictional town in Massachusetts. The movies were based on a series of mystery novels by Robert B Parker, and though the Jesse Stone of the books is a few decades younger, Parker said that Selleck captured the character perfectly. (I’ve previously published reviews of the CBS Jesse Stone films and Parker’s Jesse Stone novels.)

The films proved popular and developed a loyal following, but perhaps the audiences skewed older, CBS announced after the eighth movie in 2012 that it wasn’t going air any more. Fans of the series complained loudly (not least in comments on the Jesse Stone reviews on this blog).

Selleck indicated he wanted to do more, and when the Hallmark Movies & Mysteries cable channel found re-runs and marathons of the Jesse Stone films among the most popular programming on their schedule, they decided to finance at least two new ones. The first was broadcast last year, and I’m finally getting around to reviewing it.

Jesse Stone: Lost in Paradise finds Jesse still chief of police but depressed and bored, the crime rate in Paradise having fallen to the point that it no longer distracts him from his inner demons. So to preserve his sanity Jesse volunteers to consult on a case in Boston. An admitted serial killer (Luke Perry, looking even older than on 90210) for some reason denies having committed one particular murder even though it matches his unusual pattern, even down to details never made public. There seems to be no reason for him to lie about it, but if he didn’t do it, who did?

In the meantime, Jesse deals with a domestic problem back in Paradise, where most of the policing in Jesse’s absence is handled by his younger protégé Suitcase Simpson. The other members of the Paradise force don’t appear in this film, but Jesse does run into other series regulars.

It’s about average for the series, perhaps better than average in terms of the mystery plot, and fans should be delighted to have Jesse back. I’m not sure when the next film airs or whether there will be more. If anybody runs across answers to either of those questions, please let me know.

Here’s an early scene from the film:


Link: https://youtu.be/vStlfkWpVjo

And as I previously mentioned in my post about the Jesse Stone movies on CBS, there’s a Jesse Stone trivia quiz here courtesy of the Hallmark Movies & Mysteries Channel.



Facebooktwitterredditpinterestlinkedintumblrmailby feather

Typo of the week: Giant carnivorous what?

A roundup of science news (link) on MSNBC’s Rachel Maddow Show blog includes this rather disconcerting entry:

I suspect that last word should actually be “plants,” specifically a recently described species of sundew named Drosera magnifica that’s 123 centimeters [4 feet] tall and was oddly enough first noticed by scientists in photos posted on Facebook. It’s endangered and as far as is known lives only on a single mountaintop in Brazil.

But then again, the item appears under a picture of Mars, which (as the immediately preceding science news item mentions) is creeping suspiciously closer to us of late.



Facebooktwitterredditpinterestlinkedintumblrmailby feather

The economics of immigration

Ukrainian-American comedian Yakoff Smirnoff once said that when he became a naturalized American citizen the first thought that entered his mind as an American was “I hate these foreigners. They come here and take our jobs!”

And of course that’s a concern a lot of people have, and not just on the low end of the income scale. Software developers and engineers have complained for some time that they used to make more they had to compete with an influx of foreign workers admitted under the H1-B visa program for highly skilled guest workers. (The H1-B program has been criticized as being unfair to foreign workers as well, since the visa basically ties them to a single employer who can threaten them with deportation.)

But economists across a broad political spectrum tend to agree that immigrants are a net economic benefit to the country. Yes, they compete for jobs, but they also spend money, which creates more demand and results in economic growth. Here’s a segment on that from the Crash Course Economics web series:


Link: https://youtu.be/4XQXiCLzyAw



Facebooktwitterredditpinterestlinkedintumblrmailby feather

Now even relatively young people can feel old

The latest XKCD web comic:

Feel Old
Link:
http://xkcd.com/1686/

In more or less the same vein, consider this:

Below courtesy of YouTube are the first two episodes of the Buck Rogers Saturday matinee serial starring Bust Crabbe, which premiered in 1939, the same year as The Wizard of Oz and Gone with the Wind. Star Wars came out 38 years later, in 1977.

But from 1977 to now was 39 years. So the original Star Wars was closer in time to that Buck Rogers serial than to today. If you’re old enough to remember when Star Wars was released, you’re old, or at least bearing down on that status.


Link: https://youtu.be/iTtc-u3zFGk

Incidentally, 40 years after the Buck Rogers serial there was a Buck Rogers television series starring Gil Gerard. In one episode Buck has the following two brief but amusing radio exchanges with a fellow space pilot played by Buster Crabbe (as “Brigadier Gordon,” an obvious reference to Flash Gordon, another popular space adventurer from the comics portrayed by Crabbe in serials earlier in the 1930s).


Link: https://youtu.be/TVf00anmpxM



Facebooktwitterredditpinterestlinkedintumblrmailby feather

The North Carolina legislature versus democracy

Early voting starts tomorrow here in North Carolina for a special election. The primary will select each party’s candidates for congressional representatives based on a new district map. The whole process is tainted by political corruption and efforts to stop legitimate voters from voting.

Even where that’s not the intent, it’s likely to be the effect of some policies. For example, where I live, which doesn’t have a bad record with respect to voter suppression, there will be a single polling place open in the entire county, both for early voting and even on election day, and it has very limited parking. I don’t think this is a deliberate voter-suppression effort, just an attempt to save money on what will probably be a very low-turnout primary anyway. But the practical effect will be to discourage a lot of people from voting if they lack transportation or simply aren’t aware of that their regular voting place will be closed.

If you’re a North Carolina voter you can find out more about the primary here. Contact your county’s elections office for information on where to vote, how to obtain an absentee ballot, and so on.

This extra primary is necessitated by a federal court’s rejection of the state’s racially gerrymandered map of congressional districts. The new map is still gerrymandered — as the Republican-controlled legislature openly admits — but now it’s said to minimizing the number of Democrats elected rather than packing black voters into a few districts. (Yes, both parties do this kind of thing. That doesn’t make it right.)

Moreover, in North Carolina (as in a number of other states), voters now must present one of a very limited set of photo IDs in order to vote. In theory there is an alternative for people who have had serious trouble obtaining a photo ID, but it’s not clear how well this works in practice. Requiring an ID is the sort of thing that sounds quite reasonable. After all, we don’t want people voting illegally. But the reality is that the requirement does vastly more harm than good to the integrity of elections.

Making voters show an ID addresses only one type of election fraud (voter impersonation) and that type happens to be the rarest and least effective way of influencing the results. Voting more than once by pretending to be someone else risks a felony conviction for the privilege of standing in line to cast just one fraudulent vote at a time. There are way, way easier ways to tamper with an election.

And in practice there is no evidence that it occurs more than in extremely rarely cases, or that it has changed the outcome of even a single election.

Moreover, consider how many college students use fake IDs to buy alcohol. If there ever were an organized attempt at voter impersonation, the people doing it would surely produce high-quality fake IDs. In short, requiring voter IDs is not just a solution to a virtually non-existent problem, it’s a solution that doesn’t even work.

But that’s not the bad part. The bad part is that while voter impersonation doesn’t affect elections, voter ID laws unquestionably do, by stopping legitimate voters from casting their ballots. Hundreds of thousands of people are without any of the few types of ID deemed acceptable, and most of the people in question are poor, very young, very old, or handicapped.

Yes, for most of us having a photo ID is no big deal, although it’s surprising how rarely I’m actually asked to who mine. I mainly use it when going through airport security, but that’s because it’s inconvenient not to; there are alternatives to a photo ID for purposes of airport security. (Think I’m wrong? The TSA says I’m not.) But people who don’t drive and don’t normally need a state-issued ID often don’t have one, or else they have an ID (such as a student ID) that voter ID laws typically don’t allow. For many people in many places getting a required type of ID can be a major pain in the neck if they don’t drive.

So voter ID laws not only fail to protect the integrity of elections, in practice they massively harm that integrity. If you understand the facts, it’s hard not to be enraged by this, especially if you realize that the laws aren’t just the result of a well-intended mistake but quite often a deliberate attempt to reduce the number of votes from people who are very young, elderly, poor, or handicapped, the very people who often tend to vote more for Democratic candidates. That’s why the politicians pushing for voter ID laws are almost without exception Republicans.

I should add for purposes of clarity and fairness that North Carolina’s legislature, for all its flaws, did at least include in its voter ID bill an alternative for voters without an ID, namely the ability sign statement explaining why it was not practical for the voter to get an ID. But in practice this may be little more than a cosmetic solution, and again, requiring an ID to vote is simply not justified.

For more on this, see this brilliant, informative, infuriating, and funny 14-minute exposé from John Oliver:


Link: https://youtu.be/rHFOwlMCdto



Facebooktwitterredditpinterestlinkedintumblrmailby feather