假设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 来限制输出。