我有使用以下代码将视频流导出到mpeg文件的命令:
ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i -vf vflip -vcodec mpeg1video -qscale 4 -bufsize 500KB -maxrate 5000KB OUTPUT_FILE
现在,我想添加命令,以便可以使用音频,因为现在没有选项。
我已将上一个命令编辑到下一个命令:
ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i -f s16le -ac 1 -ar 44100 -i - -acodec pcm_s16le -ac 1 -b:a 320k -ar 44100 -vf vflip -vcodec mpeg1video -qscale 4 -bufsize 500KB -maxrate 5000KB OUTPUT_FILE
因此,您可以看到我添加了一个新输入,其中包含我要输入的音频设置(我将使用正弦波的值对其进行测试)。
我正在将数据写入文件:
// Write a frame to the ffmpeg stream
fwrite(frame, sizeof(unsigned char*) * frameWidth * frameHeight, 1, ffmpeg);
// Write multiple sound samples per written frame
for (int t = 0; t < 44100/24; ++t)
fwrite(&audio, sizeof(short int), 1, ffmpeg);
第一行是只写视频的那一行(帧对象是我正在输入的视频中的纹理渲染) 之后,我正在尝试添加音频。我正在使用for-loop,所以我可以为每个视频帧使用多个样本(因为否则你每秒只能有24个音频样本)
这确实有几个问题:
渲染的视频显示绿色闪烁
视频在屏幕上滑动。例如,如果它向右滑动200个像素,则在另一侧渲染这些像素。还应该在底部的一些框架在顶部渲染(因此框架也向下滑动,但这是一个常数,它不随时间移动)
我无法弄清楚我的错误在哪里。我已经尝试了多个编解码器并尝试了不同的命令,但它保持不变或变得更糟。
提前致谢