似乎我可以拥有一个(-ss
或-itsoffset
),但不能同时拥有两个,或者它们彼此抵消。
我使用以下命令创建output.mp4:
ffmpeg -i input.mp3 -itsoffset 4 -t 4 -ss 3 -i input.mp4 -c:v copy output.mp4
使用此命令,我希望音频立即开始播放,而视频则在4秒后开始播放,这是在3秒内找到的。
但是,当我播放input.mp4时,视频仅比音频晚一秒钟(而不是4秒)开始播放。我想它做的是“偏移-搜寻= 1”类型的事情。
如何防止搜寻影响偏移量?
干杯!
答案 0 :(得分:0)
正如Gyan所建议的,我通过使用搜索位置和持续时间对视频流进行单独编码来使其工作:
ffmpeg -t 4 -ss 3 -i input.mp4 -c:v libx264 output.mp4
然后将其在最终的.mp4中与偏移量混合:
ffmpeg -i input.mp3 -itsoffset 4 -i input.mp4 -c:v copy output.mp4
答案 1 :(得分:0)
”“我希望音频立即开始播放,而视频会在4秒后开始播放,
(在视频中等待3秒)。如何无需重新编码?”
尝试用作:
ffmpeg -ss 00:00:03 -itsoffset 4 -i video.mp4 -ss 00:00:00 -i audio.mp3 -c:v copy output.mp4
命令的含义(它们的输入/顺序也很重要)...
-ss 00:00:03
=搜索3秒钟的输入video.mp4
,将其设置为输出视频轨道的起点。
-itsoffset 4
=设置输入播放为输出之前的延迟。保持静止帧4秒钟。
-i video.mp4
=此时设置视频输入。
-ss 00:00:00
=搜索输入audio.mp4
的0秒作为输出音频音轨的起点。
-i audio.mp3
=此时设置音频输入((请参见下面的音频旁注)。
-c:v copy
=(避免重新编码视频音轨)。
output.mp4
=设置输出a / v 容器。
旁注:
关于视频:
MPEG视频只能搜索关键帧(也称为i-frames
)。如果您在同时使用-ss 3
的同时设置-c:v copy
,并且在-ss
时找不到关键帧,则事情可能无法按预期进行。
3秒可能缺少关键帧可能解释了您的原因:
“当我播放
input.mp4
时,视频开始播放的时间仅比音频晚1秒(而不是4秒)”
甚至在文档中警告(请参阅:FFmpeg wiki page - Seeking)。
在进行编解码器复制时寻求
将
-ss
与-c:v
复制一起用作输入选项可能不正确,因为ffmpeg被强制仅在i帧上使用/拆分。尽管会,但可能的话,请将流的开始时间调整为负值以弥补这一点。基本上,如果您指定“ second 157”并且直到秒159才有关键帧,则它将在开始时包含两秒钟的音频(无视频),然后从第一个关键帧开始。
So be careful when splitting and doing codec copy
。
唯一的解决方案是保持测试/调整视频-ss
的值以找到次要的折衷方案。
HOURS:MM:SS.MILLISECONDS
时间格式来最接近预期的 3 秒。 示例: -ss 00:00:02.895
关于音频: MP4通常具有AAC音轨。请注意,由于您输入的音频为MP3格式,因此FFmpeg会将其自动重新编码为AAC格式。
-c:a copy
强制MP3 -c:v copy
之后添加)。