问题

问题

我有一些用安卓手机录制的视频。它们非常相似。例如:

我对每个过滤器都应用了这个过滤器:

ffmpeg -i original0.mp4 -filter_complex "crop=720:720:280:0, scale=640:640, transpose=1" -threads 3 -preset ultrafast -strict -2 -y processed0.mp4`

结果:

生成的视频没问题。然后我想以不同的组合将它们连接起来,例如:original0 -> original1 -> original2original1 -> original0 -> original2等等。我使用这个命令:

ffmpeg -f concat -i tmp.txt -codec copy -threads 3 -strict -2 -y combination.mp4

processed0.mp4和的任何组合都processed1.mp4可以正常工作。但如果我包括processed2.mp4组合 - 生成的视频就会损坏:

  • 组合.mp4proccesed0 -> processed1 -> processed2

所有视频都以相同的方式以几秒的间隔录制,并且相同的原始视频组合效果很好。所以我想知道original2或有什么问题processed2以及如何修复它?也许我需要在应用过滤器时添加一些标志?我猜这是因为时间戳而发生的。

答案1

问题

您的输入的帧速率有所不同(请参阅ffmpeg控制台输出),并且我相信 MP4 复用器不支持可变帧速率。

一些解决方案

您可以:

  • 对处理后的文件和最终输出使用不同的容器格式,例如 Matroska (.mkv),或者

  • 将过滤器添加fps到过滤器图中,以便为每个处理的文件提供通用的帧速率:

    -filter_complex "crop=720:720:280:0, scale=640:640, transpose=1, fps=30"
    

其他垃圾

  • -threads 3-strict -2流复制时不执行任何操作()-c copy

  • H.264 编码器 libx264 默认会自动计算最佳线程数,因此强制使用特定值可能不是最优的。

  • 如果您选择输出为 MP4,请考虑将其添加-movflags +faststart到最终输出命令中。这在通过渐进式下载观看时很有用;否则必须完全下载整个文件才能开始播放。

  • 在评论中,您提到分别过滤音频和视频。一个简单的例子可能会有所帮助:

    ffmpeg -i input0 -i input1 -filter_complex \
    "[0:v]hflip,negate[bg]; \
     [1:v]vflip,hue=s=0,scale=120:-1[fg]; \
     [bg][fg]overlay[v]; \
     [0:a]aphaser,flanger[a]" \
    -map "[v]" -map "[a]" -movflags +faststart output.mp4
    

相关内容