mpeg 是如何交错的?

mpeg 是如何交错的?

我需要知道 mpeg 文件的音频部分在多少帧视频之后开始。例如,首先有 5 帧视频,然后有 10 个音频样本。整个文件都会重复此过程。

额外:有没有办法在 ffmpeg 中设置这些信息?

编辑:更多信息

我有一个 RGBA 格式的视频流。这些帧被写入编码器。
我还有一个 s16le 格式的音频流,我想将其输入到编码器。

如果我使用 RGBA 格式的视频流并向其中添加常规 .wav 文件作为音频,则一切正常。但是,我需要添加自己的音频流。当我尝试执行此操作时,我没有音频,视频也坏了。它从右到左、从上到下滑动。帧掉落的部分在另一侧渲染(例如,帧在右侧 20px,掉落的 20px 在左侧渲染)。

我认为我必须找到将音频流写入编码器的顺序。控制台命令中的这一部分管理我的音频:

-f s16le -ac 1 -i - 

当我尝试使用常规 .wav 文件时,我只是写道

-i file_name.wav

我希望这能让事情更清楚一点。

进一步编辑:

我目前正在向编码器写入 18 帧,之后我将 18 帧的音频样本写入编码器。这个过程重复进行。如果我降低频率,视频中就会出现绿色闪烁

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

答案1

您正在将音频和视频数据写入同一个输入流。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

答案2

我不认为这有一般规则。它可以是 V0 A0 V1 A1 V2 A2 或 V0 V1 A01 V2 V3 A23。具体情况应取决于视频和音频的压缩和质量。唯一的实际规则是帧的视频流(V0 V1 等)和相应的块的音频流(A0、A1 等)都必须是整数。

相关内容