Как чередуется MPEG?

533
Dries

Мне нужно знать, через сколько кадров видео начинается аудио часть для файла MPEG. Так, например, сначала есть 5 кадров видео, а затем 10 аудиосэмплов. Это будет повторяться для всего файла.

Дополнительно: есть ли способ установить эту информацию в ffmpeg?

РЕДАКТИРОВАТЬ: больше информации

У меня есть видеопоток в формате RGBA. Эти кадры записываются в кодировщик.
У меня также есть аудиопоток в формате s16le, который я хочу передать кодеру.

Если я использую видеопоток в формате RGBA и добавляю в него обычный файл .wav в качестве аудио, все работает нормально. Однако мне нужно добавить свой собственный аудиопоток. Когда я пытаюсь сделать это, я не получаю аудио, и видео не работает. Он скользит справа налево и сверху вниз. Часть выпадающего фрейма визуализируется на другой стороне (например, фрейм находится на 20 пикселей вправо, выпадающий фрагмент на 20 пикселей отображается на левой стороне).

Я думаю, что мне нужно найти, в каком порядке я должен записать свой аудиопоток в кодировщик. Эта часть команды console управляет моим аудио:

-f s16le -ac 1 -i - 

Когда я попробовал это с обычным WAV-файлом, я просто написал

-i file_name.wav 

Я надеюсь, что это делает это немного яснее.

ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ:

В настоящее время я записываю 18 кадров в кодировщик, и после этого я записываю 18 кадров аудиосэмплов в кодировщик. Это повторяется. Если я перейду на более низкую частоту, на видео появятся зеленые вспышки

FFMPEG COMMAND:

ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i - -f s16le -ac 1 -i - -vf vflip -vcodec mpeg1video -qscale 4 -bufsize 500KB -maxrate 5000KB OUTPUT_FILE 
0
Ваш вопрос не очень понятен. Прежде всего, вы говорите MPEG, но сам MPEG - это не формат, а рабочая группа. Существует множество форматов, опубликованных MPEG, нам нужно знать, о каком вы говорите. Кроме того, можете ли вы добавить какие-либо другие детали к вашему вопросу, в общем, это не имеет особого смысла. heavyd 9 лет назад 0
Я добавил еще немного информации. Надеюсь, теперь стало понятнее Dries 9 лет назад 0
Вы пишете видео и аудио на стандартный ввод? heavyd 9 лет назад 0
Я использую `fwrite ()` для записи аудио и видео Dries 9 лет назад 0
Можете ли вы поделиться своей полной командной строкой FFMPEG? heavyd 9 лет назад 0
Добавил команду к вопросу Dries 9 лет назад 0
Как ваше видео передается в FFMPEG? Вы не предоставляете никаких аргументов `-i`. heavyd 9 лет назад 0
Woops, это опечатка. Это должно быть `-` (изменилось в вопросе) Dries 9 лет назад 0
Давайте [продолжим это обсуждение в чате] (http://chat.stackexchange.com/rooms/21039/discussion-between-heavyd-and-dries). heavyd 9 лет назад 0

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

0
Overmind

Я не думаю, что есть общее правило для этого. Это может быть как V0 A0 V1 A1 V2 A2 или V0 V1 A01 V2 V3 A23. Именно это должно зависеть от сжатия и качества видео и аудио. Единственное действительное правило состоит в том, что и видеопоток кадров (V0 V1 и т. Д.) И соответствующий аудиопоток блоков (A0, A1 и т. Д.) Должны быть целыми числами.

Сначала я сделал это, чередуя видео на кадр с количеством необходимых звуковых сэмплов, но это дает странные результаты. Dries 9 лет назад 0
Но что ты пытаешься сделать? Может быть, вам не нужно копать так глубоко. Overmind 9 лет назад 0
Я пытаюсь вручную добавить звук, который у меня есть в формате s16le, в кодировщик. Видео записывается по кадрам в кодировщик, а также. Мне нужно правильно составить порядок, в котором я отправляю данные, чтобы кодировщик мог поместить их в файл mpeg в правильном порядке. Dries 9 лет назад 0
Итак, вы хотите сделать это так, потому что вам нужно сохранить 16-битные сэмплы PCM вместо 24-битных или 32-битных? Если 16-битные сэмплы не требуются, тогда будет гораздо проще просто конвертировать видео и аудио в два широко известных широко используемых формата, и тогда любое приличное программное обеспечение для перекодирования сможет их синхронизировать. Overmind 9 лет назад 0
Мне не нужно сохранять этот формат нет. Это казалось легким испытанием. Эти видео и аудио вещи являются потоками, кстати, я не могу сначала конвертировать оба в другой файл, чтобы сделать его проще. Так что нет, 16-битный не требуется, но это размер для аудиосэмпла, который у меня есть сейчас (но это можно изменить). Мне нужно сделать это с помощью ffmpeg, хотя, так как эта функция включена в мое приложение Dries 9 лет назад 0
0
heavyd

Вы записываете аудио и видео данные в один и тот же поток ввода. FFMPEG необходимо разделить два потока, чтобы он мог правильно их мультиплексировать. Я хотел бы изучить использование именованных каналов для передачи двух отдельных потоков в FFMPEG. Что-то вроде этого:

ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i \\.\pipe\videopipe -f s16le -ac 1 -i \\.\pipe\audiopipe -vf vflip -vcodec mpeg1video -qscale 4 -bufsize 500KB -maxrate 5000KB OUTPUT_FILE