Отсутствует опорный кадр, ошибка декодирования заголовка слайса

Я разделил это ( http://www.auby.no/files/video_tests/h264_720p_mp_3.1_3mbps_aac_shrinkage.mp4) видео с помощью команды mp4box "MP4Box -split 1 shrinking.mp4" на кусочки по 1 секунде каждый. У меня есть следующие вопросы:

Я получил видео разного размера, хотя нарезал его равномерно за 1 секунду. Не уверен, как это случилось?

Когда я пытаюсь получить информацию о файле фрагмента видео, я получаю сообщение об ошибке ниже. Может кто-нибудь, пожалуйста, помогите мне понять, что это такое, и как я могу изменить приведенную выше команду, чтобы избавиться от нее? Эта ошибка возникает для каждого сгенерированного видео слайда. Эта ошибка возникает только на нарезанных видео.

Спасибо, Анил.

anilj@desk1:~/workspace/testprogs/shellscripts$ ffmpeg -i invideo/shrinking_01.mp4
ffmpeg version N-36083-g2501f93-xuggle-5.5 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun  3 2014 13:43:04 with gcc 4.6.4
  configuration: --prefix=/home/anilj/workspace/xugglehome --extra-version=xuggle-5.5 --extra-cflags=-I/home/anilj/workspace/xuggle-xuggler/build/native/x86_64-unknown-linux-gnu/captive/stage/home/anilj/workspace/xugglehome/include --extra-ldflags=-L/home/anilj/workspace/xuggle-xuggler/build/native/x86_64-unknown-linux-gnu/captive/stage/home/anilj/workspace/xugglehome/lib --disable-shared --enable-pic --enable-gpl --enable-nonfree --enable-libx264 --enable-version3 --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libvo-aacenc --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-openssl --enable-zlib --enable-libvpx
  libavutil      51. 46.100 / 51. 46.100
  libavcodec     54. 14.101 / 54. 14.101
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 67.101 /  2. 67.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 10.100 /  0. 10.100
  libpostproc    52.  0.100 / 52.  0.100
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] Missing reference picture
[h264 @ 0x1ddeac0] decode_slice_header error
[h264 @ 0x1ddeac0] concealing 3600 DC, 3600 AC, 3600 MV errors
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'invideo/shrinking_01.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isom
    creation_time   : 2014-06-19 20:21:02
  Duration: 00:00:00.90, start: 0.000000, bitrate: 38 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 30 kb/s, 29.96 fps, 29.96 tbr, 29956 tbn, 59.92 tbc
    Metadata:
      creation_time   : 2011-05-05 18:09:35
      handler_name    : ?Apple Video Media Handler
At least one output file must be specified

1 ответ

Решение

Я не знаком с использованием MP4Box, но могу немного объяснить, что происходит за кулисами.

Для того, чтобы декодировать видео, вам сначала понадобится точка входа, картинка для ссылки, если хотите. Это эталонное изображение строится Intra ссылок, так что независимо от других кадров. Другие кадры будут ссылаться на этот кадр и другие ранее построенные кадры, чтобы воссоздать их во время декодирования. Стоит отметить, что эти изображения иногда могут не использовать одно и то же местоположение в порядке кодирования, как в порядке представления.

Хорошо, вы говорите мне, что вы хотели видео продолжительностью 1 секунда, но я говорю, что если I-кадры, по крайней мере, на каждом втором маркере отсутствуют, то это невозможно. Ну, это возможно, но я как будто говорю, что могу готовить, не беспокоясь о том, съедобна ли моя еда. Возможно, вы обрезали с интервалом в одну секунду, но видео невозможно декодировать, пока оно не достигнет контрольного кадра.

Решения: в ffmpeg есть сегментатор, который может сделать это за вас, но результаты не будут идеально длиться 1 секунду (это несовершенно, поскольку он не может по-настоящему справиться с определенными проблемами порядка кодирования / pts, небольшой частью случаев). Что происходит, когда происходит кадр в порядке кодирования, позади остановочного I-кадра (начало следующего сегмента), но перед ним в порядке представления? То же самое, что вы видите в начале вашего видео, кроме как в конце.

Вы можете декодировать в сырой формат, а затем нарезать. Вы могли бы сделать много манипуляций с обнаружением I-Frame и буферизованным сокращением (забавный).

Есть много способов сделать это, и в зависимости от ограничений памяти / вычислений вы сможете выбрать свой вкус.

Я надеюсь, что это объясняет ошибки, которые вы видите, и предоставляет возможные решения для вас.

Другие вопросы по тегам