
Recherche avancée
Médias (1)
-
The pirate bay depuis la Belgique
1er avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
Autres articles (98)
-
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 (...) -
Multilang : améliorer l’interface pour les blocs multilingues
18 février 2011, parMultilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela. -
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...)
Sur d’autres sites (11414)
-
Merging videos. multiple overlays and audio in one step
3 février 2019, par user14567I have a process that I run hourly to update a 60 sec weather video.
I combine a background video with a generated m4a audio track, scrolling text and separate top and bottom overlays.
I need all of this in an mp4 and in a TLS (m3u8) format.
Right now I do this 3 ffmpeg consecutive sessions and end up with a rendered 720p mp4.
Then I run a 4th ffpmeg session to convert the the mp4 to a TLS version (I need both mp4 and m3u8.)
I am doing this in 4 ffmpeg runs because I haven’t figured out how to combine the filters and do it in less.
When I try an combine this, I lose either the overlays or the text. I can’t get it all to come out in one session. I’ve tried comma separating within the filters but I haven’t found the right combination.
Any assistance in showing me how to combine this work and reduce the number of runs would be greatly appreciated.
This runs on a Centos 7 box with ffmpeg version 3.4.1.
#
# Step 1: Combine background video with audio and scrolling text
#
ffmpeg -i /video/weather/media/sunnybeach.mp4 \
-i /video/weather/prod/currentweather.m4a \
-i /video/weather/media/weather-lower-third1.png \
-map 2:v:0 -map 1:a:0 -strict -2 \
-filter_complex "[0]split[txt][orig];[txt]drawtext=fontfile=/var/www/vhosts/30a.tv/httpdocs/openx/lib/pear/Image/Canvas/Fonts/arial.ttf:fontsize=80:fontcolor=white:x=(w-text_w)/2+20:y=h-70*t:textfile=/video/weather/prod/currentweather.txt:bordercolor=black:borderw=2[txt];[orig]crop=iw:50:0:0[orig];[txt][orig]overlay” \
-t 60 -c:v libx264 -y -s hd720 -loglevel quiet /video/weather/prod/currentweather.mp4 2>&1 >> /dev/null
if [ $? != 0 ]; then echo fail step 1; exit 1;fi
#
# Step 2: now overlay current lowerthird
#
ffmpeg -i /video/weather/prod/currentweather.mp4 \
-i /video/weather/media/weather-lower-third1.png \
-strict -2 -filter_complex "[0:v][1:v]overlay" -c:a copy -y \
-loglevel quiet $FKWI/currentweather1.mp4 2>&1 >> /dev/null
if [ $? != 0 ]; then echo fail step 2; exit 1;fi
#
# Step 3: now overlay current topbanner
#
ffmpeg -i $FKWI/currentweather1.mp4 \
-i /video/weather/media/weather-top-banner.png \
-strict -2 -filter_complex "[0:v][1:v]overlay" -c:a copy -y \
-loglevel quiet $FKWI/currentweather.mp4 2>&1 >> /dev/null
if [ $? != 0 ]; then echo fail step 3; exit 1;fi
#
# Step 4: Now make TLS version
#
cd $FKWI/httpdocs/weather
RES1=`/usr/bin/ffmpeg -i $FKWI/httpdocs/currentweather.mp4 \
-profile:v baseline -level 3.0 -s 1280x720 \
-c:a aac -ar 48000 -g 60 -start_number 0 \
-hls_time 6 -hls_list_size 0 -f hls \
-hls_base_url "http://$URL.com/weather/" \
-hls_segment_filename "video%04d.ts" \
-strict -2 -loglevel quiet "currentweather.m3u8" 2>&1>>/dev/null `
if [ $? != 0 ]; then echo fail step 4; exit 1;fiThis code yields both videos fine, but it takes 4 runs and I need it to happen in less runs.
-
FFmpeg C++ decoding in a separate thread
12 juin 2019, par BrigapesI’m trying to decode a video with FFmpeg and convert it to an openGL texture and display it inside a cocos2dx engine. I’ve managed to do that and it displays the video as i wanted to, now the problem is performance wise. I get a Sprite update every frame(game is fixed 60fps, video is 30fps) so what i did was i decoded and converted frame interchangeably, didn’t work great, now i have it set up to have a separate thread where i decode in an infinite
while
loop withsleep()
just so it doesn’t hog the cpu/program.
What i currently have set up is 2 pbo framebuffers and abool
flag to tell my ffmpeg thread loop to decode another frame since i don’t know how to manually wait when to decode another frame. I’ve searched online for a soultion to this kind of problem but didn’t manage to get any answers.I’ve looked at this : Decoding video directly into a texture in separate thread but it didn’t solve my problem since it was just converting YUV to RGB inside opengl shaders which i haven’t done yet but currently not an issue.
Additional info that might be useful is that i don’t need to end thread until application exit and i’m open to using any video format, including lossless.
Ok so main decoding loop looks like this :
//.. this is inside of a constructor / init
//adding thread to array in order to save the thread
global::global_pending_futures.push_back(std::async(std::launch::async, [=] {
while (true) {
if (isPlaying) {
this->decodeLoop();
}
else {
std::this_thread::sleep_for(std::chrono::milliseconds(3));
}
}
}));Reason why i use bool to check if frame was used is because main decoding function takes about 5ms to finish in debug and then should wait about 11 ms for it to display the frame, so i can’t know when the frame was displayed and i also don’t know how long did decoding take.
Decode function :
void video::decodeLoop() { //this should loop in a separate thread
frameData* buff = nullptr;
if (buf1.needsRefill) {
/// buf1.bufferLock.lock();
buff = &buf1;
buf1.needsRefill = false;
firstBuff = true;
}
else if (buf2.needsRefill) {
///buf2.bufferLock.lock();
buff = &buf2;
buf2.needsRefill = false;
firstBuff = false;
}
if (buff == nullptr) {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
return;//error? //wait?
}
//pack pixel buffer?
if (getNextFrame(buff)) {
getCurrentRBGConvertedFrame(buff);
}
else {
loopedTimes++;
if (loopedTimes >= repeatTimes) {
stop();
}
else {
restartVideoPlay(&buf1);//restart both
restartVideoPlay(&buf2);
if (getNextFrame(buff)) {
getCurrentRBGConvertedFrame(buff);
}
}
}
/// buff->bufferLock.unlock();
return;
}As you can tell i first check if buffer was used using bool needsRefill and then decode another frame.
frameData struct :
struct frameData {
frameData() {};
~frameData() {};
AVFrame* frame;
AVPacket* pkt;
unsigned char* pdata;
bool needsRefill = true;
std::string name = "";
std::mutex bufferLock;
///unsigned int crrFrame
GLuint pboid = 0;
};And this is called every frame :
void video::actualDraw() { //meant for cocos implementation
if (this->isVisible()) {
if (this->getOpacity() > 0) {
if (isPlaying) {
if (loopedTimes >= repeatTimes) { //ignore -1 because comparing unsgined to signed
this->stop();
}
}
if (isPlaying) {
this->setVisible(true);
if (!display) { //skip frame
///this->getNextFrame();
display = true;
}
else if (display) {
display = false;
auto buff = this->getData();
width = this->getWidth();
height = this->getHeight();
if (buff) {
if (buff->pdata) {
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buff->pboid);
glBufferData(GL_PIXEL_UNPACK_BUFFER, 3 * (width*height), buff->pdata, GL_DYNAMIC_DRAW);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, 0);///buff->pdata); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
}
buff->needsRefill = true;
}
}
}
else { this->setVisible(false); }
}
}
}getData func to tell which frambuffer it uses
video::frameData* video::getData() {
if (firstBuff) {
if (buf1.needsRefill == false) {
///firstBuff = false;
return &buf1;///.pdata;
}
}
else { //if false
if (buf2.needsRefill == false) {
///firstBuff = true;
return &buf2;///.pdata;
}
}
return nullptr;
}I’m not sure what else to include i pasted whole code to pastebin.
video.cpp : https://pastebin.com/cWGT6APn
video.h https://pastebin.com/DswAXwXVTo summarize the problem :
How do i properly implement decoding in a separate thread / how do i optimize current code ?
Currently video is lagging when some other thread or main thread gets heavy and then it does not decode fast enough.
-
ffmpeg - using bash variable for multiple inputs. Problem with spaces in filenames [duplicate]
30 août 2019, par drake7This question already has an answer here :
I want to concatenate files with different codecs. My code only works for filenames without spaces.
I have a fair amount of experience with using ffmpeg with bash.
However everything I’ve tried to solve the problem did’t work :Let’s say my videos are "01 video.mov" and "02 video.mp4".
not quoting $i : (This is the current status quo of my script.)
ffmpegInput="$ffmpegInput -i ${i}"
results in :
01: No such file or directory
quoting $i :
ffmpegInput="$ffmpegInput -i \"${i}\""
results in :
"01: No such file or directory
This code only works for filenames without spaces :
ffmpegInput=""
for i in *
do
ffmpegInput="$ffmpegInput -i ${i}"
ffmpeg ${ffmpegInput} -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" ../output.mkv
doneI did’t expect to encounter problems with quoting.
But the fact that I store all inputs in a variable or an array makes it difficult.
Althought the variable stores the string :
-i "01 video.mov" -i "02 video.mp4"
ffmpeg doesn’t seem to see the first " as a valid quote.
Since ffmpeg throws the error"01: No such file or directory
it seems as if the " is actually there.