Comment découper les cadres noirs avec ffmpeg sur les fenêtres?

Robert Koernke

Comment découper les cadres noirs avec ffmpeg sur les fenêtres?


J’ai une courte vidéo et j’essaie de couper toutes les images vides ou presque vierges. Ce n’est pas un cas où je me soucie des pauses dans une vidéo qui pourraient être sombres. Je veux littéralement que tous les cadres noirs soient éteints.

Ce que je n’avais pas réalisé avec ffmpeg au début, c’est que les filtres ‘blackframe’ ou ‘blackdetect’, c’est qu’ils n’ont pas réellement filtré. Ils semblent juste vous montrer ce que vous pouvez éventuellement filtrer, avec d’autres commandes.

Quelle est la meilleure façon dans «Windows» de filtrer réellement les images trouvées résultantes?

Donc, avec ffmpeg, je concatène (ting) en avant et en arrière le même fichier que j’utilise des filtres sur ces fichiers. Voir ma commande actuelle:

 ffmpeg.exe -y -i "2013-10-14_14-30-55.mov" -filter_complex "[0:v]transpose=3,split[tp][tp2];[tp]reverse[vr];[tp2][vr]concat=n=2:v=1:a=0[vbf];[vbf]blackframe=98:32[v]" -map "[v]" -vcodec wmv2 -q 10 -trellis 2 -r 16 "g:gd5.wmv" 

Ensuite, j’obtiens cette sortie: (Juste la fin de toute façon …)

 [Parsed_blackframe_4 @ 00000000003bf320] frame:650 pblack:99 pts:21821999 t:21.821999 type:B last_keyframe:639 [Parsed_blackframe_4 @ 00000000003bf320] frame:651 pblack:99 pts:21855366 t:21.855366 type:P last_keyframe:639 [Parsed_blackframe_4 @ 00000000003bf320] frame:652 pblack:99 pts:21888733 t:21.888733 type:B last_keyframe:639 [Parsed_blackframe_4 @ 00000000003bf320] frame:653 pblack:99 pts:21922099 t:21.922099 type:B last_keyframe:639 [Parsed_blackframe_4 @ 00000000003bf320] frame:654 pblack:99 pts:21955466 t:21.955466 type:I last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:655 pblack:99 pts:21988833 t:21.988833 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:656 pblack:99 pts:22022199 t:22.022199 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:657 pblack:99 pts:22055566 t:22.055566 type:P last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:658 pblack:99 pts:22088933 t:22.088933 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:659 pblack:99 pts:22122299 t:22.122299 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:660 pblack:99 pts:22155666 t:22.155666 type:P last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:661 pblack:99 pts:22189033 t:22.189033 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:662 pblack:99 pts:22222399 t:22.222399 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:663 pblack:99 pts:22255766 t:22.255766 type:P last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:664 pblack:99 pts:22289133 t:22.289133 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:665 pblack:99 pts:22322499 t:22.322499 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:666 pblack:99 pts:22355866 t:22.355866 type:P last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:667 pblack:99 pts:22389233 t:22.389233 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:668 pblack:99 pts:22422599 t:22.422599 type:B last_keyframe:654 [Parsed_blackframe_4 @ 00000000003bf320] frame:669 pblack:99 pts:22455966 t:22.455966 type:I last_keyframe:669 frame= 362 fps= 14 q=10.0 Lsize= 9004kB time=00:00:22.62 bitrate=3260.2kbits/s dup=1 drop=309 video:8922kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.918756% 

Alors, que dois-je faire avec ces informations Blackframe dans Windows? Ou existe-t-il une meilleure méthode avec le filtre «blackdetect»?

Réponses


 aergistal

Voici une façon de le faire avec les filtres blackdetect et trim .

Tout d’abord, un meilleur moyen d’obtenir la sortie blackdetect est via ffprobe car il est capable d’écrire des données structurées telles que XML , JSON ou une key=value par ligne.

Pour ce faire, utilisez l’injection de métadonnées:

ffprobe -f lavfi -i "movie=/path/to/input.mp4,blackdetect[out0]" -show_entries tags=lavfi.black_start,lavfi.black_end -of default=nw=1 -v quiet TAG:lavfi.black_start=0 TAG:lavfi.black_end=5.42208 TAG:lavfi.black_start=73.4067

Comme vous pouvez le voir, il renvoie l’heure de début et de fin de chaque section noire. Vous utilisez les informations renvoyées pour trim les segments entre chaque end et le start suivant:

ffmpeg -i /path/to/input.mp4 -filter_complex "[0:v]trim=start=5.42208:end=73.4067,setpts=PTS-STARTPTS[v1];[0:a]atrim=start=5.42208:end=73.4067,asetpts=PTS-STARTPTS[a1]" -map [v1] -map [a1] output.mp4

Vous pouvez chaîner plusieurs filtres de découpage dans la même commande. Voir cette réponse pour un exemple détaillé.

Pour automatiser cela dans Windows, vous pouvez installer et utiliser PowerShell ou un autre langage de script de votre choix (PHP, Python, etc.).

Robert Koernke

Votre aide est appréciée et semble être la bonne voie. Cependant, j’ai essayé la commande ffprobe que vous avez suggérée: ffprobe -f lavfi -i "movie=2013-10-14_14-30-55.mov,blackdetect[out0]" -show_entries tags=lavfi.black_start,lavfi.black_end -of default=nw=1 -v quiet Mais aucune entrée ne sort du tout. Serait-ce possible, car les cadres en question ne sont pas assez noirs, ou je me trompe? Je ne comprends pas certaines des commandes.

aergistal

@RobertKoernke J’ai utilisé les paramètres par défaut de blackdetect , vérifiez ses arguments et son exemple sur ffmpeg.org/ffmpeg-filters.html#blackdetect . Assurez-vous que vous disposez également d’une version récente de ffmpeg et non d’une installation de distribution par défaut.

aergistal

La commande signifie: faire blackdetect , afficher uniquement les black_start et black_end , utiliser le format de sortie par -of default sans wrappers nw=1 et supprimer toutes les autres sorties -v quiet

Robert Koernke

btw … Vous me donnez des instructions Windows correctes? Ok, j’ai temporairement enlevé le -v quiet et j’obtiens ceci: [Parsed_movie_0 @ 0056f560] Échec de avformat_open_input ‘C’ [lavfi @ 0056e2a0] Erreur lors de l’initialisation du filtre ‘film’ avec args ‘C: UsersDOCUME ~ 12013-10-14_14-30 -55.mov ‘movie = C: Users DOCUME ~ 1 2013-10-14_14-30-55.mov, blackdetect = d = 0: pix_th = 51.80 [out0]: aucun fichier ou répertoire de ce type`

aergistal

Lorsque vous utilisez un chemin à l’intérieur d’un argument de commande, vous devez échapper les caractères spéciaux ou le citer, ou utiliser des chemins simples et plus courts. ffmpeg.org/ffmpeg-utils.html#toc-Quoting-and-escaping

 

avec, cadres, comment, découper, fenêtres, ffmpeg?, Les, noirs, sur

 

wiki

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *