Пример

Пример

Есть ли способ обнаружить замороженное видео с помощью ffmpeg? Мне нужно только знать, есть ли довольно большие области замороженного видео, скажем, 10 секунд или больше.

Я знаком счерныйобнаружитьфильтр.

Может быть, вы могли бы сначала отличить соседние кадры, а затем использовать blackdetect, чтобы определить, не изменилась ли разница? Я не уверен, как выполнить разницу.

решение1

Использоватьзаморозитьобнаружитьfilter. Он новее, чем ветка релиза 4.1, поэтому используйте сборку из текущей ветки git master. СмотритеСкачать FFmpegстраница со ссылками на сборки для Linux, macOS и Windows.

Пример

ffmpeg -i freeze.mp4 -vf "freezedetect=n=-60dB:d=2" -map 0:v:0 -f null -

Параметры

  • noise(или n): Установить допуск шума. Может быть указан в дБ (в случае, если к указанному значению добавлено «дБ») или как отношение разницы между 0 и 1. По умолчанию -60 дБ или 0,001.

  • duration(или d): Установите длительность заморозки до уведомления (по умолчанию 2 секунды).

Пример вывода

Ознакомьтесь с lavfi.freezedetectключами метаданных в выводе консоли.

ffmpeg version N-93663-ga42e761b96 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8.3.0 (GCC)
  configuration: 
  libavutil      56. 26.100 / 56. 26.100
  libavcodec     58. 52.100 / 58. 52.100
  libavformat    58. 27.103 / 58. 27.103
  libavdevice    58.  7.100 / 58.  7.100
  libavfilter     7. 49.100 /  7. 49.100
  libswscale      5.  4.100 /  5.  4.100
  libswresample   3.  4.100 /  3.  4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'freeze.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:28.99, start: 0.000000, bitrate: 1324 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 115:87 DAR 1840:783], 1322 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.27.103
    Stream #0:0(und): Video: wrapped_avframe, yuv420p, 1280x720 [SAR 115:87 DAR 1840:783], q=2-31, 200 kb/s, 23.98 fps, 23.98 tbn, 23.98 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc58.52.100 wrapped_avframe
[freezedetect @ 0x55f7a55c9800] lavfi.freezedetect.freeze_start: 10.01
[freezedetect @ 0x55f7a55c9800] lavfi.freezedetect.freeze_duration: 13.1381x    
[freezedetect @ 0x55f7a55c9800] lavfi.freezedetect.freeze_end: 23.1481
frame=  695 fps=0.0 q=-0.0 Lsize=N/A time=00:00:28.98 bitrate=N/A speed=  40x    
video:364kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

Вывод результатов в файл

Вы можете объединить фильтр метаданных, чтобы просто получить информацию о заморозке:

ffmpeg -i freeze.mp4 -vf "freezedetect=n=-60dB:d=2,metadata=mode=print:file=freeze.txt" -map 0:v:0 -f null -

Что приводит к freeze.txt:

frame:288  pts:288288  pts_time:12.012
lavfi.freezedetect.freeze_start=10.01
frame:555  pts:555555  pts_time:23.1481
lavfi.freezedetect.freeze_duration=13.1381
lavfi.freezedetect.freeze_end=23.1481

Смотритедокументация по фильтру метаданныхдля получения дополнительных опций.

решение2

Несколько месяцев назад появился freezedetectфильтр:https://ffmpeg.org/ffmpeg-filters.html#freezedetect

Оригинальный патч:https://patchwork.ffmpeg.org/patch/10988/

Связанный контент