Hacker News new | past | comments | ask | show | jobs | submit login

You need `-pix_fmt yuv420p` for an iPhone to recognize a ffmpeg-encoded video file.



Do you happen to know why? Is this a hardware decode limitation perhaps, or a bug in the standard decoder?


YUV420p is the only pixel format that all H.264 compatible decoders MUST support. Other formats are optional.

In practice that means that most hardware decoders (not just iPhones, also other phones, TVs, older PC GPUs) won't be able to decode YUV 4:2:2 or YUV 4:4:4 videos.

It's kinda annoying, since YUV420 really messes up red text in screen captures for example.

You need this parameter to force ffmpeg to convert the color space if your input isn't YUV420P (it defaults to keeping the input pixel format to avoid quality loss).


>since YUV420 really messes up red text in screen captures for example

Is there an detailed explanation why red is especially bad after chroma subsampling? Have been wondering about this for awhile.

I assume it's because red has low brightness/luminance (no idea if correct or not)?


Yes, it’s because red is dim. Dark blue (like, RGB 0, 0, 255) also suffers, perhaps worse, but that shade of blue is hard to reaf even when it is reproduced perfectly.


The capture pixel format depends on device - I think 4:2:2 is pretty common for webcams, which in H.264 requires profiles that aren’t widely implemented outside of x264 and ffmpeg.


licensing for a non-free closed-source platform


and if you're encoding an x265 file, it needs

-tag:v hvc1

for iphone/quicktime to recognize it.


You also need that same parameter for transparent videos.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: