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