[FFmpeg-user] Modifying ProRes vendor_id metadata tag

Marcel Hinsch marcel.hinsch at kdg.at
Thu May 6 17:15:15 EEST 2021


Hi,

While working with FFMPEG's prores encoder and trying to verify its 
validity in creating files that are compliant with a certain
set of specifications, I seem to have come to an impasse.

I've managed to resolve most issues that our automated tests have issues 
with except the message that the video track
has a vendor string of "FFMP" instead of "appl".
Digging deeper with the help of ffprobe, I can confirm that that is in 
fact the case when I go into

probe->streams->0/video stream->tags->vendor_id = "FFMP"

Having to already spoof the encoder using -metadata encoder="Apple ProRes 
422 HQ" I figured it was as simple as telling
ffmpeg to set the -metadata:s:v:0 vendor_id=appl
When trying to encode FFMPEG also tells me that the output file will have 
the metadata vendor_id=appl

Output #0, mov, to 'out.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 537199360
    compatible_brands: qt
    vendor_id       : appl
    encoder         : Lavf58.76.100
  Stream #0:0(eng): Video: prores (HQ) (apch / 0x68637061), 
yuv422p10le(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 
200 kb/s, 0.04 fps, 12800 tbn (default)
    Metadata:
      creation_time   : 2020-12-21T13:20:40.000000Z
      handler_name    : Apple Video Media Handler
      vendor_id       : appl
      timecode        : 00:00:00:00
      encoder         : Apple ProRes 422 HQ
  Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 5.1, 
s16, 4608 kb/s (default)
    Metadata:
      creation_time   : 2020-12-21T13:20:40.000000Z
      handler_name    : Apple Sound Media Handler
      vendor_id       :
      timecode        : 00:00:00:00
      encoder         : Lavc58.134.100 pcm_s16le
  Stream #0:2(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 
stereo, s16, 1536 kb/s (default)
    Metadata:
      creation_time   : 2020-12-21T13:20:40.000000Z
      handler_name    : Apple Sound Media Handler
      vendor_id       :
      timecode        : 00:00:00:00
      encoder         : Lavc58.134.100 pcm_s16le

The full command I use is
ffmpeg -i src.mov -map 0:0 -map 0:1 -map 0:2 -c:a:0 pcm_s16le 
-disposition:a:0 default -c:a:1 pcm_s16le -disposition:a:1 default 
-disposition:d:0 default -c:v prores -profile:v 3 -aspect 16:9 -pix_fmt 
yuv422p10le -movflags +write_colr -vendor apl0 -metadata:s:v:0 
encoder="Apple ProRes 422 HQ" -metadata "vendor_id=appl" -color_primaries 
bt709 -color_trc bt709 -colorspace bt709 -trellis 0 -subq 7 -me_range 16 
-b_strategy 1 -sws_flags fast_bilinear -sc_threshold 40 -keyint_min 23 -g 
240 -qmin 3 -qmax 51 -copyts -y out.mov

When trying to check after writing using ffprobe again, the vendor_id 
remains as FFMP though.
Am I doing something wrong here? Can FFMPEG not overwrite the vendor_id? 
If that is the case, is there a specific reason for it?

- Marcel



More information about the ffmpeg-user mailing list