Прежде всего, я боюсь, что ваша функция может вообще перестать работать из-за достаточно большого FLV-видеофайла и попадания PHP в memory_limit
$contents = fread($handle, filesize($file));
потому что вы фактически загружаете весь файл в память.
Тогда нерабочий файл мне тоже кажется поврежденным.
flvmeta дает следующий вывод:
$ flvmeta --check not_working_copy.flv
0x00488473: error E30013: unknown tag type 250
0x00488477: error E40023: timestamps are decreasing from 130543 to 0
2 error(s), 0 warning(s)
Если вам нужно эффективно получить длительность из файла, который может быть поврежден или содержит нестандартные теги, я рекомендую использовать MediaInfo , который отлично справляется с обработкой даже самых экзотических видеофайлы, не изменяя их, как ffmpeg.
Он может вызываться из PHP как любая программа командной строки, а его вывод контролируется аргументами командной строки:
$ MediaInfo --Inform="Video;%Duration%" not_working_copy.flv
130000
, который отображает продолжительность видео в миллисекундах.