FFMPEG - 以特定时间间隔在视频上叠加多个视频
FFMPEG - Overlay multipe videos over video at specified interval of time
我想按指定的时间间隔在一个视频上叠加多个视频。
已经尝试过不同的解决方案,但它不会在我方面起作用
我正在使用下面的命令在视频上叠加视频
String[] cmdWorking3 = new String[]{"-i",yourRealPath,"-i",gifVideoFile1,"-i",gifVideoFile2,"-i",gifVideoFile3,
"-filter_complex",
"[0][1]overlay=100:100:enable='between(t,0,2)'[v1];" +
"[v1][2]overlay=130:130:enable='between(t,0,2)'[v2];" +
"[v2][3]overlay=150:150:enable='between(t,5,6)'[v3];",
"-map","[v3]","-map" ,"0:a",
"-preset", "ultrafast", filePath};
通过使用上面的命令,前两个视频完全可以正常工作,但最后一个将无法启用
编辑:
//工作完美
String[] cmdWorking11 = new String[]
{"-i",
yourRealPath,
"-i",
gifVideoFile1,
"-i",
gifVideoFile2,
"-i",
gifVideoFile3,
"-i",
gifVideoFile4,
"-filter_complex",
"[1]setpts=PTS+3/TB[1d];" +
"[2]setpts=PTS+7/TB[2d];" +
"[3]setpts=PTS+10/TB[3d];" +
"[0][1]overlay=100:100:enable='between(t,0,2)'[v1];" +
"[v1][1d]overlay=130:130:enable='between(t,3,6)'[v2];" +
"[v2][2d]overlay=130:130:enable='between(t,7,9)'[v3];" +
"[v3][3d]overlay=150:150:enable='between(t,10,13)'[v4];" +
"[1]asetpts=PTS+3/TB[1ad];" +
"[2]asetpts=PTS+7/TB[2ad];" +
"[3]asetpts=PTS+10/TB[3ad];" +
"[0:a][1ad][2ad][3ad]amix=4[a]",
"-map", "[v4]", "-map", "[a]", "-ac", "5",
"-preset",
"ultrafast",
filePath};
上面的命令完全可以正常工作,但是重叠视频中的音频消失了,你能帮我解决这个问题吗?
主视频时间持续时间约为00:15秒,所有叠加视频约为3秒。
能帮忙解决这个问题就太好了,先谢谢了。
您需要延迟第 3 个叠加视频在叠加时开始播放。
String[] cmdWorking3 = new String[]{"-i",yourRealPath,"-i",gifVideoFile1,"-i",gifVideoFile2,"-i",gifVideoFile3,
"-filter_complex",
"[3]setpts=PTS+5/TB[3d];" +
"[0][1]overlay=100:100:enable='between(t,0,2)'[v1];" +
"[v1][2]overlay=130:130:enable='between(t,0,2)'[v2];" +
"[v2][3d]overlay=150:150:enable='between(t,5,6)'[v3]",
"-map","[v3]","-map" ,"0:a",
"-preset", "ultrafast", filePath};
要同时保留音频,请包含在 filter_complex
中
[1]adelay=3000|3000[1ad];
[2]adelay=7000|7000[2ad];
[3]adelay=10000|10000[3ad];
[0:a][1ad][2ad][3ad]amix=5[a]
将-map 0:a
替换为-map '[a]' -ac 2
ffmpeg -i test.mp4 -i test1.mp4 -itsoffset 2 -i test2.mp4 -i test3.mp4 -filter_complex "overlay=0:0,overlay=0:0:enable='between(t,2,15)',overlay=0:0" output.mp4
其中-itsoffset 2表示test3.mp4在2秒开始播放,enable='between(t,start_time,end_time)'表示这段视频显示时长
我想按指定的时间间隔在一个视频上叠加多个视频。
已经尝试过不同的解决方案,但它不会在我方面起作用
我正在使用下面的命令在视频上叠加视频
String[] cmdWorking3 = new String[]{"-i",yourRealPath,"-i",gifVideoFile1,"-i",gifVideoFile2,"-i",gifVideoFile3,
"-filter_complex",
"[0][1]overlay=100:100:enable='between(t,0,2)'[v1];" +
"[v1][2]overlay=130:130:enable='between(t,0,2)'[v2];" +
"[v2][3]overlay=150:150:enable='between(t,5,6)'[v3];",
"-map","[v3]","-map" ,"0:a",
"-preset", "ultrafast", filePath};
通过使用上面的命令,前两个视频完全可以正常工作,但最后一个将无法启用
编辑:
//工作完美
String[] cmdWorking11 = new String[]
{"-i",
yourRealPath,
"-i",
gifVideoFile1,
"-i",
gifVideoFile2,
"-i",
gifVideoFile3,
"-i",
gifVideoFile4,
"-filter_complex",
"[1]setpts=PTS+3/TB[1d];" +
"[2]setpts=PTS+7/TB[2d];" +
"[3]setpts=PTS+10/TB[3d];" +
"[0][1]overlay=100:100:enable='between(t,0,2)'[v1];" +
"[v1][1d]overlay=130:130:enable='between(t,3,6)'[v2];" +
"[v2][2d]overlay=130:130:enable='between(t,7,9)'[v3];" +
"[v3][3d]overlay=150:150:enable='between(t,10,13)'[v4];" +
"[1]asetpts=PTS+3/TB[1ad];" +
"[2]asetpts=PTS+7/TB[2ad];" +
"[3]asetpts=PTS+10/TB[3ad];" +
"[0:a][1ad][2ad][3ad]amix=4[a]",
"-map", "[v4]", "-map", "[a]", "-ac", "5",
"-preset",
"ultrafast",
filePath};
上面的命令完全可以正常工作,但是重叠视频中的音频消失了,你能帮我解决这个问题吗?
主视频时间持续时间约为00:15秒,所有叠加视频约为3秒。
能帮忙解决这个问题就太好了,先谢谢了。
您需要延迟第 3 个叠加视频在叠加时开始播放。
String[] cmdWorking3 = new String[]{"-i",yourRealPath,"-i",gifVideoFile1,"-i",gifVideoFile2,"-i",gifVideoFile3,
"-filter_complex",
"[3]setpts=PTS+5/TB[3d];" +
"[0][1]overlay=100:100:enable='between(t,0,2)'[v1];" +
"[v1][2]overlay=130:130:enable='between(t,0,2)'[v2];" +
"[v2][3d]overlay=150:150:enable='between(t,5,6)'[v3]",
"-map","[v3]","-map" ,"0:a",
"-preset", "ultrafast", filePath};
要同时保留音频,请包含在 filter_complex
中 [1]adelay=3000|3000[1ad];
[2]adelay=7000|7000[2ad];
[3]adelay=10000|10000[3ad];
[0:a][1ad][2ad][3ad]amix=5[a]
将-map 0:a
替换为-map '[a]' -ac 2
ffmpeg -i test.mp4 -i test1.mp4 -itsoffset 2 -i test2.mp4 -i test3.mp4 -filter_complex "overlay=0:0,overlay=0:0:enable='between(t,2,15)',overlay=0:0" output.mp4
其中-itsoffset 2表示test3.mp4在2秒开始播放,enable='between(t,start_time,end_time)'表示这段视频显示时长