title: ffmpeg: specify/force pixel format for input H.264 video
body: <p>I have some MP4 video files missing the pixel format in their header information. I have already tried setting <code>probesize</code> and <code>analyzeduration</code> to their maximum values 2147483647 but that didn't help.</p>
  
  <p>So I know these videos are probably corrupt but if this is the only information missing I was thinking I could maybe recover them by rebuilding their header information or somehow decoding them by forcing a pixel format. Does anyone have any idea if this is possible? Some more background on the file:</p>
  
  <p>Mediainfo:</p>
  
  <pre><code>$ mediainfo DJI_0090.MOV 
  General
  Complete name                            : DJI_0090.MOV
  Format                                   : MPEG-4
  Format profile                           : QuickTime
  Codec ID                                 : qt   2014.02 (qt  )
  File size                                : 165 MiB
  Duration                                 : 22 s 322 ms
  Overall bit rate mode                    : Variable
  Overall bit rate                         : 61.8 Mb/s
  Encoded date                             : UTC 2017-05-31 18:04:45
  Tagged date                              : UTC 2017-05-31 18:04:45
  Comment                                  : 0.9.145
  ©gpt                                     : -170.60
  ©gyw                                     : +157.30
  ©grl                                     : +0.00
  IsTruncated                              : Yes
  
  Video
  ID                                       : 1
  Format                                   : AVC
  Format/Info                              : Advanced Video Codec
  Format profile                           : High@L4.2
  Format settings, CABAC                   : Yes
  Format settings, RefFrames               : 1 frame
  Codec ID                                 : avc1
  Codec ID/Info                            : Advanced Video Coding
  Duration                                 : 22 s 322 ms
  Bit rate mode                            : Variable
  Bit rate                                 : 59.4 Mb/s
  Maximum bit rate                         : 50.0 Mb/s
  Width                                    : 1 920 pixels
  Height                                   : 1 080 pixels
  Display aspect ratio                     : 16:9
  Frame rate mode                          : Constant
  Frame rate                               : 59.940 (60000/1001) FPS
  Color space                              : YUV
  Chroma subsampling                       : 4:2:0
  Bit depth                                : 8 bits
  Scan type                                : Progressive
  Bits/(Pixel*Frame)                       : 0.478
  Stream size                              : 158 MiB (96%)
  Title                                    : DJI.AVC
  Language                                 : English
  Encoded date                             : UTC 2017-05-31 18:04:45
  Tagged date                              : UTC 2017-05-31 18:04:45
  Color range                              : Limited
  Color primaries                          : BT.709
  Transfer characteristics                 : BT.709
  Matrix coefficients                      : BT.709
  </code></pre>
  
  <p>ffprobe:</p>
  
  <pre><code>$ ffprobe -analyzeduration 2147483647 -probesize 2147483647 DJI_0090.MOV 
  ffprobe version 3.3.2 Copyright (c) 2007-2017 the FFmpeg developers
    built with Apple LLVM version 8.1.0 (clang-802.0.42)
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables     --enable-avresample --cc=clang --host-cflags= --host-ldflags= --disable-indev=qtkit --enable-ffplay --enable-libfdk-aac --enable-libmp3lame     --enable-libsoxr --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-opencl --disable-lzma     --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.1.2_1/include/openjpeg-2.1 --enable-nonfree     --enable-vda
    libavutil      55. 58.100 / 55. 58.100
    libavcodec     57. 89.100 / 57. 89.100
    libavformat    57. 71.100 / 57. 71.100
    libavdevice    57.  6.100 / 57.  6.100
    libavfilter     6. 82.100 /  6. 82.100
    libavresample   3.  5.  0 /  3.  5.  0
    libswscale      4.  6.100 /  4.  6.100
    libswresample   2.  7.100 /  2.  7.100
    libpostproc    54.  5.100 / 54.  5.100
  [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc2e9002600] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 1920x1080):     unspecified pixel format
  Consider increasing the value for the 'analyzeduration' and 'probesize' options
  Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'DJI_0090.MOV':
    Metadata:
      major_brand     : qt  
      minor_version   : 538182144
      compatible_brands: qt  
      creation_time   : 2017-05-31T18:04:45.000000Z
      comment         : 0.9.145
    Duration: 00:00:22.36, bitrate: 61732 kb/s
      Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none, 1920x1080, 59.94 fps, 59.94 tbr, 60k tbn, 120k tbc (default)
      Metadata:
        creation_time   : 2017-05-31T18:04:45.000000Z
        handler_name    : DJI.AVC
        encoder         : Dji AVC encoder
  </code></pre>
  
  <p>I can't force the pixel_format on ffmpeg this way:</p>
  
  <pre><code>$ ffmpeg -pixel_format yuv420p -i DJI_0090.MOV test.mp4
  ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
    built with Apple LLVM version 8.1.0 (clang-802.0.42)
    configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables     --enable-avresample --cc=clang --host-cflags= --host-ldflags= --disable-indev=qtkit --enable-ffplay --enable-libfdk-aac --enable-libmp3lame     --enable-libsoxr --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-opencl --disable-lzma     --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.1.2_1/include/openjpeg-2.1 --enable-nonfree     --enable-vda
    libavutil      55. 58.100 / 55. 58.100
    libavcodec     57. 89.100 / 57. 89.100
    libavformat    57. 71.100 / 57. 71.100
    libavdevice    57.  6.100 / 57.  6.100
    libavfilter     6. 82.100 /  6. 82.100
    libavresample   3.  5.  0 /  3.  5.  0
    libswscale      4.  6.100 /  4.  6.100
    libswresample   2.  7.100 /  2.  7.100
    libpostproc    54.  5.100 / 54.  5.100
  Option pixel_format not found.
  </code></pre>
  
  <p>Is there any other way to accomplish this with ffmpeg? Is it possible to edit their header information to include the pixel format information?</p>