Como o mpeg é intercalado?

0

Eu preciso saber após quantos quadros de vídeo a parte de áudio começa para um arquivo MPEG. Então, por exemplo, primeiro existem 5 quadros de vídeo e depois há 10 amostras de áudio. Isso seria repetido para todo o arquivo.

Extra: Existe uma maneira de definir essas informações no ffmpeg?

EDIT: mais informações

Eu tenho um fluxo de vídeo no formato RGBA. Esses quadros são gravados no codificador.
Eu também tenho um fluxo de áudio no formato s16le que eu quero alimentar para o codificador.

Se eu usar o fluxo de vídeo no formato RGBA e adicionar um arquivo .wav normal a ele como áudio, tudo funcionará bem. No entanto, preciso adicionar meu próprio fluxo de áudio. Quando tento fazer isso, não recebo áudio e o vídeo é quebrado. Desliza da direita para a esquerda e de cima para baixo. A parte do quadro que cai é renderizada no outro lado (por exemplo, o quadro é 20px para a direita, o 20px que caiu é renderizado no lado esquerdo).

Eu acho que tenho que encontrar em qual ordem eu tenho que escrever meu fluxo de áudio para o codificador. Esta parte do comando do console gerencia meu áudio:

-f s16le -ac 1 -i - 

Quando eu tentei com um arquivo .wav normal eu escrevi

-i file_name.wav

Espero que isso seja um pouco mais claro.

EDITAR:

Atualmente estou escrevendo 18 quadros para o codificador e depois eu escrevo 18 quadros de amostras de áudio para o codificador. Isso se repete. Se eu for para uma frequência menor, recebo flashes verdes no vídeo

COMANDO FFMPEG:

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
    
por Dries 11.02.2015 / 13:35

2 respostas

0

Você está gravando os dados de áudio e vídeo no mesmo fluxo de entrada. O FFMPEG precisa ter os dois fluxos separados para poder multiplexá-los corretamente. Eu iria olhar para o uso de pipes nomeados para passar dois fluxos separados para FFMPEG. Algo parecido com isto:

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
    
por 11.02.2015 / 18:00
0

Eu não tenho uma regra geral para isso. Pode ser como V0 A0 V1 A1 V2 A2 ou V0 V1 A01 V2 V3 A23. O exato disso deve depender da compactação e da qualidade do vídeo e do áudio. A única regra real é que tanto o fluxo de vídeo dos quadros (V0 V1, etc) quanto o fluxo de áudio correspondente dos blocos (A0, A1, etc) devem ser números inteiros.

    
por 11.02.2015 / 13:47