Мне нужно знать, через сколько кадров видео начинается аудио часть для файла 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

2 ответа2

0

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

0

Вы записываете аудио и видео данные в один и тот же поток ввода. 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

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