
Recherche avancée
Médias (1)
-
Revolution of Open-source and film making towards open film making
6 octobre 2011, par
Mis à jour : Juillet 2013
Langue : English
Type : Texte
Autres articles (66)
-
MediaSPIP 0.1 Beta version
25 avril 2011, parMediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
The zip file provided here only contains the sources of MediaSPIP in its standalone version.
To get a working installation, you must manually install all-software dependencies on the server.
If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...) -
MediaSPIP version 0.1 Beta
16 avril 2011, parMediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...) -
Amélioration de la version de base
13 septembre 2013Jolie sélection multiple
Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)
Sur d’autres sites (10936)
-
Revision ed22179a82 : Rewrite HORIZx4 and HORIZx8 in subpixel filter functions In subpixel filters, p
3 octobre 2013, par Yunqing WangChanged Paths :
Modify /vp9/common/x86/vp9_subpixel_8t_ssse3.asm
Rewrite HORIZx4 and HORIZx8 in subpixel filter functionsIn subpixel filters, prefetched source data, unrolled loops,
and interleaved instructions.In HORIZx4, integrated the idea in Scott's CL (commit :
d22a504d11a15dc3eab666859db0046b5a7d75c5), which was suggested by
Erik/Tamar from Intel. Further tweaking was done to combine row 0,
2, and row 1, 3 in registers to do more 2-row-in-1 operations until
the last add.Test showed a 2% decoder speedup.
Change-Id : Ib53d04ede8166c38c3dc744da8c6f737ce26a0e3
-
Can't view and record graph at the same time using FFMpegWriter [closed]
7 juillet 2024, par Barkın ÖzerSo this code is used for graphing and logging sensor data coming from bluetooth ports. I wanted to add an function that will record the graph in mp4 format. In order to achieve this I used ffmpegWriter. The issue is while this code records the graph I can't view the graph at the same time.


import serial
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation, FFMpegWriter
import openpyxl
from datetime import datetime

# Constants
GRAVITY = 9.81 # Standard gravity in m/s²

# Initialize serial connections to HC-06 devices
ser_x_accel = serial.Serial('COM4', 9600, timeout=1) # X-axis acceleration data
ser_y_angle = serial.Serial('COM11', 9600, timeout=1) # Y-axis angle data

# Initialize empty lists to store data
x_accel_data = []
y_angle_data = []
timestamps = []

# Initialize Excel workbook
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "Sensor Data"
ws.append(["Timestamp", "X Acceleration (m/s²)", "Y Angle (degrees)"])

# Function to update the plot and log data
def update(frame):
 # Read data from serial connections
 line_x_accel = ser_x_accel.readline().decode('utf-8').strip()
 line_y_angle = ser_y_angle.readline().decode('utf-8').strip()
 
 try:
 # Parse and process X-axis acceleration data
 x_accel_g = float(line_x_accel) # Acceleration in g read from serial
 x_accel_ms2 = x_accel_g * GRAVITY # Convert from g to m/s²
 x_accel_data.append(x_accel_ms2)
 
 # Parse and process Y-axis angle data
 y_angle = float(line_y_angle)
 y_angle_data.append(y_angle)
 
 # Append timestamp
 timestamps.append(datetime.now())

 # Limit data points to show only the latest 100
 if len(x_accel_data) > 100:
 x_accel_data.pop(0)
 y_angle_data.pop(0)
 timestamps.pop(0)

 # Log data to Excel with timestamp
 timestamp_str = timestamps[-1].strftime("%H:%M:%S")
 ws.append([timestamp_str, x_accel_data[-1], y_angle_data[-1]])

 # Clear and update plots
 ax1.clear()
 ax1.plot(timestamps, x_accel_data, label='X Acceleration', color='b')
 ax1.legend(loc='upper left')
 ax1.set_ylim([-20, 20]) # Adjust based on expected acceleration range in m/s²
 ax1.set_title('Real-time X Acceleration Data')
 ax1.set_xlabel('Time')
 ax1.set_ylabel('Acceleration (m/s²)')
 ax1.grid(True)

 ax2.clear()
 ax2.plot(timestamps, y_angle_data, label='Y Angle', color='g')
 ax2.legend(loc='upper left')
 ax2.set_ylim([-180, 180])
 ax2.set_title('Real-time Y Angle Data')
 ax2.set_xlabel('Time')
 ax2.set_ylabel('Angle (degrees)')
 ax2.grid(True)

 # Update text boxes with latest values
 text_box.set_text(f'X Acceleration: {x_accel_data[-1]:.2f} m/s²')
 text_box2.set_text(f'Y Angle: {y_angle_data[-1]:.2f}°')
 
 # Save the workbook periodically (every 100 updates)
 if frame % 100 == 0:
 wb.save("sensor_data.xlsx")
 
 except ValueError:
 pass # Ignore lines that are not properly formatted

