
Recherche avancée
Médias (1)
-
GetID3 - Bloc informations de fichiers
9 avril 2013, par
Mis à jour : Mai 2013
Langue : français
Type : Image
Autres articles (58)
-
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Librairies et binaires spécifiques au traitement vidéo et sonore
31 janvier 2010, parLes logiciels et librairies suivantes sont utilisées par SPIPmotion d’une manière ou d’une autre.
Binaires obligatoires FFMpeg : encodeur principal, permet de transcoder presque tous les types de fichiers vidéo et sonores dans les formats lisibles sur Internet. CF ce tutoriel pour son installation ; Oggz-tools : outils d’inspection de fichiers ogg ; Mediainfo : récupération d’informations depuis la plupart des formats vidéos et sonores ;
Binaires complémentaires et facultatifs flvtool2 : (...) -
Utilisation et configuration du script
19 janvier 2011, parInformations spécifiques à la distribution Debian
Si vous utilisez cette distribution, vous devrez activer les dépôts "debian-multimedia" comme expliqué ici :
Depuis la version 0.3.1 du script, le dépôt peut être automatiquement activé à la suite d’une question.
Récupération du script
Le script d’installation peut être récupéré de deux manières différentes.
Via svn en utilisant la commande pour récupérer le code source à jour :
svn co (...)
Sur d’autres sites (9899)
-
Bash script for splitting video using ffmpeg outputs wrong video lengths
19 juin 2018, par jonnyI have a video that’s
x
seconds long. I want to split that video up into equal segments, where each segment is no longer than a minute. To do that, I cobbled together a fairly simple bash script which usesffmprobe
to get the duration of the video, find out how long each segment should be, and then iteratively split the video up usingffmpeg
:INPUT_FILE=$1
INPUT_DURATION="$(./bin/ffprobe.exe -i "$INPUT_FILE" -show_entries format=duration -v quiet -of csv="p=0")"
NUM_SPLITS="$(perl -w -e "use POSIX; print ceil($INPUT_DURATION/60), qq{\n}")"
printf "\nVideo duration: $INPUT_DURATION; "
printf "Number of videos to output: $NUM_SPLITS; "
printf "Approximate length of each video: $(echo "$INPUT_DURATION" "$NUM_SPLITS" | awk '{print ($1 / $2)}')\n\n"
for i in `seq 1 "$NUM_SPLITS"`; do
START="$(echo "$INPUT_DURATION" "$NUM_SPLITS" "$i" | awk '{print (($1 / $2) * ($3 - 1))}')"
END="$(echo "$INPUT_DURATION" "$NUM_SPLITS" "$i" | awk '{print (($1 / $2) * $3)}')"
echo ./bin/ffmpeg.exe -v quiet -y -i "$INPUT_FILE" \
-vcodec copy -acodec copy -ss "$START" -t "$END" -sn test_${i}.mp4
./bin/ffmpeg.exe -v quiet -y -i "$INPUT_FILE" \
-vcodec copy -acodec copy -ss "$START" -t "$END" -sn test_${i}.mp4
done
printf "\ndone\n"If I run that script on the 30MB / 02:50 duration Big Buck Bunny sample from here, the output of the program would suggest the videos should all be of equal length :
λ bash split.bash .\media\SampleVideo_1280x720_30mb.mp4
Video duration: 170.859000; Number of videos to output: 3; Approximate length of each video: 56.953
./bin/ffmpeg.exe -v quiet -y -i .\media\SampleVideo_1280x720_30mb.mp4 -vcodec copy -acodec copy -ss 0 -t 56.953 -sn test_1.mp4
./bin/ffmpeg.exe -v quiet -y -i .\media\SampleVideo_1280x720_30mb.mp4 -vcodec copy -acodec copy -ss 56.953 -t 113.906 -sn test_2.mp4
./bin/ffmpeg.exe -v quiet -y -i .\media\SampleVideo_1280x720_30mb.mp4 -vcodec copy -acodec copy -ss 113.906 -t 170.859 -sn test_3.mp4
doneAs the duration of each partial video, i.e. the time between
-ss
and-t
, are equal for each subsequentffmpeg
command. But the durations I get are closer to :test_1.mp4 = 00:56
test_2.mp4 = 01:53
test_3.mp4 = 00:56Where the contents of each partial video overlap. What am I missing here ?
-
ffmpeg converted video from s3 bucket downloads before playing the video
12 octobre 2020, par RutuI making a video streaming application with react and node js.
I am converting video into different resolution with ffmpeg and storing directly to S3 bucket with the help of piping.


