When uploading long-form video to YouTube, I always get this warning message:
Your videos will process faster if you encode into a streamable file format.
From what I can gather from around the web, this means that YouTube will try to encode chunks from the video as it is still uploading. This also allows them to spread out this single encode job to multiple machines, optimizing load across their nodes and speeding up the process.
In order to do that, they need to know how the data inside the file is laid out. This information is stored in the moov atom of the video container. When locally encoding the file, this information only becomes available at the end of the encode and is therefore appended at the end of the file.
To move the moov atom to the front of the file, one may use the “Fast Start” option of the encoder. QuickTime and others do this in their GUI, ffmpeg users can use the -movflags faststart option, and one may use the qtfaststart script after encoding.
But: YouTube still gives me the warning with properly formatted files, there is no thumbnail during upload, and processing takes hours. Is there anything else I’m missing?
Update: I got a note from someone who should know, thanks!
Moving the moov atom to the front using qtfastart should do it.
There could be a youtube bug.
There could be an issue with [you] doing it wrong.
Stick h.264 + aac in an mpeg 2 transport stream or a mkv file, and try that?
So for now I consider YouTube’s MP4 ingest to be buggy. And indeed, using MKV files or MPEG2 Transport Streams containing H264 + AAC works much faster and yields no warning from YouTube during upload.
Here’s a sample ffmpeg command to losslessly copy streams from an existing MP4 file to MKV. There’s no re-encoding involved and therefore this file “conversion” runs at ~100.000 fps on my Mac.
ffmpeg -i video.mp4 -acodec copy -vcodec copy video.mkv