从c ++系统调用时,ffmpeg不起作用

时间:2016-05-18 23:15:16

标签: c++ video ffmpeg mp4

我有一个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文件可以毫无问题地播放。此外,它是唯一一个在文件资源管理器中具有预览图像的文件。

非常感谢!

1 个答案:

答案 0 :(得分:2)

解决了!

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");

非常感谢!