
Recherche avancée
Médias (3)
-
Elephants Dream - Cover of the soundtrack
17 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Image
-
Valkaama DVD Label
4 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Image
-
Publier une image simplement
13 avril 2011, par ,
Mis à jour : Février 2012
Langue : français
Type : Video
Autres articles (42)
-
Submit bugs and patches
13 avril 2011Unfortunately a software is never perfect.
If you think you have found a bug, report it using our ticket system. Please to help us to fix it by providing the following information : the browser you are using, including the exact version as precise an explanation as possible of the problem if possible, the steps taken resulting in the problem a link to the site / page in question
If you think you have solved the bug, fill in a ticket and attach to it a corrective patch.
You may also (...) -
Contribute to translation
13 avril 2011You can help us to improve the language used in the software interface to make MediaSPIP more accessible and user-friendly. You can also translate the interface into any language that allows it to spread to new linguistic communities.
To do this, we use the translation interface of SPIP where the all the language modules of MediaSPIP are available. Just subscribe to the mailing list and request further informantion on translation.
MediaSPIP is currently available in French and English (...) -
Diogene : création de masques spécifiques de formulaires d’édition de contenus
26 octobre 2010, parDiogene est un des plugins ? SPIP activé par défaut (extension) lors de l’initialisation de MediaSPIP.
A quoi sert ce plugin
Création de masques de formulaires
Le plugin Diogène permet de créer des masques de formulaires spécifiques par secteur sur les trois objets spécifiques SPIP que sont : les articles ; les rubriques ; les sites
Il permet ainsi de définir en fonction d’un secteur particulier, un masque de formulaire par objet, ajoutant ou enlevant ainsi des champs afin de rendre le formulaire (...)
Sur d’autres sites (4332)
-
Python opencv ffmpeg threading exit functions
29 novembre 2020, par scacchii'm trying to finish the audio/video recording loop by pressing a key (or by other event), if i use the simple time.sleep() in the main loop work perfectly, after 5 second stop video and create file, if i use the function keyboard_pressed() doesnt execute stop_AVrecording() correctly and file_manager().
What's im doing wrong ?
Thanks in advance


from __future__ import print_function, division
import numpy as np
import cv2
import pyaudio
import wave
import threading
import time
import subprocess
import os
import keyboard

class VideoRecorder:
 "Video class based on openCV"
 def __init__(self, name="temp_video.avi", fourcc="MJPG", sizex=640, sizey=480, fps=30):
 self.open = True
 self.fps = fps # fps should be the minimum constant rate at which the camera can
 self.fourcc = fourcc # capture images (with no decrease in speed over time; testing is required)
 self.frameSize = (sizex, sizey) # video formats and sizes also depend and vary according to the camera used
 self.video_filename = name
 self.video_cap = cv2.VideoCapture(1, cv2.CAP_DSHOW)
 self.video_writer = cv2.VideoWriter_fourcc(*self.fourcc)
 self.video_out = cv2.VideoWriter(self.video_filename, self.video_writer, self.fps, self.frameSize)
 self.frame_counts = 1
 self.start_time = time.time()

 def record(self):
 "Video starts being recorded"
 counter = 1
 timer_start = time.time()
 timer_current = 0
 while self.open:
 ret, video_frame = self.video_cap.read()
 if ret:
 self.video_out.write(video_frame)
 # print(str(counter) + " " + str(self.frame_counts) + " frames written " + str(timer_current))
 self.frame_counts += 1
 counter += 1
 timer_current = time.time() - timer_start
 #time.sleep(1/self.fps)
 # gray = cv2.cvtColor(video_frame, cv2.COLOR_BGR2GRAY)
 cv2.imshow('video_frame', video_frame)
 cv2.waitKey(1)
 else:
 break

 def stop(self):
 "Finishes the video recording therefore the thread too"
 if self.open:
 self.open=False
 self.video_out.release()
 self.video_cap.release()
 cv2.destroyAllWindows()

 def start(self):
 "Launches the video recording function using a thread"
 video_thread = threading.Thread(target=self.record)
 video_thread.start()

