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

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

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

Спасибо / Anil.

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 ответ1

1

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .