преобразование файла .mov в файл .h264 - PullRequest
7 голосов
/ 25 августа 2011

хорошо, это так, я на самом деле хочу разобрать кадры из файла MOV. получить закодированные кадры h264. и мне удалось сделать это с помощью ffmpeg, но когда я пытаюсь сделать фильм снова с помощью ffmpeg -i test* test.mov, я получаю test00: Invalid data found when processing input, поэтому что-то не так со структурой кадров. насколько я понимаю, рамка должна выглядеть следующим образом:

00 00 00 01 XX data -------------

, где XX - это I-, P- или B-кадр. или более конкретно type(XX) = 0x0F && XX говорит, что это I (тип (XX) = 5?), P (тип (XX) = 7?) или B (тип (XX) = 8?) кадр. Я не уверен насчет этого числа, я искал его, но не нашел хороших источников. так что это вопрос номер один, какое число должно быть NALU для разных кадров?

в любом случае, когда я использую av_read_frame для файла mov, я получаю кадр, который выглядит следующим образом:

4B = размер, 1B = XX и затем данные. (по крайней мере, это то, что я думаю, я получаю)

файлы, в которых я храню фреймы, всегда имеют размер , когда я смотрю на них в гекседиторе (конечно, в противном случае). и XX всегда равен 65 (т. е. type (XX) = 5) в первом, а затем 61 (т. е. type (XX) = 1) для пары кадров, а затем возвращается к 65 для одного кадра и т. д.

Я полагаю, что это такие кадры, как: I P P P P P P P I P P P P P P P P P P P P P P P .... но тогда мое предположение о номерах типов для различных типов кадров ложно, что весьма вероятно. (какие-либо предложения по прочтению об этом? кроме ISO / IEC 14496-10, я действительно не понимаю).

Я пытался удалить размер и добавить 00 00 00 01 перед байтом XX и данными, но безуспешно. Любые советы о том, как я могу изменить кадры, чтобы они были действительными кадрами в кодировке H264?

1 Ответ

5 голосов
/ 28 августа 2011

Прежде всего, я должен порекомендовать хороший инструмент для понимания потоков H264: http://sourceforge.net/projects/h264bitstream/

Нет, чтобы ответить на ваш конкретный вопрос, да, кадры обычно начинаются с 65 и 61. Специальными блоками NAL, которые обычно начинаются с 67 и 68, являются, соответственно, SPS (набор параметров последовательности) и PPS (набор параметров изображения) .

Я также предлагаю вам попытаться использовать ffmpeg -i input.mov -vcodec copy output.h264 для правильного получения потока Приложения B (с 00 00 00 01) в виде одного файла.

Я не мог точно понять, чего вы пытаетесь добиться, извлекая кадры из mov и снова помещая их в test.mov.

...