Отсутствует опорный кадр, ошибка декодирования заголовка слайса
Я разделил это ( 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 и буферизованным сокращением (забавный).
Есть много способов сделать это, и в зависимости от ограничений памяти / вычислений вы сможете выбрать свой вкус.
Я надеюсь, что это объясняет ошибки, которые вы видите, и предоставляет возможные решения для вас.