我有一个 mp4 文件列表,这些文件的大小为 1024 kb 或最大 4 MB(它们实际上是 gif,但下载为 mp4)。因此,当我使用列表连接它们时,视频无法播放,因为它们的大小不同(分辨率不同),并且不是都按垂直顺序排列。所以任何帮助都可以,如果有人愿意告诉我 FFmpeg 命令,可以将这个 mp4 列表转换为 gif,而不会损失质量。提前谢谢
答案1
您可以使用每秒帧数,规模,塞萨尔,设定点,连接,调色板, 和调色板使用篩選器。
1. 使所有输入统一,连接起来,然后生成调色板
ffmpeg -i input0 -i input1 -i input2 -filter_complex \
"[0:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v0]; \
[1:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v1]; \
[2:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0,palettegen[out]" \
-map "[out]" palette.png
- 您可能不需要 fps,但您没有显示有关输入的任何信息,所以我不得不做出假设。
2. 编码为 GIF
ffmpeg -i input0 -i input1 -i input2 -i palette.png -filter_complex \
"[0:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v0]; \
[1:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v1]; \
[2:v]fps=10,scale=320:240,setsar=1/1,setpts=PTS-STARTPTS[v2]; \
[v0][v1][v2]concat=n=3:v=1:a=0[vv]; \
[vv][3:v]paletteuse[out]" \
-map "[out]" output.gif
- 您无法“在不损失质量的情况下将 MP4 转换为 GIF”,但您有可能不会注意到太大的差异,因为您说 MP4 是从 GIF 创建的。这完全取决于您的输入是什么样子的以及有多少种颜色。