ffmpeg: specify/force pixel format for input H.264 video
Asked Answered
L

0

6

I have some MP4 video files missing the pixel format in their header information. I have already tried setting probesize and analyzeduration to their maximum values 2147483647 but that didn't help.

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:

Mediainfo:

$ 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                           : [email protected]
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

ffprobe:

$ 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

I can't force the pixel_format on ffmpeg this way:

$ 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.

Is there any other way to accomplish this with ffmpeg? Is it possible to edit their header information to include the pixel format information?

Lindley answered 30/7, 2017 at 21:7 Comment(3)
-i DJI_0090.MOV -pix_format yuv420p .... try that order with chg of the option nameGarold
Thanks for the reply, Robert. Same message: $ ffmpeg -i DJI_0090.MOV -pixel_format yuv420p test.mp4 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fe2d0002600] 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' optionsLindley
Can you share the file?Dystrophy

© 2022 - 2024 — McMap. All rights reserved.