从 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");
非常感谢!
我有一个 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");
非常感谢!