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?
$ 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' options
– Lindley