Random Thoughts – Randocity!

ffmpeg: A recipe for HD video on portables

Posted in video conversion by commorancy on May 17, 2015

The first thing people are likely to ask about this article is how to rip a blu-ray disk. Unfortunately, I’ll have to leave that task for you to figure out. There are plenty of places on the net to find this information. I’d suggest you visit www.doom9.org and poke around there to find your answer. Once you have your HD video ripped, that’s where this article will help you produce a high quality portable video experience for your tablet or phone.

What is ffmpeg?

I’ll start with an analogy. What sox is to audio, ffmpeg is to video (and audio). Sox is a great tool if you need to manage wave files, mp3s or au files. But, these audio formats are not so great when you want to use it as a soundtrack in a video. That’s where ffmpeg shines.

Ffmpeg is a tool that converts one video + audio format into another. For example, a blu-ray disk contains a file format known as m2ts. This is a type of container that holds various types of video, audio, chapter and subtitle information (many times, several of these). However, the m2ts file, while playable with VLC, is not so playable on an iPad, iPod or a Samsung Galaxy Tab. In fact, portables won’t play the formats contained in an m2ts container. Of course, it’s not that you’d want to play this format on your tablet because an m2ts file can be 25G-40G in size. Considering an iPad has, at most, 128GB, you’d only be able to store about 3 of these honking videos.. not that you’d actually be able to play them as the format is incompatible. To the rescue, ffmpeg.

ffmpeg and video containers

The format of choice that Apple prefers is H264 + AAC. The first thing I will say about this is that the libraries needed to get ffmpeg to produce this format are not in the pre-compiled version. Instead, you’ll need to set aside a weekend to compile up the latest version of ffmpeg with the non-free libraries. By ‘non-free’, that means these libraries are potentially encumbered by copyrighted or patented code. For this reason, the pre-compiled versions do not contain such code. Therefore, it’s impossible to produce an H264 + AAC mp4 video file with the pre-compiled versions. This means you have to compile it yourself.

Explaining how to compile ffmpeg is a bit beyond the scope of this article. If you are interested in this topic, please leave a comment below and let me know that you’re interested in such an article. I will state, of compiling this, that the –enable-free option when running configure on ffmpeg is only half the battle. You first need to go get the non-free libraries and compile them up separately. Then, when compiling ffmpeg, reference the already compiled non-free AAC shared libraries so that ffmpeg can link with them. ‘Nuf said about compiling it.

The good thing about ffmpeg is that this tool understands nearly every video container type out there. This includes VOB (DVD format) and m2ts (blu-ray format). For what it’s worth, it also understands HD-DVD format even though this format is long dead.

Converting with ffmpeg

There are what seem like a ton of options when you type in ‘ffmpeg –help’. In fact, the help is so daunting as to turn off many beginners who might look for something else. Yes, there are tons of options that can tweak the resulting video file output. That’s why this article is here. I have found what I believe to be the perfect video conversion method from 30GB m2ts format to around 3GB files that fit quite comfortably on an iPad or Galaxy TabS and still retain HD quality. Without further adieu, let’s get to the recipe:

Pass 1

/usr/local/bin/ffmpeg -y -i “/path/to/input.m2ts” -f mp4 -metadata title=”movie_title” -vcodec libx264 -level 31 -s 1920×1080 -vf crop=1920:800:0:140 -b:v 3600k -bt 1024k -bufsize 10M -maxrate 10M -g 250 -coder 0 -partitions 0 -me_method dia -subq 1 -trellis 0 -refs 1 -flags +loop -cmp +chroma -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qcomp 0.6 -qmin $qmin -qmax $qmax -qdiff 4 number_of_cpu_cores -pass 1 -acodec libfdk_aac -cutoff 20000 -ab 192k -ac 2 “/path/to/output.mp4

Pass 2

/usr/local/bin/ffmpeg -y -i “/path/to/input.m2ts” -f mp4 -metadata title=”movie_title” -vcodec libx264 -level 31 -s 1920×1080 -vf crop=1920:800:0:140 -b:v 3600k -bt 1024k -bufsize 10M -maxrate 10M -g 250 -coder 0 -partitions 0 -me_method dia -subq 1 -trellis 0 -refs 1 -flags +loop -cmp +chroma -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qcomp 0.6 -qmin $qmin -qmax $qmax -qdiff 4 number_of_cpu_cores -pass 2 -acodec libfdk_aac -cutoff 20000 -ab 192k -ac 2 10 “/path/to/output.mp4

