从 C++ 系统调用时 ffmpeg 不起作用

ffmpeg doesn't work when called from c++ system

我有一个 c++ 脚本可以将一系列 jpg 转换为 .mp4 视频,我使用的命令如下:

std::system("ffmpeg -threads auto -y -framerate 1.74659 -i /mnt/ev_ramdsk/1/%05d-capture.jpg -vcodec libx264 -preset ultrafast /mnt/ev_ramdsk/1/video.mp4");

它生成一个 .mp4 视频文件,就像它应该的那样,除了它不能从任何地方播放(在 2 台计算机和 html5 视频中测试)

但是,如果来自运行程序的同一台计算机,我会:

ffmpeg -threads auto -y -framerate 2 -i %05d-capture.jpg -vcodec libx264 -preset ultrafast video.mp4

从命令行输出的视频播放效果非常好(vlc 除外,对于 vlc,我必须使用 -vcodec mpeg4)

什么可能导致这种行为? cp 命令会损坏文件吗? (运行 在 mpeg 之后将其移出 ramfs)

编辑:

按照要求,我 运行 控制台中的整套命令与程序完全一样(程序记录它运行的每一个命令,我只是重复了它们)。

命令是:

cp -r /var/cache/zoneminder/events/1/16/05/18/23/30/00/ /mnt/ev_ramdsk/1/
ffmpeg -threads auto -y -framerate 1.76729 -i /mnt/ev_ramdsk/1/%5d-capture.jpg -preset ultrafast /mnt/ev_ramdsk/1/video.mp4
cp /mnt/ev_ramdsk/1/video.mp4 /var/cache/evmanager/videos/1/2016_05_18_23_30_00_.mp4

生成的 .mp4 文件可以毫无问题地播放。另外,是文件资源管理器中唯一带有预览图像的。

非常感谢!

解决了!

this 是获胜答案。终于让它工作使用:

std::system("ffmpeg -threads auto -y -r 1.74659 -i /mnt/ev_ramdsk/1/%05d-capture.jpg -px_fmt yuv420p -preset ultrafast -r 10 /mnt/ev_ramdsk/1/video.mp4");

非常感谢!