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

5683
AnilJ

Я разделил это ( 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 
0

1 ответ на вопрос

1
dstob

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

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

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

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

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

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

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

Поскольку я использую MP4Box, я хотел бы придерживаться параметров командной строки MP4Box. Однако какую команду ffmpeg я должен использовать для достижения той же сегментации? Я в порядке с не так близко 1 сек сегментов. Как вы думаете, я что-то упустил на MP4Box? Кто-нибудь знает об этом? AnilJ 9 лет назад 0

Похожие вопросы