Note that the libfdk_aac is a non-free library which will not be in the free and pre-compiled version.

Two Passes? Doesn’t that take longer? 

Yes, it does. Two passes are necessary to provide the best motion quality in the video. The first pass retrieves statistics about each frame transition of the film and stores it in a statistics file. The second pass reads this very large first-pass-created (~2 GB) statistic file and uses it to creates smooth transitions between each frame of the output video. For this reason, you need to make sure to have plenty of disk space free. This two-pass system removes the herky-jerky video experience (especially with horizontal camera pans). Ultimately, what you’ll find is that the recipe above gives the absolute best quality and size I’ve yet to find from any conversion. For a 90-120 minute film, you’re looking at around a 2.5G-4G resulting mp4 for full 1080p + stereo audio. This file is compatible with the iPad and the Samsung Galaxy series.

Conversion of 90-120 minute films can take anywhere between 40 to 70 minutes for each movie conversion. You can run them in parallel on your system, but you’ll need to run them in separate directories to keep the statistics files in the first pass separate.

Stereo audio? Why Stereo?

I always convert down to stereo for good reason. These videos are intended to be used on portable devices. I’ve yet to see any tablet, computer or phone support 5.1 or 7.1 audio with the built-in audio hardware. Leaving the multi-channel audio intact is basically pointless and consumes extra disk space. Sure, if you want to export the video and audio to something like the Apple TV, it might be handy to have. But then, you’d probably want to stream the m2ts file rather than a slightly more sucky mp4. After all, converting to mp4 is equivalent to ripping a CD audio to mp3. It makes the size of the file much smaller, but is also lossy. However, in this case, sucky isn’t sucky at all and most portable devices support stereo.

In other words, the output is stereo because portable devices don’t support multichannel audio. At least, not yet.

How good is the video quality?

Excellent. It’s will not be exactly the same quality as the m2ts file (that’s not possible considering it is being compressed), but when viewing on a portable, it’s practically like watching a blu-ray disk. The video is still 1080p. It’s that good, all in about 3GB size. Note the crop size above. It is designed to remove the black bars from the top and bottom. When blu-rays are encoded, they are encoded full 16:9 even when the video may be wide screen. This means that the black bars are stored as extra video information in the video file. Removing this unnecessary black space eliminates encoding this blank video, thus reducing the size of the output file. Because these black bars are totally unnecessary, it also makes for a better viewing experience when watching the video in a picture-in-picture style window.

However, the crop value given is intended to be used with widescreen 2.35:1 and 2.39:1 films that have been produced since the mid-1970s. Widescreen films produced in the 1960s and before have a different aspect ratio and using this crop value will cut off pieces of the top and bottom. There are also some films that use unique and creative aspect ratios that may not work with that crop value. Also, many animated films are full 16:9, so you’ll want to remove the -vf crop=1920:800:0:140 argument entirely to prevent ffmpeg from cropping.

Calculate Crop

To calculate crop, here’s how to do it. The arguments are crop=:::. Here’s the table:

  • hwidth = horizontal width of input video
  • vheight = vertical height of video
  • hoffset = how much to move the video horizontally (into frame)
  • voffset = how much to move the video vertically (into frame)

Note that my crop recipe above does no horizontal cropping, but it can be done just as vertical cropping. For the vertical cropping, note that I’ve reduced the frame canvas size from 1080 to 800 to make the frame the proper aspect ratio. But, reducing the frame size from 1080 to 800 only changes the size of the video canvas. It doesn’t move the content back into frame, yet. To do that, you need hoffset and voffset. To calculate the voffset value and move the video into the newly sized canvas, you need to fill in the voffset value. To do that, subtract 800 from 1080. So, 1080 – 800 = 280. Then, divide that subtracted value by 2. So, 280 / 2 = 140. The voffset value is 140.  About cropping, one thing is important to note. If you divide the value and get floating point number like 141.2222. You can’t use this. You need to adjust the voffset value so that it is always a whole number. To do this, ensure when you subtract your vertical size from 1080, it always results in an even number so that the division by 2 also results in a whole number.

