连接具有不同分辨率的文件列表

连接具有不同分辨率的文件列表

我有一个 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 创建的。这完全取决于您的输入是什么样子的以及有多少种颜色。

另请参阅

相关内容