Filtro FFmpeg per cambio di scena


1

Basta entrare in FFmpeg e voler usare un filtro per eseguire test di qualità / stabilità video di lunga durata. Ho usato il filtro di cambio scena impostato su una differenza molto bassa (0,000005) per rilevare un singolo fotogramma di piccoli artefatti noti da una sequenza video che non contiene altri movimenti noti. Ho inserito un piccolo artefatto di 2 pixel per 8 pixel in ciascuno dei vari fotogrammi in un certo numero di luoghi diversi per fornire un controllo sul fatto che il rilevamento stava effettivamente funzionando. È in grado di rilevare una manciata di fotogrammi inseriti nel video non compresso in un'ora di contenuto in loop attraverso il sistema in misurazione, ma è necessario filtrare in batch i file acquisiti. Anche i contenuti leggermente compressi sono OK, come ProRes - ma qualsiasi sequenza GOP lunga inonda i piccoli artefatti che vogliamo assicurarsi che non siano presenti (eccetto quelli che inseriamo per scopi di controllo ...)

La mia domanda è: C'è un modo semplice per automatizzare questa idea per lavorare su video continui piuttosto che filtrare in batch i file catturati? Attualmente catturo una .png di ciascun fotogramma portante rilevato per garantire che quello che ho rilevato sia quello che ho inserito - né più né meno ...

Grazie in anticipo per eventuali suggerimenti

AGGIORNAMENTO: Abbiamo progettato un test basato sul flusso utilizzando la porta INPUT di Decklink (quella HDMI ...) per acquisire video non elaborati in un filtro FFMPEG che rileva i cambiamenti di scena. La soglia del rilevatore è impostata su un valore piuttosto basso (0,000005) che consente il filtro Sum of Absolute Differences per catturare piccoli artefatti dell'immagine di una durata di fotogrammi e solo pochi pixel. Il nostro loop ProRes in esecuzione su HyperDeck riproduce una sequenza di immagini in campo blu senza movimento con da uno a cinque punti bianchi o neri per fotogramma, e questa iniezione di fotogrammi anomali noti si verifica solo una volta per ciclo di un'ora come controllo per verificare il filtro sta funzionando come dovrebbe Questo flusso è passato attraverso il nostro prodotto sotto test e quindi analizzato dalla combinazione di filtri Decklink e FFMPEG. Ovviamente stiamo osservando eventuali fotogrammi di anomalia di riferimento mancanti che si sapevano iniettare e / o altri fotogrammi rilevati che indicano un errore di elaborazione nel nostro sistema in prova. Possiamo esaminare i frame .png memorizzati per vedere la natura di qualsiasi anomalia.

Tutto funziona come dovrebbe ed è stabile per i test di lunga durata, ma sembra esserci un problema se interrompiamo l'analisi e proviamo a riavviare . Forse qualcosa nel Decklink non viene inizializzato correttamente. Al momento, l'unico sollievo è quello di spegnere la workstation che contiene il Decklink, attendere che gli alimentatori si scarichino completamente, quindi riaccendere e riavviare l'applicazione di filtraggio FFMPEG.

Qualcuno sa come viene inizializzato questo valore iniziale? È impostato in Decklink o in FFMPEG ??

Questo è ciò che mostra la finestra di comando in ffmpeg quando tentiamo di riavviare il processo senza il passaggio di spegnimento:

C: \ Users \ cvandusen & gt; ffmpeg -f dshow -video_size 1280x720 -rtbufsize 702000k -framerate 60 -i video = "Decklink Video Capture" -vf "seleziona = gt (scena \, 0,000005)" -vsync vfr test2% 03d.png

versione ffmpeg N-89803-g856b7cae9f Copyright (c) 2000-2018 gli sviluppatori FFmpeg   costruito con gcc 7.2.0 (GCC)   configurazione: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable -libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable- libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable- zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid - enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx   libavutil 56. 7.100 / 56. 7.100   libavcodec 58. 9.100 / 58. 9.100   libavformat 58. 3.100 / 58. 3.100   libavdevice 58. 0.100 / 58. 0.100   libavfilter 7. 11.101 / 7. 11.101   libswscale 5. 0.101 / 5. 0.101   libswresample 3. 0.101 / 3. 0.101   libpostproc 55. 0.100 / 55. 0.100 Input # 0, dshow, da 'video = Decklink Video Capture':   Durata: N / A, inizio: 71582788.364437 , bitrate: N / A     Stream # 0: 0: Video: rawvideo (HDYC / 0x43594448), uyvy422 (tv), 1280x720, 60 fps, 60 tbr, 10000k tbn, 10000k tbc Mappatura del flusso:   Stream # 0: 0 - & gt; # 0: 0 (rawvideo (nativo) - & gt; png (nativo)) Premere [q] per interrompere, [?] Per aiuto Output # 0, image2, a '20180215pm% 03d.png':   Metadati:     codificatore: Lavf58.3.100     Stream # 0: 0: Video: png, rgb24, 1280x720, q = 2-31, 200 kb / s, 60 fps, 60 tbn, 60 tbc     Metadati:       codificatore: Lavc58.9.100 png frame = 0 fps = 0.0 q = 0.0 Lsize = N / A time = 00: 00: 00.00 bitrate = N / A speed = 0x video: 0kB audio: 0kB sottotitoli: 0kB altri flussi: 0kB intestazioni globali: 0kB sovraccarico di muxing: sconosciuto Il file di output è vuoto, nulla è stato codificato (controlla i parametri -ss / -t / -frames se usato)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.