VBV underflow warnings?

Note that when converting some content, the conversion output may occasionally show VBV underflow. This is intentional. While it is possible to get rid of these warnings by raising or removing the -bufsize and -maxrate options, raising this value may also increase the size of the output movie file. This underflow warning means that there’s just too much input to be stored in the requested output bitrate. That’s why I say this video won’t be exactly identical to the input file. This selected settings given provide the perfect marriage between size, quality and functionality. If you raise or eliminate the -maxrate option to get rid of the warnings, so too will the size increase of the output video file. Because I prefer the mp4 file sizes to remain in the 2.5-4GB size range and because the VBV underflow warnings do not materially impact the resulting output file, I have chosen not fix this issue. However, if you would like to get rid of these warnings, you can remove the arguments -bufsize 10M -maxrate 10M or increase these values as you see fit. However, you might want to read this wiki article describing the interrelationships between -b:v, -bufsize and -maxrate.

Because I also want the final videos to have the most steady bitrate possible (very important for any kind of streaming), I allow the VBV underflow warnings. Removing the -maxrate and -bufsize options (to get rid of the warnings) will allow the bitrate to vary wildly at times. This can cause unsteady or choppy playback in some players, especially when network streaming. To avoid wild variability in the bitrate, I intentionally force -bufsize and -maxrate to be a specific size.

Enjoy the recipe. Hopefully, it’s helpful. If you get good results from these ffmpeg recipes, please leave a comment below. Also, feel free to tweak the recipes with however you see fit. If you find something even better than what I show above, please post a comment below and let me know what you did. I’m always interested in seeing what people can do with ffmpeg.

Advertisements

iPad, iPod, iPhone, iConsume

Posted in Apple, cloud computing, computers by commorancy on July 30, 2010

While all of these new Apple devices seem really great on the surface (pun intended), with no effective local storage, the design behind these devices offers no thought on creation or export of created content. However, the design clearly targets consumption of digital goods. Effectively, this is a one-way device for content. That is, content goes in but it doesn’t come back out. The question begs, however, does Apple think that we are only consumers now? We are now relegated to being just a bunch of ravenous money spending consumers? We don’t have brains in our heads or creativity or imagination? We’re just a bunch of finger pushing consumers with portable devices?

Consumerism

If there’s anything that Apple has done in recent years with these one-way devices, it’s to solidify consumerism. That is, to sell us products that are essentially one-way content input devices. Granted, it has a camera so we can take pictures or video. And yes, they may have even managed to get a video editor onto an iPad, but these apps aren’t designed for professional level editing (or even prosumer level editing). Sure, it’s fine for some random party or perhaps even a low quality wedding souvenir, but these consumer-centric devices really don’t offer much for creativity or imagination, let alone software development. It doesn’t even much offer a way to produce a spreadsheet or a word processor document. No, these platforms are almost entirely designed for consumption of digital goods (i.e., books, movies, magazines, music, web content, games, etc).

Lack of Creativity

These devices were designed to consume, not create. Consume, consume, consume and then consume some more. Yes, some creativity apps have popped up, but they’re more game than serious. They’re there to let you play when you’re bored. Even these creativity apps must be consumed before you can use them. As these are really read-only devices (no hard drive, external storage or other ways of getting things out of the device), these creativity apps really aren’t meant to be taken seriously. In other words, these apps are there to placate those who might think these are consumer focused only. In reality, these creative apps are shells of what a real creative app looks like, such as Photoshop, Illustrator, AutoCAD or Maya. Even prosumer apps like Poser and Daz Studio are still leaps and bounds better than anything that’s available on these iConsumer devices.

Computers vs iConsumers

Computers are designed as well rounded devices capable of not only consuming content, but creating it. That is, as a computer owner, you have the choice to both produce and consume content. Granted, there are a lot of people who have no intention of writing music, painting a digital work, developing an application or writing a novel. However, with a computer, you have these choices available. With iConsumer devices, you really don’t. On IOS 4 or even Android, these devices just don’t have enough resources to run these types of full sized apps. So, you won’t find a full Office suite on the Droid or an iPhone. Even something as big as the iPad still doesn’t have a productivity suite that would work in a proper or efficient way. Granted, Android likely supports Google Docs. But, even still, I don’t want to sit around all day pecking in information on a chicklet keyboard of a phone. Give me a solid full sized qwerty keyboard any day for creation.

