FFmpeg 创建的输出文件比其最长的流短

FFmpeg 创建的输出文件比其最长的流短

假设pipe:0是一个 3 秒的 wav 文件
假设input2.mp4是一个 1 秒的 mp4 文件

使用此命令:

ffmpeg -f f32le -ar 44100 -channels 2 -i pipe:0 -t 5 -itsoffset 4 -i input2.mp4 -y -f mp4 -c:v copy -map 0:a -map 1:v output.mp4

我预计它的output.mp4持续时间为 5 秒,因为最长的流(视频流)持续那么长时间。

但是,输出文件仅持续 3 秒,即音频流的持续时间。如果我output.mp4在 QuickTime 中播放,确实只有 3 秒的音频。

有趣的是,当我用分析输出时ffprobe,我可以看到视频流的持续时间为 5 秒,开始时间为 4 秒,这是应该的。

我怎样才能使输出与最长的流一样长?我很确定我可以重新编码视频流(而不是复制它),但我想避免这种情况。我只是不明白为什么不重新编码就不可能。

为什么不ffmpeg考虑超过 3 秒的时间戳?

答案1

FFmpeg 不会根据其他流的持续时间延长特定流。如果您想延长某个流,请使用过滤器 - apad 用于音频,tpad 用于视频。然后添加 -shortest 或 -t duration 来限制输出。

相关内容