【问题标题】:FFmpeg producing a flickering video from imagesFFmpeg 从图像中产生闪烁的视频
【发布时间】:2018-11-30 06:45:21
【问题描述】:

所以我正在尝试制作一个分形旋转通过一些值的视频,就像看到的 here

我使用一个用 Java 编写的可以正常工作的不同程序生成帧(其中 1000 个),因此出于本场景的目的,假设所有图像都在目标文件夹中,并且按照需要按数字顺序排列出现在视频中。

我在网上找到以下代码将图像拼接成视频,但我完全不知道它是如何工作的,当我运行它时,所有图像确实都被拼接成视频并放置在桌面,但视频似乎有一个特定的帧只是在随机位置跳入。我不完全确定是哪一个,但它是较早的帧之一,介于 1000 帧中的 1 到 200 帧之间。

我还测试了制作两个半视频,一个使用前 500 帧,另一个使用后 500 帧。第一个视频 (1 -> 500) 有闪烁,第二个视频 (501 -> 1000) 在我的观察中似乎没有闪烁。

我正在寻求解决闪烁行为的帮助,如果有要求,我稍后会将视频文件上传到谷歌驱动器。图片均为 1920x1080,并按正确的数字顺序排列。

提前致谢!

import static org.bytedeco.javacpp.opencv_imgcodecs.*;
import java.io.File; 
import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.OpenCVFrameConverter;
public class ImageToMovie{
    public static void main(String []args){
        String imgPath="C:\\Users\\John\\Images";
        String vidPath="C:\\Users\\John\\Desktop\\video.mp4";
        String[] links=new String[new File(imgPath).listFiles().length];
        File f=new File(imgPath);
        File[] f2=f.listFiles();
        for(int i=0;i<f2.length;i++) {
            links[i]=f2[i].getAbsolutePath();
        }
        convertJPGtoMovie(links, vidPath);
        System.out.println("Video has been created at "+vidPath);
    }
    public static void convertJPGtoMovie(String[] links, String vidPath){
        OpenCVFrameConverter.ToIplImage grabberConverter = new OpenCVFrameConverter.ToIplImage();
        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(vidPath,1920,1080); 
        try {
            recorder.setFrameRate(50);
            recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
            recorder.setVideoBitrate(100000);
            recorder.setFormat("mp4");
            recorder.setVideoQuality(0);
            recorder.start();
            for (int i=0;i<links.length;i++){
                recorder.record(grabberConverter.convert(cvLoadImage(links[i])));
            }
            recorder.stop();
        }
        catch (org.bytedeco.javacv.FrameRecorder.Exception e){
            e.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java maven video ffmpeg


    【解决方案1】:

    您只需将File 数组排序为正确的顺序。

    将使用 files 数组的任何顺序生成视频。因此,请确保文件按数字排序,因为如果不是,那么您的文件可能会像 1, 10, 100, 101, 102 而不是 1, 2, 3, 4, 5, 6 那样排序。

    您没有注意到图像 500 和 1000 之间闪烁的原因是所有文件都是 3 个数字长,因此您不会在更大的数字中看到这种效果。

    【讨论】:

    • Sorfiend,你救了我的命。真是感激不尽。我没有意识到它们的顺序错误,因为 Windows 中的文件资源管理器假设我想要它从 1 -> 1000,但是缝合它们的程序不会像我预期的那样将“图像 1”视为“图像 0001” .可能永远不会想到这一点。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2020-04-29
    • 2023-01-30
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多