class AudioRecorder():
 "Audio class based on pyAudio and Wave"
 def __init__(self, filename="temp_audio.wav", rate=44100, fpb=1024, channels=2):
 self.open = True
 self.rate = rate
 self.frames_per_buffer = fpb
 self.channels = channels
 self.format = pyaudio.paInt16
 self.audio_filename = filename
 self.audio = pyaudio.PyAudio()
 self.stream = self.audio.open(format=self.format,
 channels=self.channels,
 rate=self.rate,
 input=True,
 frames_per_buffer = self.frames_per_buffer)
 self.audio_frames = []

 def record(self):
 "Audio starts being recorded"
 self.stream.start_stream()
 while self.open:
 data = self.stream.read(self.frames_per_buffer)
 self.audio_frames.append(data)
 if not self.open:
 break

 def stop(self):
 "Finishes the audio recording therefore the thread too"
 if self.open:
 self.open = False
 self.stream.stop_stream()
 self.stream.close()
 self.audio.terminate()
 waveFile = wave.open(self.audio_filename, 'wb')
 waveFile.setnchannels(self.channels)
 waveFile.setsampwidth(self.audio.get_sample_size(self.format))
 waveFile.setframerate(self.rate)
 waveFile.writeframes(b''.join(self.audio_frames))
 waveFile.close()

 def start(self):
 "Launches the audio recording function using a thread"
 audio_thread = threading.Thread(target=self.record)
 audio_thread.start()

def start_AVrecording(filename="test"):
 global video_thread
 global audio_thread
 video_thread = VideoRecorder()
 audio_thread = AudioRecorder()
 audio_thread.start()
 video_thread.start()
 return filename


def start_video_recording(filename="test"):
 global video_thread
 video_thread = VideoRecorder()
 video_thread.start()
 return filename

def start_audio_recording(filename="test"):
 global audio_thread
 audio_thread = AudioRecorder()
 audio_thread.start()
 return filename

def stop_AVrecording(filename="test"):
 audio_thread.stop()
 frame_counts = video_thread.frame_counts
 elapsed_time = time.time() - video_thread.start_time
 recorded_fps = frame_counts / elapsed_time
 print("total frames " + str(frame_counts))
 print("elapsed time " + str(elapsed_time))
 print("recorded fps " + str(recorded_fps))
 video_thread.stop()

 # Makes sure the threads have finished
 while threading.active_count() > 1:
 time.sleep(1)

 # Merging audio and video signal
 if abs(recorded_fps - 6) >= 0.01: # If the fps rate was higher/lower than expected, re-encode it to the expected
 print("Re-encoding")
 cmd = "ffmpeg -r " + str(recorded_fps) + " -i temp_video.avi -pix_fmt yuv420p -r 6 temp_video2.avi"
 subprocess.call(cmd, shell=True)
 print("Muxing")
 cmd = "ffmpeg -y -ac 2 -channel_layout stereo -i temp_audio.wav -i temp_video2.avi -pix_fmt yuv420p " + filename + ".avi"
 subprocess.call(cmd, shell=True)
 else:
 print("Normal recording\nMuxing")
 cmd = "ffmpeg -y -ac 2 -channel_layout stereo -i temp_audio.wav -i temp_video.avi -pix_fmt yuv420p " + filename + ".avi"
 subprocess.call(cmd, shell=True)
 print("..")

def file_manager(filename="test"):
 "Required and wanted processing of final files"
 local_path = os.getcwd()
 if os.path.exists(str(local_path) + "/temp_audio.wav"):
 os.remove(str(local_path) + "/temp_audio.wav")
 if os.path.exists(str(local_path) + "/temp_video.avi"):
 os.remove(str(local_path) + "/temp_video.avi")
 if os.path.exists(str(local_path) + "/temp_video2.avi"):
 os.remove(str(local_path) + "/temp_video2.avi")
 # if os.path.exists(str(local_path) + "/" + filename + ".avi"):
 # os.remove(str(local_path) + "/" + filename + ".avi")

def keyboard_pressed():
 while True:
 if keyboard.is_pressed('q'): # if key 'q' is pressed
 print('------------You Pressed Q Key!--------------')
 #time.sleep(5)
 break


if __name__ == '__main__':
 start_AVrecording()
 #time.sleep(5)
 keyboard_pressed()
 print('-------------Time Sleep-------------------')
 time.sleep(5)
 print('-------------Stop AVrecording-------------')
 stop_AVrecording()
 print('-------------File Manager-----------------')
 file_manager()
 print('-----------------End----------------------')



'''


-
Today we celebrate Data Privacy Day 2019
28 janvier 2019, par Jake Thornton — Privacy -
What is PII ? Your introduction to personally identifiable information