I am streaming uploaded resolution video from S3 bucket directly through cloudfront in HTML5 tag with video.js


When i tried to play original video through cloudfront in player its working fine, But as soon i play ffmpeg converted video to video player in cloudfront i am facing issue :


Video takes a lot load (Downloads in browser) before playing in player.


Below is my ffmpeg command


await loadProcess( [
'i',<s3 url="url" of="of" original="original" video="video">,
 '-movflags',
 'frag_keyframe+empty_moov','-vf', 'scale=-2:360','-c:v','h264','-profile:v','baseline','-r',30,'-g', 60,'-b:v','1M','-f','mp4','-']
, outPath,'video/mp4')

</s3>


this is my loadProcess function : i am using aws cli to direct upload resolution video to S3 bucket :


export function loadProcess(ffmpegOptions, outPath,contentType) {
 return new Promise((resolve, reject) => {
 const videoPath = outPath.replace(/\\/g, "/");
 let ffmpeg = spawn(conf.ffmpeg, ffmpegOptions);
 let awsPipe = spawn('aws', ['s3', 'cp', '--content-type', `${contentType}`, '-', `s3://${process.env.AWS_S3_BUCKET}/${process.env.AWS_S3_VIDEOS_FOLDER}${videoPath}` ])
 ffmpeg.stdout.pipe(awsPipe.stdin)

 // ffmpeg write stream flow
 let ffmpegData = ''
 ffmpeg.stderr.on('data', (_data) => {
 ffmpegData += _data.toString();
 })
 ffmpeg.on('close', (code) => {
 if (code === 0) {
 resolve(outPath)
 }
 else {
 let _dataSplit=ffmpegData.split('\n');
 _dataSplit.pop();
 console.log({action: 'close', message:_dataSplit.pop(), more:[conf.ffmpeg].concat(ffmpegOptions).join(' ')+'\n'+ffmpegData, code})
 }
 });
 ffmpeg.on('error', (err) => {
 reject({action: ' ffmpeg error', message: err});
 });
 
 // aws s3 cli read stream pipe flow
 let awsPipeData = ''
 awsPipe.stderr.on('data', _data => {
 awsPipeData += _data.toString()
 });
 awsPipe.on('close', (code) => {
 if (code === 0) {
 resolve(outPath)
 }else{
 console.log({action: 'close', message: awsPipeData})
 }
 });
 awsPipe.on('error', (err) => {
 reject({action: 'awsPipe error', message: err});
 })

 })
}



I have tried using +faststart option in ffmpeg but getting command failed error.
Can someone please help me this ?


Thanks in advance


-
How to speed up video and its timestamp to shorten video length, but represent time as it was recorded ?
7 janvier 2021, par Gonzalo AspeeI have a video recorded at 5 fps that I want to speed up to 30 fps to shorten it. That is simple enough as :


ffmpeg -i input.mp4 -r 30 -vf "setpts=0.16666*PTS" output.mp4



But when I try to add a timestamp to it with :


ffmpeg -i input.mp4 -r 30 -vf "setpts=0.16666*PTS, drawtext=text='%{pts\:localtime\:1610043985\:%Y\-%m\-%d %H\\\\\:%M\\\\\:%S.}%{eif\:mod(n,30)\:d}'" output.mp4



The timestamp does not longer represents the time as it was recorded (it should run faster now)


How to achieve this ?