我正在从视频流中读取数据并使用 ffmpeg 创建 mp4 文件。写入数据一段时间后,我总是会得到一个持续时间较短的文件。例如,如果我写入 10 分钟的数据,最终文件持续时间有时为 9.8 或 9.6(结果差异很大)。以下是我的做法:
char command[1024];
sprintf(command, "ffmpeg -y -hide_banner -nostats -loglevel warning -f rawvideo -vcodec rawvideo -pix_fmt yuv420p -r 15 -s 640x480 -i - -an -vsync vfr -vcodec libx264 -vf \"scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2\" %s", video_filename.c_str());
output_video_pipe = popen(command, "w");
然后我用以下方式写入数据:
fwrite(video_buffer, 1, video_buffer_size, output_video_pipe);
我尝试了 -vsync 参数的不同值,但文件总是比应有的长度短。有什么技巧可以让文件具有正确的长度吗?
任何帮助将不胜感激。
谢谢!