Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
346 views
in Technique[技术] by (71.8m points)

video - h264 extracting frames works only on certain operating system / ffmpeg version

I have received parsed h264 data from my phone, and I am trying to extract frames from the data.

I used the following ffmpeg command lines:

ffmpeg -i temp.h264 -ss 5 -pix_fmt yuv420p -vframes 1 foo.yuv

ffmpeg -s 1280:720 -pix_fmt yuv420p -i foo.yuv output.jpg

This results in the right output image on Ubuntu (KDE neon User Edition 5.12) with ffmpeg version 2.8.14.

However, it does not work on macOS High Sierra (10.13.4) with ffmpeg version 4.0 and instead shows an output message:

Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)

I am not sure whether this is a mere ffmpeg version-related issue or not because as an experiment, when I converted the h264 data into mp4 format and played it on macOS High Sierra, the video sometimes shows a sequence of black distorted image (screenshot), and other times, a normal video.

If I play that same video on Ubuntu (KDE neon User Edition 5.12), the video plays perfectly.

I don't understand why this problem would occur, and whether this has to do with OS or ffmpeg library version. What would be some good ways to approach this problem? Thanks.

EDIT:

Full log of first ffmpeg command line (ubuntu):

ffmpeg version 2.8.14-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.9) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
[h264 @ 0x11ae2a0] error while decoding MB 54 2, bytestream -16
[h264 @ 0x11ae2a0] top block unavailable for requested intra4x4 mode -1 at 2 9                                                                             
[h264 @ 0x11ae2a0] error while decoding MB 2 9, bytestream 6908                                                                                            
[h264 @ 0x11ae2a0] concealing 1275 DC, 1275 AC, 1275 MV errors in P frame
[h264 @ 0x11ae2a0] top block unavailable for requested intra4x4 mode -1 at 27 0
[h264 @ 0x11ae2a0] error while decoding MB 27 0, bytestream 5564                                                                                           
[h264 @ 0x11ae2a0] deblocking filter parameters 7 13 out of range                                                                                          
[h264 @ 0x11ae2a0] decode_slice_header error                                                                                                               
[h264 @ 0x11ae2a0] concealing 1440 DC, 1440 AC, 1440 MV errors in P frame
[h264 @ 0x11ae2a0] deblocking filter parameters 7 -14 out of range
[h264 @ 0x11ae2a0] decode_slice_header error                                                                                                               
[h264 @ 0x11ae2a0] concealing 1387 DC, 1387 AC, 1387 MV errors in P frame
[h264 @ 0x11ae2a0] deblocking filter parameters -7 0 out of range
[h264 @ 0x11ae2a0] decode_slice_header error                                                                                                               
[h264 @ 0x11ae2a0] concealing 1413 DC, 1413 AC, 1413 MV errors in P frame
[h264 @ 0x11ae2a0] top block unavailable for requested intra4x4 mode -1 at 9 0
[h264 @ 0x11ae2a0] error while decoding MB 9 0, bytestream 6647                                                                                            
[h264 @ 0x11ae2a0] concealing 1186 DC, 1186 AC, 1186 MV errors in P frame
[h264 @ 0x11ae2a0] top block unavailable for requested intra mode at 16 9
[h264 @ 0x11ae2a0] error while decoding MB 16 9, bytestream 6182                                                                                           
[h264 @ 0x11ae2a0] top block unavailable for requested intra4x4 mode -1 at 6 18                                                                            
[h264 @ 0x11ae2a0] error while decoding MB 6 18, bytestream 7042                                                                                           
[h264 @ 0x11ae2a0] concealing 1440 DC, 1440 AC, 1440 MV errors in P frame
[h264 @ 0x11ad340] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, h264, from 'temp.h264':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuvj420p(pc), 1280x720, 29.97 fps, 29.97 tbr, 1200k tbn, 59.94 tbc
[swscaler @ 0x1207dc0] deprecated pixel format used, make sure you did set range correctly
Output #0, rawvideo, to 'foo.yuv':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1280x720, q=2-31, 200 kb/s, 29.97 fps, 29.97 tbn, 29.97 tbc
    Metadata:
      encoder         : Lavc56.60.100 rawvideo
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
[h264 @ 0x11f98a0] error while decoding MB 54 2, bytestream -16
[h264 @ 0x11f98a0] top block unavailable for requested intra4x4 mode -1 at 2 9                                                                             
[h264 @ 0x11f98a0] error while decoding MB 2 9, bytestream 6908                                                                                            
[h264 @ 0x11f98a0] concealing 1275 DC, 1275 AC, 1275 MV errors in P frame
[h264 @ 0x12758e0] top block unavailable for requested intra4x4 mode -1 at 27 0
[h264 @ 0x12758e0] error while decoding MB 27 0, bytestream 5564                                                                                           
[h264 @ 0x12758e0] deblocking filter parameters 7 13 out of range                                                                                          
[h264 @ 0x12758e0] decode_slice_header error                                                                                                               
[h264 @ 0x12758e0] concealing 1440 DC, 1440 AC, 1440 MV errors in P frame
[h264 @ 0x11ffcc0] deblocking filter parameters 7 -14 out of range
[h264 @ 0x11ffcc0] decode_slice_header error                                                                                                               
[h264 @ 0x11ffcc0] concealing 1387 DC, 1387 AC, 1387 MV errors in P frame
[h264 @ 0x11f98a0] deblocking filter parameters -7 0 out of range
[h264 @ 0x11f98a0] decode_slice_header error                                                                                                               
[h264 @ 0x11f98a0] concealing 1413 DC, 1413 AC, 1413 MV errors in P frame
[h264 @ 0x12758e0] top block unavailable for requested intra4x4 mode -1 at 9 0
[h264 @ 0x12758e0] error while decoding MB 9 0, bytestream 6647                                                                                            
[h264 @ 0x12758e0] concealing 1186 DC, 1186 AC, 1186 MV errors in P frame
[h264 @ 0x11ffcc0] top block unavailable for requested intra mode at 16 9
[h264 @ 0x11ffcc0] error while decoding MB 16 9, bytestream 6182                                                                                           
[h264 @ 0x11ffcc0] top block unavailable for requested intra4x4 mode -1 at 6 18                                                                            
[h264 @ 0x11ffcc0] error while decoding MB 6 18, bytestream 7042                                                                                           
[h264 @ 0x11ffcc0] concealing 1440 DC, 1440 AC, 1440 MV errors in P frame
[h264 @ 0x11f98a0] top block unavailable for requested intra4x4 mode -1 at 12 9
[h264 @ 0x11f98a0] error while decoding MB 12 9, bytestream 6863                                                                                           
[h264 @ 0x11f98a0] concealing 1342 DC, 1342 AC, 1342 MV errors in P frame
[h264 @ 0x12758e0] top block unavailable for requested intra mode at 29 18
[h264 @ 0x12758e0] error while decoding MB 29 18, bytestream 6612                                                                                          
[h264 @ 0x12758e0] concealing 1405 DC, 1405 AC, 1405 MV errors in P frame
[h264 @ 0x11ffcc0] top block unavailable for requested intra mode at 25 9
[h264 @ 0x11ffcc0] error while decoding MB 25 9, bytestream 6051                                                                                           
[h264 @ 0x11ffcc0] top block unavailable for requested intra4x4 mode -1 at 70 18                                                                           
[h264 @ 0x11ffcc0] error while decoding MB 70 18, bytestream 5089                                                                                          
[h264 @ 0x11ffcc0] concealing 1419 DC, 1419 AC, 1419 MV errors in P frame
[h264 @ 0x11f98a0] top block unavailable for requested intra mode at 14 9
[h264 @ 0x11f98a0] error while decoding MB 14 9, bytestream 6071
[h264 @ 0x11f98a0] deblocking filter parameters -9 0 out of range
[h264 @ 0x11f98a0] decode_slice_header error
[h264 @ 0x11f98a0] concealing 1440 DC, 1440 AC, 1440 MV errors in P frame
[h264 @ 0x12758e0] top block unavailable for requested intra4x4 mode -1 at 54 9
[h264 @ 0x12758e0] error while decoding MB 54 9, bytestream 4423
[h264 @ 0x12758e0] concealing 1256 DC, 1256 AC, 1256 MV errors in P frame
[h264 @ 0x11ffcc0] top block unavailable for requested intra4x4 mode -1 at 22 9
[h264 @ 0x11ffcc0] error while decoding MB 22 9, bytestream 5861
[h264 @ 0x11ffcc0] concealing 1335 DC, 1335 AC, 1335 MV errors in P frame
[h264 @ 0x11f98a0] deblocking filter parameters 7 -4 out of range
[h264 @ 0x11f98a0] decode_slice_header error
[h264 @ 0x11f98a0] concealing 1430 DC, 1430 AC, 1430 MV errors in P frame
[h264 @ 0x12758e0] concealing 1319 DC, 1319 AC, 1319 MV errors in P frame
[h264 @ 0x11ffcc0] top block unavailable for requested intra4x4 mode -1 at 16 9
[h264 @ 0x11ffcc0] error while decoding MB 16 9, bytestream 6217
[h264 @ 0x11ffcc0] concealing 1416 DC, 1416 AC, 1416 MV errors in P frame
[h264 @ 0x11f98a0] top block unavailable for requested intra4x4 mode -1 at 12 0
[h264 @ 0x11f98a0] error while decoding MB 12 0, bytestream 6854
[h264 @ 0x11f98a0] top block unavailable for requested intra4x4 mode -1 at 2 9
[h264 @ 0x11f98a0] error while decoding MB 2 9, bytestream 7093
[h264 @ 0x11f98a0] concealing 1440 DC, 1440 AC, 1440 MV errors in P frame
[h264

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I guess the different ffmpeg versions skip through the input data in different ways because of the decoding errors, so 4.0 does not get to decode anything useful at all.

Either your temp.h264 is broken or maybe it is not a raw .h264 file (how was i created? what does the file command report?), because ffmpeg gives so many decoding errors.

The difference in playing might as well result from different h.264 decoders being used. What players did you use? Is a hardware decoder used on macos?

I took a look at the sample file with https://sourceforge.net/projects/h264bitstream/

$ ./h264_analyze temp.h264 |grep "frame_num|Found NAL"|less
!! Found NAL at offset 4 (0x0004), size 34 (0x0022)
 log2_max_frame_num_minus4 : 0
 gaps_in_frame_num_value_allowed_flag : 0
!! Found NAL at offset 42 (0x002A), size 4 (0x0004)
!! Found NAL at offset 50 (0x0032), size 63 (0x003F)
 frame_num : 0
!! Found NAL at offset 117 (0x0075), size 71 (0x0047)
 frame_num : 0
!! Found NAL at offset 192 (0x00C0), size 66 (0x0042)
 frame_num : 0
!! Found NAL at offset 262 (0x0106), size 66 (0x0042)
 frame_num : 0
!! Found NAL at offset 332 (0x014C), size 66 (0x0042)
 frame_num : 0
!! Found NAL at offset 402 (0x0192), size 68 (0x0044)
 frame_num : 0
!! Found NAL at offset 474 (0x01DA), size 70 (0x0046)
 frame_num : 0
!! Found NAL at offset 548 (0x0224), size 59 (0x003B)
 frame_num : 0
!! Found NAL at offset 611 (0x0263), size 6752 (0x1A60)
 frame_num : 4
!! Found NAL at offset 7367 (0x1CC7), size 7016 (0x1B68)
 frame_num : 4
!! Found NAL at offset 14387 (0x3833), size 7972 (0x1F24)
 frame_num : 4
!! Found NAL at offset 22363 (0x575B), size 5939 (0x1733)
 frame_num : 4
!! Found NAL at offset 28306 (0x6E92), size 6491 (0x195B)
 frame_num : 4
!! Found NAL at offset 34801 (0x87F1), size 6596 (0x19C4)
 frame_num : 5
!! Found NAL at offset 41401 (0xA1B9), size 6828 (0x1AAC)
 frame_num : 5
!! Found NAL at offset 48233 (0xBC69), size 7800 (0x1E78)
 frame_num : 5

You can see the size of the first few NALUs: they are abnormally small. Also, frame_num 1 and 2 are missing in the first group of pictures. You have to double check how you create the beginning of your .h264 file.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...