\n\n\n使用 -ss 作为输入选项和 -c:v copy 可能不准确,因为 ffmpeg 被迫仅在 i 帧上使用/分割。尽管\n它会\xe2\x80\x94(如果可能)\xe2\x80\x94将流的开始时间调整为负\n值以对此进行补偿。基本上,如果您指定“第二个 157”,并且直到第二个 159 为止都没有关键帧,它将在开始时包含两秒的音频(没有视频),然后将从第一个关键帧开始。因此,在分割和进行编解码器复制时要小心。
\n
-ss为了避免这种情况,我首先尝试通过-to 构建所有附近帧的图块来查找所需帧的时间戳。I\xe2\x80\x99ve 使用生成的图块
ffmpeg -i "INPUT.mkv" -ss 09:55 -t 3 -vf "drawtext=fontfile=I\\\\:\\Misc\\\\\\\\~Software\\\\\\\\~OS\\\\\\\\I386\\\\\\\\arial.ttf: fontsize=60: text=\'F%{n}\\(%{pict_type}\\)\\@%{pts\\:hms}\': x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1: boxcolor=0x00000000@1,scale=320:-1,tile=layout=12x10" tiles%03d.png
根据他们的说法,所需的关键帧应从 00:09:56.012 开始,最后所需的帧应在 00:10:00.224 处。但是,使用这些时间戳进行切割时创建的片段
\n\nffmpeg -i "INPUT.mkv" -map 0:0 -map 0:4 -map 0:5 -map 0:6 -ss 09:56.012 -to 00:10:00.224 -vcodec copy -acodec copy J01.mkv
从非关键帧(仅声音)开始,也在错误的位置结束。相比之下,即使视频和音频输出设置设置为Copy(IIUC,无需重新编码并从无关键帧开始),在 Avidemux 中剪切相同片段也能正常工作。Avidemux 中显示的时间戳也不同 ( -ss …