Un guide de la stéganographie vidéo à l’aide de Python – Meilleure programmation

Table des matières

Un guide de la stéganographie vidéo à l’aide de Python – Meilleure programmation

Vidéo par Roman Koval sur Pexels.

La vidéo source d’origine est assez longue, donc je viens d’en utiliser une partie de huit secondes.

1. Extraire des images d’une vidéo

Tout d’abord, installez OpenCv et importez-le:

import cv2

Nous devons lire la vidéo. Parcourez la vidéo image par image et enregistrez toutes les images dans un nouveau répertoire.

Pour charger la vidéo, nous exécutons:

vidcap = cv2.VideoCapture("video.mp4")

Cela charge la vidéo dans vidcap. Maintenant, nous pouvons utiliser le read méthode pour lire les images de « video.mp4: »

success, image = vidcap.read()

Nous pouvons définir une boucle pour parcourir toutes les images et l’enregistrer avec un nom de fichier unique que nous pouvons facilement trier:

Une fois cela fait, nous nous retrouvons avec toutes les images de la vidéo.

Mais une vidéo n’est pas seulement une collection d’images. Il y a aussi de l’audio. Pour extraire cet audio, nous utiliserons FFmpeg.

2. Extraire l’audio d’une vidéo

Pour installer FFmpeg dans Ubuntu, mettez d’abord à jour la liste des packages:

$sudo apt update

Exécutez ensuite la commande ci-dessous pour installer FFmpeg:

$sudo apt install ffmpeg

Pour valider que FFmpeg est installé correctement, exécutez:

ffmpeg -version

Si vous obtenez quelque chose comme le message ci-dessous, tout est OK:

ffmpeg version n4.1.4 Copyright (c) 2000-2019 the FFmpeg developers

Pour utiliser FFmpeg en Python, nous devons importer l’appel et STDOUT à partir du sous-processus bibliothèque:

from subprocess import call,STDOUT

Et puis nous pouvons exécuter le code ci-dessous en Python:

call(["ffmpeg", "-i","video.mp4" , "-q:a", "0", "-map", "a", "tmp/audio.mp3", "-y"],stdout=open(os.devnull, "w"), stderr=STDOUT)

Ce code extraira l’audio du fichier vidéo donné et l’enregistrera sous «audio.mp3» dans le dossier tmp. Après avoir encodé les images avec notre texte, nous pouvons ensuite utiliser ce fichier audio pour donner à notre fichier vidéo encodé l’audio approprié.

3. Encodage du texte à l’intérieur des cadres

split_string est une fonction d’aide pour diviser les chaînes en petites portions. Comme nous n’avons pas besoin de cacher tout le texte dans le premier cadre lui-même, nous divisons les cadres et le cachons dans de nombreux cadres. Le code complet peut être trouvé sur GitHub.

Nous avons chargé une vidéo, l’avons tirée sur autant d’images que possible et l’avons encodée. Maintenant, nous devons rassembler les images dans une vidéo.

4. Faire de la vidéo à partir d’images

call(["ffmpeg", "-i", "tmp/frame%d.png" , "-vcodec", "png", "video.mov", "-y"],stdout=open(os.devnull, "w"), stderr=STDOUT)

L’exécution du code ci-dessus crée la vidéo avec notre message secret caché dedans.

Nous pouvons exécuter le code ci-dessous si nous voulons des sons dans notre vidéo:

call(["ffmpeg", "-i", "temp/video.mov", "-i", "temp/audio.mp3", "-codec", "copy","data/enc-" + str(file_name)+".mov", "-y"],stdout=open(os.devnull, "w"), stderr=STDOUT)

Et nous l’avons fait. La vidéo de sortie est de près de 900 Mo. J’ai téléchargé une petite partie de la vidéo pour montrer que la qualité vidéo n’est pas affectée par cette méthode.

Maintenant que nous avons fait la partie difficile de l’encodage, voyons comment une personne peut décoder notre vidéo et lire le message.

Déchiffrer le message de la vidéo