ffmpeg将多张图片放入不同的帧
ffmpeg put multiple pictures into different frames
我在 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.3251
和 6.5712
。第一张图像将从输出视频开始显示到 0.3251
,第二张图像将从 0.3251
显示到 6.5712
,第三张图像将从 6.5712
显示到结束的声音。您可以按照相同的模式轻松添加更多输入图像和起点(我在本文末尾提供了一个示例 post)。
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
选项一起使用,也可以与start
和end
选项一起使用(这是您需要粘贴起点值的地方。
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 中的数组看起来像这样 [['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.3251
和 6.5712
。第一张图像将从输出视频开始显示到 0.3251
,第二张图像将从 0.3251
显示到 6.5712
,第三张图像将从 6.5712
显示到结束的声音。您可以按照相同的模式轻松添加更多输入图像和起点(我在本文末尾提供了一个示例 post)。
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
选项一起使用,也可以与start
和end
选项一起使用(这是您需要粘贴起点值的地方。
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]
也是此命令中使用的变量名。