Take this file, the first 10s of Hank Green's "editing challenge". It is H264 video + AAC audio. You can take that file and import it into Final Cut Pro X (FCPX for short), and edit it to your heart's content.

Now, take that file, and convert it using ffmpeg, like so:

ffmpeg -i hank_vlog_orig_short.mp4 -c:v libx265 -c:a copy hank_vlog_orig_short_hvec.mp4

...which produces this file. Same thing, but reencoded in HEVC (which FCPX supports). Only now

  1. You can't drag/import the file into FCPX (won't let you)
  2. If you have an .fcpxml file that refers to such a file, the session will be imported but instead of audio/video you'll get the "missing plugin" placeholder.
  3. Quicktime player refuses to preview/open the file

Any HEVC file created with, say, an iPhone can be readily previewed in qt and imported into FCPX. Both Adobe Premiere and VLC open and play the file just fine (though I now see that firefox just plays the audio, and does not render the video... download the file if you want to play with it).

Given that HEVC is a standard, can someone tell me

  • Why does FCPX refuse to open the file?
  • Is there some special joo-joo in Apple's HVEC files that is needed? What?
  • Is it possible to generate such a file with, say, ffmpeg, or is it only possible through AVFoundation or similar?

BTW, this is with FCPX 10.4.6, QT player 10.5, on OSX 10.14.4.

  • "why" is not really a good question here. The answer is just that standards are not consistently applied. Especially with organisations like Apple.
    – Dr Mayhem
    Apr 9 '19 at 20:51
  • Apple s/w are fussy about codec tags. Share the log of ffmpeg -i OpensInFCP.mp4
    – Gyan
    Apr 10 '19 at 6:32
  • Ok, I recorded a video with my phone, and produced this output with ffprobe (which produces the same info as ffmpeg). I did try copying the file level metadata (com.apple.quicktime.X) to no avail, though. Are the Core Media Metadata streams the secret, then?
    – Juan Pablo
    Apr 10 '19 at 12:41

Well. Turns out that if you read this guide for HLS streams, it gives a bunch of details on how the actual video formats should be set up. In particular, for HEVC, it says:

1.10. You SHOULD use video formats in which the parameter sets are stored in the > sample descriptions, rather than the samples. (i.e., Use ‘avc1’, ‘hvc1’, or ‘dvh1’ rather than ‘avc3’, ‘hev1’, or ‘dvhe’.)

So I thought I could give it a shot.

ffmpeg, by default, uses hev1. So if I take my previous command line and add -tag:v hvc1:

ffmpeg -i hank_vlog_orig_short.mp4 -c:v libx265 -c:a copy -tag:v hvc1 hank_vlog_orig_short_hvec.mp4

Presto, it works.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.