我在 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
,依此类推。
1 回答
不幸的是,我对 Python 知之甚少,但这里有一个 Windows 批处理文件示例,您如何使用 FFmpeg 创建带有图像和声音的视频。
此示例使用mp3
带声音的jpg
文件、三个带图像的文件和两个起点:0.3251
和6.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
option 或 with start
and end
options 一起使用(这是您需要粘贴起点值的地方)。
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]
也是此命令中使用的变量名。