
Recherche avancée
Médias (3)
-
Exemple de boutons d’action pour une collection collaborative
27 février 2013, par
Mis à jour : Mars 2013
Langue : français
Type : Image
-
Exemple de boutons d’action pour une collection personnelle
27 février 2013, par
Mis à jour : Février 2013
Langue : English
Type : Image
-
Collections - Formulaire de création rapide
19 février 2013, par
Mis à jour : Février 2013
Langue : français
Type : Image
Autres articles (90)
-
Websites made with MediaSPIP
2 mai 2011, parThis page lists some websites based on MediaSPIP.
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...)
Sur d’autres sites (12327)
-
React Native Expo File System : open failed : ENOENT (No such file or directory)
9 février 2023, par coloradayI'm getting this error in a bare React Native project :


Possible Unhandled Promise Rejection (id: 123):
Error: /data/user/0/com.filsufius.VisionishAItest/files/image-new-♥d.jpg: open failed: ENOENT (No such file or directory)



The same code was saving to File System with no problem yesterday, but today as you can see I am getting an ENOENT error, plus I am getting these funny heart shapes ♥d in the path. Any pointers as to what might be causing this, please ? I use npx expo run:android to builld app locally and expo start —dev-client to run on a physical Android device connected through USB.


import { Image, View, Text, StyleSheet } from "react-native";
import * as FileSystem from "expo-file-system";
import RNFFmpeg from "react-native-ffmpeg";
import * as tf from "@tensorflow/tfjs";
import * as cocossd from "@tensorflow-models/coco-ssd";
import { decodeJpeg, bundleResourceIO } from "@tensorflow/tfjs-react-native";

const Record = () => {
 const [frames, setFrames] = useState([]);
 const [currentFrame, setCurrentFrame] = useState(0);
 const [model, setModel] = useState(null);
 const [detections, setDetections] = useState([]);

 useEffect(() => {
 const fileName = "image-new-%03d.jpg";
 const outputPath = FileSystem.documentDirectory + fileName;
 RNFFmpeg.execute(
 "-y -i https://res.cloudinary.com/dannykeane/video/upload/sp_full_hd/q_80:qmax_90,ac_none/v1/dk-memoji-dark.m3u8 -vf fps=25 -f mjpeg " +
 outputPath
 )
 .then((result) => {
 console.log("Extraction succeeded:", result);
 FileSystem.readDirectoryAsync(FileSystem.documentDirectory).then(
 (files) => {
 setFrames(
 files
 .filter((file) => file.endsWith(".jpg"))
 .sort((a, b) => {
 const aNum = parseInt(a.split("-")[2].split(".")[0]);
 const bNum = parseInt(b.split("-")[2].split(".")[0]);
 return aNum - bNum;
 })
 );
 }
 );
 })
 .catch((error) => {
 console.error("Extraction failed:", error);
 });
 }, []);

 useEffect(() => {
 tf.ready().then(() => cocossd.load().then((model) => setModel(model)));
 }, []);
 useEffect(() => {
 if (frames.length && model) {
 const intervalId = setInterval(async () => {
 setCurrentFrame((currentFrame) =>
 currentFrame === frames.length - 1 ? 0 : currentFrame + 1
 );
 const path = FileSystem.documentDirectory + frames[currentFrame];
 const imageAssetPath = await FileSystem.readAsStringAsync(path, {
 encoding: FileSystem.EncodingType.Base64,
 });
 const imgBuffer = tf.util.encodeString(imageAssetPath, "base64").buffer;
 const imageData = new Uint8Array(imgBuffer);
 const imageTensor = decodeJpeg(imageData, 3);
 console.log("after decodeJpeg.");
 const detections = await model.detect(imageTensor);
 console.log(detections);
 setDetections(detections);
 }, 100);
 return () => clearInterval(intervalId);
 }
 }, [frames, model]);

 
 return (
 <view style="{styles.container}">
 
 <view style="{styles.predictions}">
 {detections.map((p, i) => (
 <text key="{i}" style="{styles.text}">
 {p.class}: {(p.score * 100).toFixed(2)}%
 </text>
 ))}
 </view>
 </view>
 );
};