Cloud Computing, Operating Systems and a step backwards

Apple definitely missed the ball on this one. With a device like the iPad without any local storage, the only way this device could actually create is by using cloud computing services. Unfortunately, Apple offers nothing in cloud computing. The iTunes store is a poor alternative to that. In fact, the iTunes store is just a store. It doesn’t offer online apps like Google Docs, it doesn’t offer any types of web based or cloud based services that the iPad can consume. The sole way to deal with the iPad is through apps that you must download from the store. Yes, there may be ‘an app for that’, but many times there isn’t.

The other difficulties with apps is that they don’t work together on the device. There is no app synergy. For example, NeXTStep (the operating system that gave birth to Mac OS X and later iOS4) was a brilliant design. It offered a system where any app could extend the operating system by adding new controls or features. New apps installed could then consume those controls within its own app framework (sometimes even launching the other app to do so). With iPhone OS (any version), Jobs has taken a huge step backwards in computing. No longer is this extension system available. Apps are just standalone things that don’t interact or interrelate to or with one another. Yes, now multitasking may be back, but they’re still just standalone things. About the extent of interrelation between apps is having one app launch Safari and open a URL. Wow.. so sophisticated.

Notebook and creation tools

Granted, there are a lot of people who’s sole goal is to consume. And yes, it’s probably true that most people only want to consume. The question is, though, do you want to give up the ability to create to only consume? That’s exactly what you give up when you buy into the iPad, iPod or iPhone. When these portable devices can clearly consume and create content equally well and don’t force consumers to make this choice when purchasing a device, then the device will have its true potential. Until then, I see these consumerist devices as easy ways to give your money away. For people who don’t need portable creation tools, that’s fine. For those of us who do, then a full fledge hard drive-equipped notebook is still the only portable device that fills this void.

Cloud Computing Standards

We are not where we need to be. Again, the iPad was a shortsighted rapidly-designed device. It was designed for a small singular purpose, but that purpose wasn’t long term designed. Sure, the OS is upgradeable and perhaps the device may get to that point. Perhaps not. Apple has a bad habit of releasing new devices making the old ones obsolete within months of the previously-new device. So, even if a device is truly capable of reaching its potential, Apple will have tossed it aside for a new hardware device 6-10 months later.

Clearly, cloud computing will need to establish a standard by which all cloud computing devices will operate. That means, the standards will discuss exactly how icons are managed, how apps are installed and how people will interface with the cloud apps. That doesn’t mean that different devices with different input devices can’t be created. The devices can, in fact, all be different. One computer may be keyboard and mouse based, another may be touch surface based. What the cloud standards will accomplish is a standard by which users will interact with the cloud. So, no matter what computer you are using, you will always consume the cloud apps the same way. That also means the cloud apps will always work the same no matter what interface you are using.

We are kind of there now, but the web is fractured. We currently have no idea how to find new sites easily. Searching for new sites is a nightmare. Cloud computing standards would need to reduce the nightmare of search, increase ease of use for consumers and provide standardized ways of dealing with cloud computing services. In other words, the web needs dramatic simplification.

Cloud Computing and the iPad

The iPad is the right device at the wrong time and consumers will eventually see this once a real cloud computing device hits the market. Then, the iPad will be seen as a crude toy by comparison. A true cloud computing device will offer no storage, but have a huge infrastructure of extensible interrelated apps available online. Apps similar to Google Docs, but so many more types all throughout every single app category. From games, to music, to video, to photography, to finance, to everything you can imagine. Yes, a true cloud computing device will be able to consume as freely as it can create. A cloud computing OS will install apps as links to cloud services. That is, an icon will show on the ‘desktop’, but simply launch connectivity right into the cloud.

