gpt4 book ai didi

python - ffmpeg 将多张图片放入不同的帧中

转载 作者:行者123 更新时间:2023-12-04 23:35:01 40 4
gpt4 key购买 nike

我在 Python 中的数组看起来像这样 [['0.3251', '6.5712', '12.8174', '13.3979', '13.9784', '14.5357', '14.9537', '15.1394', '15.5109', '16.3236', '16.5094', '16.6951', '17.2524', '17.6704', '18.0419']]我需要将一个图像放在与 ffmpeg 的数组中完全相同的秒上。我怎样才能做到这一点?
例如,我想要一个带有歌曲的视频
第一次 0.3251s of the video i want to put img1第二6.5712s of the video i want to put img2等等。

最佳答案

不幸的是,我对 Python 知之甚少,但这里有一个 Windows 批处理文件示例,您如何使用 FFmpeg 创建带有图像和声音的视频。
此示例使用 mp3带声音的文件,三个 jpg带有图像和两个起点的文件:0.32516.5712 .将显示自输出视频开始到 0.3251 的第一张图像,第二张图片将从 0.3251 开始显示至6.5712 , 第三张图片将从 6.5712 开始显示到声音的尽头。您可以按照相同的模式轻松添加更多输入图像和起点(我在本文末尾提供了一个示例)。

ffmpeg.exe -i input.mp3 -loop 1 -i input1.jpg -loop 1 -i input2.jpg -loop 1 -i input3.jpg -filter_complex ^
^"[1:v]trim=duration=0.3251[a]; ^
[2:v]trim=start=0.3251:end=6.5712,setpts=PTS-STARTPTS[b]; ^
[a][b]concat[c]; ^
[3:v]trim=start=6.5712,setpts=PTS-STARTPTS[d]; ^
[c][d]concat[video]^" ^
-map [video]:v -map 0:a -c:v libx264 -crf 18 -c:a copy -shortest output.mp4
-i告诉 FFmpeg 使用以下输入作为下一个操作的流源。 input.mp3是带声音的输入文件。 inputX.jpg是带有图像的输入文件。 -loop告诉 FFmpeg 循环下一个输入图像。 -filter_complex告诉 FFmpeg 使用以下过滤器。 trim是用于设置特定图像时长的过滤器类型,可以与 duration 一起使用选项或使用 startend选项(这是您需要粘贴起点值的地方)。 concat是将视频的前两个部分合并为一个部分的过滤器类型,可用于下一个 concat手术。 -map告诉 FFmpeg 应该使用哪些流(视频和音频)来创建输出文件。 -c告诉 FFmpeg 应该使用哪些编解码器来编码视频和音频以创建输出文件。 -shortest告诉 FFmpeg 使用最短的输入流作为输出的持续时间(在这种情况下,它是带有声音的输入文件,因为所有图像都处于无限循环中)。 ^是 Windows 批处理特定字符,用于将一个长命令拆分为几行代码。可以全部删除 ^并改用一个长命令:
ffmpeg.exe -i input.mp3 -loop 1 -i input1.jpg -loop 1 -i input2.jpg -loop 1 -i input3.jpg -filter_complex "[1:v]trim=duration=0.3251[a]; [2:v]trim=start=0.3251:end=6.5712,setpts=PTS-STARTPTS[b]; [a][b]concat[c]; [3:v]trim=start=6.5712,setpts=PTS-STARTPTS[d]; [c][d]concat[video]" -map [video]:v -map 0:a -c:v libx264 -crf 18 -c:a copy -shortest output.mp4
如何添加下一张图片?
您需要再添加一张图像作为输入并更改当前过滤器集中的最后几行:
   [a][b]concat[c]; ^
[3:v]trim=start=6.5712,setpts=PTS-STARTPTS[d]; ^
[c][d]concat[video]^" ^
和:
   [a][b]concat[c]; ^
[3:v]trim=start=6.5712:end=12.8174,setpts=PTS-STARTPTS[d]; ^
[c][d]concat[e]; ^
[4:v]trim=start=12.8174,setpts=PTS-STARTPTS[f]; ^
[e][f]concat[video]^" ^
字母 [a] , [b] , [c]是变量的名称 - 您可以在此处使用任意字母组合,而不仅仅是一个字母。例如: [aa][ab]concat[ac]也可以工作, [video]也是此命令中使用的变量名。

关于python - ffmpeg 将多张图片放入不同的帧中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71007337/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com