小编Imf*_*ego的帖子

ffmpeg - 如何在编解码器复制时从关键帧精确开始剪切?

\n

使用 -ss 作为输入选项和 -c:v copy 可能不准确,因为 ffmpeg 被迫仅在 i 帧上使用/分割。尽管\n它会\xe2\x80\x94(如果可能)\xe2\x80\x94将流的开始时间调整为负\n值以对此进行补偿。基本上,如果您指定“第二个 157”,并且直到第二个 159 为止都没有关键帧,它将在开始时包含两秒的音频(没有视频),然后将从第一个关键帧开始。因此,在分割和进行编解码器复制时要小心。

\n
\n\n

-ss为了避免这种情况,我首先尝试通过-to 构建所有附近帧的图块来查找所需帧的时间戳。I\xe2\x80\x99ve 使用生成的图块

\n\n

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

\n\n

根据他们的说法,所需的关键帧应从 00:09:56.012 开始,最后所需的帧应在 00:10:00.224 处。但是,使用这些时间戳进行切割时创建的片段

\n\n

ffmpeg -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

\n\n

从非关键帧(仅声音)开始,也在错误的位置结束。相比之下,即使视频和音频输出设置设置为Copy(IIUC,无需重新编码并从无关键帧开始),在 Avidemux 中剪切相同片段也能正常工作。Avidemux 中显示的时间戳也不同 ( -ss …

ffmpeg video-editing

7
推荐指数
1
解决办法
6820
查看次数

标签 统计

ffmpeg ×1

video-editing ×1