Nothing says that you need a mouse and keyboard to create content, but you do need professional quality to produce professional content. I liken the apps on the iPad to plastic play money you buy for your kids. Effectively, they’re throw-away toy apps. They’re not there for serious computing. To fully replace the desktop with cloud computing, it will need fully secured full-featured robust content creation and consumption applications. You won’t download apps at all. In fact, you will simply turn your portable computer on and the cloud will do the rest. Of course, you might have to use a login and password and you might be required to pay a monthly fee. But, since people are already paying the $30 a month for 3G service, we’re already getting accustomed to the notion of a monthly service fee. It’s only a matter of time before we are doing all of our computing on someone else’s equipment using a portable device. For listening to music, we’ll need streaming. But, with a solid state cache drive, the device will automatically download the music and listen offline. In fact, that will be necessary. But this is all stuff that must be designed and thought out properly long before any cloud device is released. …something which Apple did not do for the iPad. What they did do, though, is create the perfect digital consumption device. That is, they produced a device that lets them nickel and dime you until your wallet hates you.

Tagged with: , , ,

iPad: After the dust settles

Posted in Apple, cloud computing, computers, itunes by commorancy on May 3, 2010

We are now a month post iPad launch and where are we? Some news sites are postulating the the use of iPad in the enterprise world. I can’t even fathom a use for it at home, much less putting it into the hands of corporate users. Let’s examine this platform more carefully to understand the reasons for its lack of viability in Enterprise, much less for simple home uses.

Multitasking

I know a lot of media outlets have harped endlessly on the lack of multitasking. Granted, it is a computing device and most computing devices do require some level of multitasking. I know that the iPod and the iPhone had very little internal memory (at least up to 3rd gen editions). So, it could only comfortably run one app. That was primarily a memory limitation. With the latest iPhone and iPod touch, that may have all changed. To be perfectly honest, I don’t keep up with Apple’s hardware spec details. Why? Because it’s not really that much of an interest. I mean, that’s the point. It shouldn’t be. Apple has always touted their devices ‘just work’. So, why should I need to dig inside one of their devices to find out the gritty details? I shouldn’t need to.

This issue is also what bites Apple many times over. They decide to under design the device by putting in not enough resources. So, they have to make concessions in the operating system by removing things like multitasking. Of course, with the iPod touch and the iPhone, we’re talking about very small devices that may not have the physical room to hold the amount of resources necessary to support multitasking.

The iPad’s physical size should no longer hinder their ability to put in the necessary resources to fully support multitasking (and then some). So, there is no reason why the iPad shouldn’t have supported multitasking out of the gate. But, it doesn’t. The iPhone 4.0 OS is supposed to address this issue, but not until the fall of 2010.

Multitasking and how it relates to computing

So, is it required that a PC support multitasking? Good question. It’s also a question not easily answered. In general, though, the answer should be ‘yes’. It should be ‘yes’ because the ability to run multiple apps is necessary to get things done. For example, to copy and paste between two different documents or to share information through application conduits. Even the simple act of embedding one app inside another requires multitasking. Quitting and restarting each app to move between them is cumbersome and time wasting.

In the end, yes, multitasking is required to make the computing experience be what we’ve come to expect. In the iPad, that computing experience isn’t there. So, for this reason, iPad won’t be fully accepted without multitasking. We’ll revisit this topic, however, once multitasking is (re) introduced in iPhone 4.0 OS.

Enterprise computing and the iPad

Is it ready for enterprise? I personally would say no. I’ve owned an iPod touch for several years and since the iPad really has no better selection in enterprise apps than does the iPod touch, the answer to this question is still no. Even though the screen on iPad is larger, it doesn’t offer the necessary productivity apps to fully work in a corporate enterprise. Yes, it does have a mail app. That’s a big part of what makes it work in Enterprise. Unfortunately, that mail app is so locked down and limited, that it may not fully work for the enterprise. That’s not to say that the mail app isn’t good in a pinch or to read a quick current email or two. But, don’t try to go searching for emails buried in your folders, that just doesn’t work well.

For enterprise computing, the current incarnation of the iPad is nowhere near ready.

What uses does the iPad offer?

Good question, once again. It isn’t a media PC, so that’s out. It isn’t good for enterprise level computing, that’s out. It can watch movies and read books, so coffee table literature, ok. Ignoring the touch screen and sleek design (which are just amenities, after all), it has to come down to the apps and features. The apps are limited, at this point, and I don’t really see much of that changing due to Apple’s app lockout situation.

Until Apple opens the platform up for general development, the platform will continue to be tightly controlled and, thus, limiting the applications that are available. Until this situation is resolved, this device may never end up anything more than a novelty.

HP’s slate cancelled