# Setup the plots
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))
text_box = ax1.text(0.05, 0.95, '', transform=ax1.transAxes, fontsize=12, verticalalignment='top', bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))
text_box2 = ax2.text(0.05, 0.95, '', transform=ax2.transAxes, fontsize=12, verticalalignment='top', bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))

# Animate the plots
ani = FuncAnimation(fig, update, interval=100) # Update interval of 100ms

# Save the animation as a video file
writer = FFMpegWriter(fps=10, metadata=dict(artist='Me'), bitrate=1800)
ani.save("sensor_data.mp4", writer=writer)

plt.tight_layout()
plt.show()

# Save the workbook at the end of the session
wb.save("sensor_data.xlsx")




I tried using OpenCV to record the graph but then I didn't even got any recording. I think solving this issue with my original code would be a better approach.


-
Issue with streaming in realtime to HTML5 video player
24 juillet 2023, par ImaSquareBTWok so i created a project which should take an mkv file convert it to a sutaible fomrat in relatime and play it as it transcodes in the html 5 video player and should play as soon as small segement is ready for playback but unfornatlly it does seem to work heres my code if your curious, help would be very much appreicted




 
 
 
 
 <video controls="controls">
 <source src="output.mp4" type="video/mp4">
 </source></video>
 <code class="echappe-js"><script src="https://cdnjs.cloudflare.com/ajax/libs/ffmpeg/0.11.6/ffmpeg.min.js" integrity="sha512-91IRkhfv1tLVYAdH5KTV&#x2B;KntIZP/7VzQ9E/qbihXFSj0igeacWWB7bQrdiuaJVMXlCVREL4Z5r&#x2B;3C4yagAlwEw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<script src='http://stackoverflow.com/feeds/tag/player.js'></script>

 



and my javscript :


let mediaSource;
let sourceBuffer;
let isTranscoding = false;
let bufferedSeconds = 0;

async function setupMediaSource() {
 mediaSource = new MediaSource();
 const videoPlayer = document.getElementById('video-player');
 videoPlayer.src = URL.createObjectURL(mediaSource);
 await new Promise(resolve => {
 mediaSource.addEventListener('sourceopen', () => {
 sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.64001E, mp4a.40.2"'); // Match the transcoded format
 sourceBuffer.addEventListener('updateend', () => {
 if (!sourceBuffer.updating && mediaSource.readyState === 'open') {
 mediaSource.endOfStream();
 resolve();
 }
 });
 });
 });
}

async function transcodeVideo() {
 const ffmpeg = createFFmpeg({ log: true });
 const videoPlayer = document.getElementById('video-player');

 await ffmpeg.load();
 const transcodeCommand = ['-i', 'The Legend of Old Gregg S02E05.mkv', '-c:v', 'libx264', '-preset', 'ultrafast', '-c:a', 'aac', '-strict', 'experimental', '-f', 'mp4', '-movflags', 'frag_keyframe+empty_moov', 'output.mp4'];

 const videoUrl = 'The Legend of Old Gregg S02E05.mkv'; // The URL of the original video file

 let lastBufferedSeconds = 0;
 let currentTime = 0;
 while (currentTime < videoPlayer.duration) {
 if (!isTranscoding && sourceBuffer.buffered.length > 0 && sourceBuffer.buffered.end(0) - currentTime < 5) {
 isTranscoding = true;
 const start = sourceBuffer.buffered.end(0);
 const end = Math.min(videoPlayer.duration, start + 10);
 await fetchAndTranscode(videoUrl, start, end, ffmpeg, transcodeCommand);
 isTranscoding = false;
 currentTime = end;
 bufferedSeconds += (end - start);
 const transcodingSpeed = bufferedSeconds / (currentTime);
 lastBufferedSeconds = bufferedSeconds;
 console.log(`Transcoded ${end - start} seconds of video. Buffered: ${bufferedSeconds.toFixed(2)}s (${transcodingSpeed.toFixed(2)}x speed)`);
 }
 await new Promise(resolve => setTimeout(resolve, 500));
 }

 await ffmpeg.exit();
}

async function fetchAndTranscode(url, start, end, ffmpeg, transcodeCommand) {
 const response = await fetch(url, { headers: { Range: `bytes=${start}-${end}` } });
 const data = new Uint8Array(await response.arrayBuffer());
 ffmpeg.FS('writeFile', 'input.mkv', data); // Use 'input.mkv' as a temporary file
 await ffmpeg.run(...transcodeCommand);
 const outputData = ffmpeg.FS('readFile', 'output.mp4');
 appendSegmentToBuffer(outputData);
}

function appendSegmentToBuffer(segment) {
 if (!sourceBuffer.updating) {
 sourceBuffer.appendBuffer(segment);
 } else {
 sourceBuffer.addEventListener('updateend', () => {
 sourceBuffer.appendBuffer(segment);
 });
 }
}

async function createFFmpeg(options) {
 const { createFFmpeg } = FFmpeg;
 const ffmpeg = createFFmpeg(options);
 await ffmpeg.load();
 return ffmpeg;
}

(async () => {
 await setupMediaSource();
 await transcodeVideo();
})();