const styles = StyleSheet.create({
 container: {
 flex: 1,
 alignItems: "center",
 justifyContent: "center",
 },
 image: {
 width: 300,
 height: 300,
 resizeMode: "contain",
 },
 predictions: {
 width: 300,
 height: 100,
 marginTop: 20,
 },
 text: {
 fontSize: 14,
 textAlign: "center",
 },
});

export default Record;```



-
using ffmpeg as multiple downloads
26 avril 2013, par user2321982well guys, I'm having problems with my application.
well I'll explain more, I'm using the plugin uploader uploads multiple videos and I'm using the ffmpeg extension to my php version.<code class="echappe-js"><script type="text/javascript"><br />
// Convert divs to queue widgets when the DOM is ready<br />
$(function() {<br />
$("#uploader").pluploadQueue({<br />
// General settings<br />
runtimes : &#39;gears,flash,silverlight,browserplus,html5&#39;,<br />
url : &#39;upload.php?id=&lt;?= $login_usuario; ?>&amp;name=&lt;?= $name_user; ?>&#39;,<br />
flash_swf_url : &#39;plugins/plupload/plupload.flash.swf&#39;,<br />
containers: &#39;plupload&#39;,<br />
multipart: true,<br />
urlstream_upload: true,<br />
multipart_params:{directory:&#39;uploads&#39;},<br />
multi_selection: true,<br />
<br />
max_file_size : &#39;500mb&#39;,<br />
chunk_size : &#39;1mb&#39;,<br />
unique_names : true,<br />
<br />
// Specify what files to browse for<br />
filters : [<br />
{title : "Video Files", extensions : "avi,mpg,wmv,flv,3gp,mpeg,mpeg4,mpg4,mp4"}<br />
],<br />
// Silverlight settings<br />
silverlight_xap_url : &#39;plugins/plupload/plupload.silverlight.xap&#39;<br />
});<br />
<br />
uploader.ini();<br />
<br />
// Client side form validation<br />
$(&#39;form&#39;).submit(function(e) {<br />
var uploader = $(&#39;#uploader&#39;).plupload(&#39;getUploader&#39;);<br />
<br />
// Files in queue upload them first<br />
if (uploader.files.length > 0) {<br />
// When all files are uploaded submit form<br />
uploader.bind(&#39;StateChanged&#39;, function() {<br />
if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {<br />
$(&#39;form&#39;)[0].submit();<br />
}<br />
});<br />
<br />
uploader.start();<br />
} else<br />
alert(&#39;You must at least upload one file.&#39;);<br />
<br />
return false;<br />
});<br />
});<br />
</script>You browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.
well he calls javascript in a php file, in case it will upload the videos.
what I want is to get the length, resolution, file size and take a screenshot of the video randomly, so far so good, the problem is that it only works with only one upload at a time.
When sending more than one he does the procedure with ffmpeg, besides the most is not taking a screenshot of the video.
below is my code<?php
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
if (!extension_loaded ('ffmpeg') ) exit ( 'ffmpeg não foi carregado!' );
// HTTP headers for no cache etc
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
include("includes/seguranca.php");
include("includes/classes/class.mysql.php");
include("includes/funcoes/sql_inject.php");
$id_user = anti_injection($_GET['id']);
session_start();
// Settings
//$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$targetDir = 'uploads/';
//$cleanupTargetDir = false; // Remove old files
//$maxFileAge = 60 * 60; // Temp file age in seconds
// 5 minutes execution time
@set_time_limit(5 * 60);
// Uncomment this one to fake upload time
// usleep(5000);
// Get parameters
$chunk = isset($_REQUEST["chunk"]) ? $_REQUEST["chunk"] : 0;
$chunks = isset($_REQUEST["chunks"]) ? $_REQUEST["chunks"] : 0;
$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : '';
// Clean the fileName for security reasons
$fileName = preg_replace('/[^\w\._]+/', '', $fileName);
// Make sure the fileName is unique but only if chunking is disabled
if ($chunks < 2 && file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName)) {
$ext = strrpos($fileName, '.');
$fileName_a = substr($fileName, 0, $ext);
$fileName_b = substr($fileName, $ext);
$count = 1;
while (file_exists($targetDir . DIRECTORY_SEPARATOR . $fileName_a . '_' . $count . $fileName_b))
$count++;
$fileName = $fileName_a . '_' . $count . $fileName_b;
}
// Create target dir
if (!file_exists($targetDir))
@mkdir($targetDir);
// Look for the content type header
if (isset($_SERVER["HTTP_CONTENT_TYPE"]))
$contentType = $_SERVER["HTTP_CONTENT_TYPE"];
if (isset($_SERVER["CONTENT_TYPE"]))
$contentType = $_SERVER["CONTENT_TYPE"];
// Handle non multipart uploads older WebKit versions didn't support multipart in HTML5
if (strpos($contentType, "multipart") !== false) {
if (isset($_FILES['file']['tmp_name']) && is_uploaded_file($_FILES['file']['tmp_name'])) {
// Open temp file
$out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab");
if ($out) {
// Read binary input stream and append it to temp file
$in = fopen($_FILES['file']['tmp_name'], "rb");
if ($in) {
while ($buff = fread($in, 4096))
fwrite($out, $buff);
} else
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
fclose($in);
fclose($out);
@unlink($_FILES['file']['tmp_name']);
} else
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
} else
die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
} else {
// Open temp file
$out = fopen($targetDir . DIRECTORY_SEPARATOR . $fileName, $chunk == 0 ? "wb" : "ab");
if ($out) {
// Read binary input stream and append it to temp file
$in = fopen("php://input", "rb");
if ($in) {
while ($buff = fread($in, 4096))
fwrite($out, $buff);
} else
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
fclose($in);
fclose($out);
} else
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}
$photoName = $_FILES['file']['name'];
$exploded_photoName = explode('.', $photoName);
$user_id = $_SESSION['SESS_MEMBER_ID'];
if(!isset($_SESSION[$photoName])) {
$_SESSION[$photoName] = '1';
}
if($chunk==1){
$movie_file = realpath("/uploads/".$fileName);
// instancia a classe ffmpeg_movie para pegarmos as informações que queremos o vídeo
$movie = new ffmpeg_movie($movie_file);
// pegamos a duranção do video em segundos
$duration = round ( $movie->getDuration() , 0 );
// recebemos o número de frames do vídeo
$totalFrames = $movie->getFrameCount();
// recebemos a altura do vídeo em pixels
$height = $movie->getFrameHeight ();
// recebemos a largura do vídeo em pixels
$width = $movie->getFrameWidth ();
$thumbnailOf = $movie->getFrameRate() * 5;
$thumbnailOf = round ( $movie->getFrameCount() / 2 );
// precisamos criar uma imagem GD para o ffmpeg-php trabalhar nela
$image = imagecreatetruecolor ($width,$height ) ;
// criamos a instancia do frame com a classe ffmpeg_frame
$frame = new ffmpeg_frame ($image);
// escolhemos o frame que queremos salvar como jpeg
$thumbnailOf = rand (1,$movie->getFrameCount());
// recebe o frame
$frame = $movie->getFrame ( $thumbnailOf );
// converte para uma imagem GD
$image = $frame->toGDImage ();
$size = filesize("uploads/".$fileName);
$valuea = rand(0,100);
$valueb = rand(0,100);
$valuec = rand(0,10);
$nome = @md5(date('now') * $valuea - $valueb / $valuec);
$dir = realpath("uploads/snapshots/$nome.jpg");
//salva no HD.
imagejpeg($image, $dir, 100);
$resolu = $width."x".$height;
mysql_query("INSERT INTO video
(poster_id,duration,video,titulo,resolucao,tamanho)
VALUES
('$id_user','$duration','$fileName','$exploded_photoName[0]','$resolu','$size')") or die(mysql_error());
}
// Return JSON-RPC response
die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');
?>I did another method not so effective to do what I want but it only works if I open the page individually.
I removed the code from ffmpeg extension and put an include to that page.
<?
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
if (!extension_loaded ('ffmpeg') ) exit ( 'ffmpeg não foi carregado!' );
include("includes/seguranca.php");
include("includes/classes/class.mysql.php");
include("includes/funcoes/sql_inject.php");
$id_user = @anti_injection($_GET['id']);
class process{
public $videos;
public $target;
public $id_vid;
public function screen(){
$videos = $this->videos;
$target = $this->target;
$movie_file = realpath($videos);
// instancia a classe ffmpeg_movie para pegarmos as informações que queremos o vídeo
$movie = new ffmpeg_movie($movie_file);
$totalFrames = $movie->getFrameCount();
$thumbnailOf = $movie->getFrameRate() * 5;
$thumbnailOf = round ( $movie->getFrameCount() / 2 );
// criamos a instancia do frame com a classe ffmpeg_frame
$frame = new ffmpeg_frame ( $image );
// escolhemos o frame que queremos salvar como jpeg
$thumbnailOf = rand (1,$movie->getFrameCount());
// recebe o frame
$frame = $movie->getFrame ( $thumbnailOf );
// converte para uma imagem GD
$image = $frame->toGDImage ();
$valuea = rand(0,100);
$valueb = rand(0,100);
$valuec = rand(0,10);
$nome = @md5(date('now') * $valuea - $valueb / $valuec);
$dir = $target."snapshots/".$nome.".jpeg";
//salva no HD.
imagejpeg($image,$dir, 100);
$q = new Query;
$q ->update('video')
->set(
array(
'screen'=>$nome.".jpeg"
)
)
->where_equal_to(
array(
'id_video'=>$this->id_vid
)
)
->limit(1)
->run();
}
public function duration(){
$videos = $this->videos;
$movie_file = realpath($videos);
// instancia a classe ffmpeg_movie para pegarmos as informações que queremos o vídeo
$movie = new ffmpeg_movie($movie_file);
// pegamos a duranção do video em segundos
$duration = round ( $movie->getDuration() , 0 );
$q = new Query;
$q ->update('video')
->set(
array(
'duration'=>$duration
)
)
->where_equal_to(
array(
'id_video'=>$this->id_vid
)
)
->limit(1)
->run();
}
public function resolution(){
$videos = $this->videos;
$movie_file = realpath($videos);
// instancia a classe ffmpeg_movie para pegarmos as informações que queremos o vídeo
$movie = new ffmpeg_movie($movie_file);
// recebemos a altura do vídeo em pixels
$height = $movie->getFrameHeight ();
// recebemos a largura do vídeo em pixels
$width = $movie->getFrameWidth ();
$resolucao = $width."x".$height;
$q = new Query;
$q ->update('video')
->set(
array(
'resolucao'=>$resolucao
)
)
->where_equal_to(
array(
'id_video'=>$this->id_vid
)
)
->limit(1)
->run();
}
final public function checar($a){
$q = new Query;
$q ->update('video')
->set(
array(
'process'=>$a
)
)
->where_equal_to(
array(
'id_video'=>$this->id_vid
)
)
->limit(1)
->run();
}
}
$q=new Query;
$q->select(
array(
'id_video',
'video',
'dir',
'screen',
'poster_id',
'resolucao',
'duration'
)
)
->from('video')
->run();
if($q){
$users=$q->get_selected();
foreach($users as $user){
$c = new process;
$c->videos = $user['video'];
$c->target = $user['dir'];
$c->id_vid = $user['id_video'];
if(($user['screen'] == 'NULL') or ($user['duration'] == 'NULL') or ($user['resolucao'] == 'NULL')){
$c->checar(0);
if($user['screen'] == 'NULL'){
$c->screen();
}
if($user['duration'] == 'NULL'){
$c->duration();
}
if($user['resolucao'] == 'NULL'){
$c->resolution();
}
}else{
$c->checar(1);
}
}
}
else{
echo 'Sorry, no users found.';
}
?> -
Create video from images and audio with varying image durations using FFMPEG ?
7 janvier 2018, par Muhammad UmerWhat I want to do :
I’ve x amount of images png/jpg, and I want to show them for varying amount of duration, some longer, and some shorter amount of time.
- a1.jpg 1st photo stays for 3 seconds
- a2.png stays for 10 seconds
- a3.jpg stays till end of audio
Video should be as long as audio.mp3
this is my code so far after reading documentation, not sure what’s wrong, I get corrupt video with no sound and only shows last image.
Also would like to center images if possible.
ffmpeg -y \
-loop 1 -t 1 -i a1.jpg \
-loop 1 -t 1 -i a2.jpg \
-loop 1 -t 4 -i a3.jpg \
-loop 1 -t 1 -i a4.png \
-loop 1 -t 1 -i a5.png \
-i audio.mp3 \
-c:v libx264 -pix_fmt yuv420p -c:a copy video.mp4