Looking back at history shows us that the tablet has had an extremely rocky past that always leads to failure. I’m not sure that even Apple can overcome this rocky past even with the success of the iPhone. The iPad is really too big and clunky to be truly portable. It’s too closed to allow open development. So, it’s no surprise that HP and other companies who had previously announced their intent to release a tablet are now reconsidering that release. In fact, HP announced the slate on the heels of Apple’s iPad announcement and has now cancelled the slate completely before it was even released.

Some people blame the ‘success’ of the iPad. Well, success is very much subjective. Putting 500,000 of the iPad into circulation is nothing to sneeze at. But, that doesn’t necessarily indicate success. The Newton comes to mind here. It was a hot new item that all but died in about two years. Where is the Newton now? Apple has a past history of deleting products rapidly and the iPad may be one of those items.

Apple’s past failures

If you really want an iPad, then get it now while it’s hot. Don’t wait. The reason I say this is that in 6-12 months, you could find yourself with a doorstop that Apple no longer supports. Apple has a history of killing off failing devices rapidly. So, with this particular device, don’t wait to buy it. If you wait until spring of 2011, you may find that the device is dead and buried. You could be holding a flat doorstop that iTunes no longer supports and with no active development. I can very easily see this device becoming one of Apple’s most recent failures.

Working while traveling

The tablet format has a questionable past anyway. The form factor isn’t pleasing to use. It isn’t easy to carry and, getting past the touch screen, it’s cumbersome to write text into it. So, it’s going to need a dock with a keyboard and mouse. A real keyboard and a real mouse. But, that takes the portability out of it. If you’re sitting on a plane, you’re locked into using the touch surface. Now consider that you can’t lay the device flat and work easily. I mean, you can lay it down, but then it’s not at the correct viewing angle. To get it into the correct viewing angle, you have to hold it in one hand, you have to balance it in your lap in a contorted way or you have to carry along a kickstand when you’re on a plane.

In this instance, a notebook, iphone, itouch or netbook works much better. For a netbook, the top pops open at the correct viewing angle and you have a real keyboard and mouse available. Granted, it’s not a touch surface, but that’s just a novelty anyway. Once the novelty of touch wears off, then you have to determine how to make use of this input method in an actual usable way.

Using an iPod touch or iPhone is also easy. It fits easily in one hand, is light in weight and works without the need for kickstands, contorted positions or clumsy positioning issues. Clearly, not a lot of usability was discussed when the iPad was designed. Usability is one of the things Apple usually prides itself in its designs. In the iPad, usability was clearly an afterthought.

3G iPad

This is the one and only one saving grace of the iPad. Internet everywhere is where we need to be. The supposed $29.95 monthly plan associated with the 3G version of the iPad is a reasonable price. Unfortunately, the iPad itself is marked up by an additional $130. So, instead of $499, it’s $629 (and that’s the smallest iPad). But, the iPad with 3G is the only version that I would personally consider. I already have an iPod touch and its uses are extremely limited unless you have WiFi handy (which isn’t very often). And, even when you do find a place that claims to have WiFi, 8 times out of 10, the connectivity is either slow or limited. So much for free WiFi. While 3G isn’t that fast, it’s at least always on pretty much anywhere you need it.

Form factor is the key to success

The problem with the current iPad is its size. This is the wrong form factor to release. It’s the wrong size and wrong weight. The size that the iPad should have been was about the size of a paperback book. Bigger than an iPod touch, small enough to fit in a pocket. This will take computing to the truly portable level. The screen will be bigger than a Sony PSP (which is a decent size to watch movies), but small enough to still be portable. Combine that with 3G and you have a device that people will want to use. The iPad is not that portable and still requires a case with handles. After all, you don’t really want to drop a $600+ device. But, a device the size of a paperback book at the cost of maybe $399, that’s in a price range that could work.

First Gen iPad

Remember that this is the first generation iPad. You really have to wait until the third gen of an Apple device to get to the features that make it worthwhile. The question remains, will the iPad even make it to a third incarnation? Only time will tell. Apple won’t abandon the iPhone OS on devices for quite some time. But, the form factor of the iPad is likely to change several times before it’s over. Like I said, if you want this thing, buy into it now. Otherwise, if you want to wait a year, you may not be able to get this form factor again and you may find that Apple has backtracked into smaller more portable devices.

%d bloggers like this: