-2

我在 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,依此类推。

4

1 回答 1

0

不幸的是,我对 Python 知之甚少,但这里有一个 Windows 批处理文件示例,您如何使用 FFmpeg 创建带有图像和声音的视频。

此示例使用mp3带声音的jpg文件、三个带图像的文件和两个起点:0.32516.5712. 从输出视频到 开始显示第一张图像,从到开始0.3251显示第二张图像,从声音结束到结束显示第三张图像。您可以按照相同的模式轻松添加更多输入图像和起点(我在本文末尾提供了一个示例)。0.32516.57126.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是用于设置特定图像持续时间的过滤器类型,它可以与durationoption 或 with startand endoptions 一起使用(这是您需要粘贴起点值的地方)。

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]也是此命令中使用的变量名。

于 2022-02-06T20:23:02.107 回答