我想创建一个新视频( finalVideo.mp4
):
image1.jpg, image2.jpg, image3.jpg
,每张图片显示 4 秒 video1.mp4
),持续约30秒,帧速率为30fps audio1.mp3
)在最终视频(
finalVideo.mp4
)中,我希望音频( audio1.mp3
)仅在图像存在时播放,而视频的( video1.mp4
)音频在视频存在时播放。例如:
最终视频 (
finalVideo.mp4
) 包含image1.jpg
,video1.mp4
,image2.jpg
和image3.jpg
(为了)。音频 ( audio1.mp3
) 应播放前 4 秒,然后是视频 ( video1.mp4
) 音频接下来的 30 秒,然后是音频 ( audio1.mp3
) 在接下来的 8 (4*2) 秒。请让我知道如何以编程方式执行此操作。我希望使用 Java (JavaCV) 或 Python (OpenCV) 来解决这个问题。但是没有编程语言限制,答案可以是任何语言。
编辑 1
这是我做这项工作的尝试:
String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
ProcessBuilder processBuilder = new ProcessBuilder(
ffmpeg,
"-loop", "1",
"-framerate", "30",
"-t", "4",
"-i", "image1.jpg",
"-i", "video1.mp4",
"-loop", "1",
"-framerate", "30",
"-t", "4",
"-i", "image2.jpg",
"-loop", "1",
"-framerate", "30",
"-t", "4",
"-i", "image3.jpg",
"-filter_complex", "[0][1][2][3]concat=n=4:v=1:a=0",
"finalVideo.mp4"
);
processBuilder.inheritIO().start().waitFor();
上面的代码只解决了没有音频的视频创建部分。如上所述,请告诉我如何在此视频中添加音频。
最佳答案
您可以对音频执行相同操作,使用 -ss
和 -t
输入选项来控制剪辑它的位置。
String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
ProcessBuilder processBuilder = new ProcessBuilder(
ffmpeg,
"-loop", "1",
"-framerate", "30",
"-t", "4",
"-i", "image1.jpg",
"-i", "video1.mp4",
"-loop", "1",
"-framerate", "30",
"-t", "4",
"-i", "image2.jpg",
"-loop", "1",
"-framerate", "30",
"-t", "4",
"-i", "image3.jpg",
"-t" 4, "-i", "audio1.mp3",
"-ss" 4, "-t", 8, "audio1.mp3",
"-filter_complex",
"[0][1:v][2][[3]concat=n=4:v=1:a=0;[4][1:a][5]concat=n=3:v=0:a=1;",
"finalVideo.mp4"
);
processBuilder.inheritIO().start().waitFor();
(如果您可以两次使用相同的输入文件,则不是 100%,但这应该可以。)
关于image - 创建视频表单图像和视频并以编程方式向其中添加音频| Java、Python、ffmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71162972/