У меня есть видео, где я хотел бы вырезать часть. Я использую команду:
ffmpeg -ss 526.623 -t 347.986 -i 'example.mp4' -c copy -avoid_negative_ts 1 -y res.mp4
Где ожидаемая длина 00:05:47.99
. Журнал процесса показывает следующее:
...
frame=10582 fps=8258 q=-1.0 Lsize= 1061446kB time=00:05:47.98 bitrate=24987.8kbits/s speed= 272x
video:1044531kB audio:16556kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.033789%
Как вы можете видеть time=00:05:47.98
, как и ожидалось, но когда я проигрываю это видео в плеере, я вижу, что в конце у него есть дополнительные 5 секунд видео. Я проверяю продолжительность воспроизведения:
$ ffmpeg -i 'res.mp4' 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
00:05:53.11
Что за ... Моя подсказка была I-рамкой GOP, но когда я изменял свои команды следующим образом:
ffmpeg -ss 526.623 -t 347 -i 'example.mp4' -c copy -avoid_negative_ts 1 -y res.mp4
Вывод показывает time=00:05:46.99
и фактическая длина видео составляет 00:05:52.13
В первом случае добавлено 5.13sec
, во втором 5.14
. Давайте возьмем 5.14
для обоих случаев, которые показывают, что это не имеет никакого отношения к I-кадру. В этом мире нет волшебников c (наверное). Но что тогда?
UPD: Это GOP в начале видео. Для этого видео это около 7 секунд.