为什么 FFmpeg 会修剪我转换的 GIF?

为什么 FFmpeg 会修剪我转换的 GIF?

我填充了我的 MP4 文件然后将其转换为 GIF,但为什么 FFmpeg 会将 gif 剪辑为较短的视频?

ffmpeg -i Media1.mp4 -f lavfi -i anullsrc -c:v copy -af apad -t 5.83 Media1extended.mp4
ffmpeg -i Media1extended.mp4 -vf "split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 Media1extended.gif

我如何让它不修剪?例如命令-autotrim 0

编辑:这是我的命令,它不起作用

ffmpeg -i Media1.mp4 -vf tpad=stop_mode=clone:stop_duration=5.83 Media1extended.mp4
ffmpeg -i Media1extended.mp4 -vf "split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse;tpad=stop_mode=clone:stop_duration=5.83" -loop 0 Media1extended.gif

Simple filtergraph 'split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse;tpad=stop_mode=clone:stop_duration=5.83' was expected to have exactly 1 input and 1 output. However, it had >1 input(s) and >1 output(s). Please adjust, or use a complex filtergraph (-filter_complex) instead.
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0

编辑:这有效

ffmpeg -i Media1.mp4 -vf tpad=stop_mode=clone:stop_duration=5.83 Media1extended.mp4
ffmpeg -i Media1extended.mp4 -vf "split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -t 5.83 -loop 0 Media1extended.gif

答案1

在您的第一个命令中,只有音频被填充到 5.83 秒。如果源文件Media1.mp4的视频流较短,它将保持相同的长度,因为您使用的是-c:v copy

要延长视频流长度,无需重新编码,您可以在第一个命令中循环视频流,即-stream_loop -1 -i Media1.mp4。如果您希望保留最后一帧,请在 paletteuse 之后使用带有克隆模式的 tpad 过滤器,并添加-t 5.83

相关内容