FFMPEG:创建具有特定时间的循环视频

FFMPEG:创建具有特定时间的循环视频

我正在尝试将 GIF 文件转换为视频,并将输出视频与音频文件合并,因此最终结果将是视频+音频。

public static String makeVideo(String inputGifPath, String outputPath, int width, int height) {
        return "-f gif -y -i " + inputGifPath + " -vf crop=" + width + ":" + height + ":0:40,scale=1280:720,setsar=1 " + outputPath;
}

上述代码将输入的 GIF 转换为视频文件,并保持 GIF 的持续时间相同。

我想知道是否有任何方法可以将 GIF 转换为具有特定时间的视频,例如,我希望视频输出循环播放3分20秒

答案1

使用-stream_loop输入选项:

ffmpeg -stream_loop -1 -i input.gif -i audio.mp3 -vf crop=" + width + ":" + height + ":0:40,scale=1280:720,setsar=1,format=yuv420p -shortest -fflags +shortest -max_interleave_delta 100M -movflags +faststart output.mp4

答案2

@llogan 的答案对我有用,但由于某种原因,它需要很长时间才能完成处理,我使用以下命令结束了此操作:

1 - 将 GIF 转换为视频(与 GIF 文件时长相同)

-f gif -y -i input.gif -vf crop=540:402:0:40,scale=1280:720,setsar=1 gifToVideo.mp4

2 - 循环输出视频 X 次(X == 音频时长/GIF 时长,以秒为单位)

-y -stream_loop xTime -i gifToVideo.mp4 -c copy videoNoSound.mp4

3 - 合并videoNoSound.mp4和音频文件:

-y -i videoNoSound.mp4 -i audio.mp3 -c:v copy -c:a aac longVideo.mp4

4 - 剪切longVideo.mp4以匹配音频时长:

-y -i longVideo.mp4 -ss 00:00:00 -t audioDuration -async 1 -c copy finalVideo.mp4

相关内容