
Recherche avancée
Médias (3)
-
Valkaama DVD Cover Outside
4 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
-
Valkaama DVD Cover Inside
4 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Image
Autres articles (95)
-
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 (9380)
-
Converting series of images with ffmpeg results in black video [migrated]
27 avril 2013, par Marco GagliardiI've just downloaded ffmpeg since it seems to perfectly match my needs (make a video from a set of pictures). I'm currently playing around with some examples just to get started and there's something weird happening that I can't explain.
I'm trying this command (provided in the official documentation) :ffmpeg -f image2 -pattern_type glob -i 'foo-*.jpeg' -r 12 -s WxH foo.avi
on a data set of 10 jpg pictures (of course I changed the pattern with '*.jpg'). The video seems to be encoded correctly but it's simply too fast to be sure about that (anyway it stops on the last frame that corresponds to the last picture). In order to get a longer video i thought to low the frame rate from 12 to 1 (one sec each picture) or 0.5 (2 sec each one) and so on.. no way ! with low rate values even if the video is played the pictures are simply not displayed. The player (VLC in my case) just shows a blank/empty video for a few seconds.
Am I making something wrong or have I misunderstood the -r parameter ? Is it something related to codecs involved ? Finally.. How can i get each picture displayed for 1 or 2 seconds ?
Here's the output :
MacBook-Pro$ ffmpeg -f image2 -pattern_type glob -i '*.jpg' -r 1 -s 200x300 foo.avi
ffmpeg version N-52517-g1e4f75d Copyright (c) 2000-2013 the FFmpeg developers
built on Apr 27 2013 19:41:11 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
configuration: --disable-yasm
libavutil 52. 27.101 / 52. 27.101
libavcodec 55. 6.100 / 55. 6.100
libavformat 55. 3.100 / 55. 3.100
libavdevice 55. 0.100 / 55. 0.100
libavfilter 3. 61.100 / 3. 61.100
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
Input #0, image2, from '*.jpg':
Duration: 00:00:00.40, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj422p, 2560x1920 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc
File 'foo.avi' already exists. Overwrite ? [y/N] y
Output #0, avi, to 'foo.avi':
Metadata:
ISFT : Lavf55.3.100
Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 200x300 [SAR 2:1 DAR 4:3], q=2-31, 200 kb/s, 1 tbn, 1 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> mpeg4)
Press [q] to stop, [?] for help
frame= 2 fps=0.0 q=2.0 Lsize= 43kB time=00:00:02.00 bitrate= 177.1kbits/s dup=0 drop=8
video:38kB audio:0kB subtitle:0 global headers:0kB muxing overhead 15.099197%
MacBook-Pro$ -
Rendering YUV420P ffmpeg decoded images on QT with OpenGL, only see black screen
17 février 2019, par Lucas ZanellaI’ve found this QT OpenGL Widget which should render a 420PYUV image on screen. I’m feeding a ffmpeg decoded buffer into its
paintGL()
function but I see nothing. Neither noises or correct images, only a black screen. I’m trying to understand why.I want to exclude the possibilities of other things being wrong, but I need to be sure first that my code will produce anything. I
std::cout
ed some bytes from the ffmpeg just to see if they were arriving and they were. So I should see at least some noise.Can you see anything wrong with my code that wouldn’t make it able to render images on screen ?
This is the widget that should output the image :
#include "XVideoWidget.h"
#include <qdebug>
#include <qtimer>
#include <iostream>
//自动加双引号
#define GET_STR(x) #x
#define A_VER 3
#define T_VER 4
//顶点shader
const char *vString = GET_STR(
attribute vec4 vertexIn;
attribute vec2 textureIn;
varying vec2 textureOut;
void main(void)
{
gl_Position = vertexIn;
textureOut = textureIn;
}
);
//片元shader
const char *tString = GET_STR(
varying vec2 textureOut;
uniform sampler2D tex_y;
uniform sampler2D tex_u;
uniform sampler2D tex_v;
void main(void)
{
vec3 yuv;
vec3 rgb;
yuv.x = texture2D(tex_y, textureOut).r;
yuv.y = texture2D(tex_u, textureOut).r - 0.5;
yuv.z = texture2D(tex_v, textureOut).r - 0.5;
rgb = mat3(1.0, 1.0, 1.0,
0.0, -0.39465, 2.03211,
1.13983, -0.58060, 0.0) * yuv;
gl_FragColor = vec4(rgb, 1.0);
}
);
//准备yuv数据
// ffmpeg -i v1080.mp4 -t 10 -s 240x128 -pix_fmt yuv420p out240x128.yuv
XVideoWidget::XVideoWidget(QWidget * parent)
{
// setWindowFlags (Qt::WindowFullscreenButtonHint);
// showFullScreen();
}
XVideoWidget::~XVideoWidget()
{
}
//初始化opengl
void XVideoWidget::initializeGL()
{
//qDebug() << "initializeGL";
std::cout << "initializing gl" << std::endl;
//初始化opengl (QOpenGLFunctions继承)函数
initializeOpenGLFunctions();
this->m_F = QOpenGLContext::currentContext()->functions();
//program加载shader(顶点和片元)脚本
//片元(像素)
std::cout << program.addShaderFromSourceCode(QOpenGLShader::Fragment, tString) << std::endl;
//顶点shader
std::cout << program.addShaderFromSourceCode(QOpenGLShader::Vertex, vString) << std::endl;
//设置顶点坐标的变量
program.bindAttributeLocation("vertexIn",A_VER);
//设置材质坐标
program.bindAttributeLocation("textureIn",T_VER);
//编译shader
std::cout << "program.link() = " << program.link() << std::endl;
std::cout << "program.bind() = " << program.bind() << std::endl;
//传递顶点和材质坐标
//顶点
static const GLfloat ver[] = {
-1.0f,-1.0f,
1.0f,-1.0f,
-1.0f, 1.0f,
1.0f,1.0f
};
//材质
static const GLfloat tex[] = {
0.0f, 1.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f
};
//顶点
glVertexAttribPointer(A_VER, 2, GL_FLOAT, 0, 0, ver);
glEnableVertexAttribArray(A_VER);
//材质
glVertexAttribPointer(T_VER, 2, GL_FLOAT, 0, 0, tex);
glEnableVertexAttribArray(T_VER);
//glUseProgram(&program);
//从shader获取材质
unis[0] = program.uniformLocation("tex_y");
unis[1] = program.uniformLocation("tex_u");
unis[2] = program.uniformLocation("tex_v");
//创建材质
glGenTextures(3, texs);
//Y
glBindTexture(GL_TEXTURE_2D, texs[0]);
//放大过滤,线性插值 GL_NEAREST(效率高,但马赛克严重)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//创建材质显卡空间
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, 0);
//U
glBindTexture(GL_TEXTURE_2D, texs[1]);
//放大过滤,线性插值
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//创建材质显卡空间
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width/2, height / 2, 0, GL_RED, GL_UNSIGNED_BYTE, 0);
//V
glBindTexture(GL_TEXTURE_2D, texs[2]);
//放大过滤,线性插值
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
//创建材质显卡空间
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width / 2, height / 2, 0, GL_RED, GL_UNSIGNED_BYTE, 0);
///分配材质内存空间
datas[0] = new unsigned char[width*height]; //Y
datas[1] = new unsigned char[width*height/4]; //U
datas[2] = new unsigned char[width*height/4]; //V
}
//刷新显示
void XVideoWidget::paintGL(unsigned char**data)
//void QFFmpegGLWidget::updateData(unsigned char**data)
{
std::cout << "painting!" << std::endl;
memcpy(datas[0], data[0], width*height);
memcpy(datas[1], data[1], width*height/4);
memcpy(datas[2], data[2], width*height/4);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texs[0]); //0层绑定到Y材质
//修改材质内容(复制内存内容)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RED, GL_UNSIGNED_BYTE, datas[0]);
//与shader uni遍历关联
glUniform1i(unis[0], 0);
glActiveTexture(GL_TEXTURE0+1);
glBindTexture(GL_TEXTURE_2D, texs[1]); //1层绑定到U材质
//修改材质内容(复制内存内容)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width/2, height / 2, GL_RED, GL_UNSIGNED_BYTE, datas[1]);
//与shader uni遍历关联
glUniform1i(unis[1],1);
glActiveTexture(GL_TEXTURE0+2);
glBindTexture(GL_TEXTURE_2D, texs[2]); //2层绑定到V材质
//修改材质内容(复制内存内容)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width / 2, height / 2, GL_RED, GL_UNSIGNED_BYTE, datas[2]);
//与shader uni遍历关联
glUniform1i(unis[2], 2);
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
qDebug() << "paintGL";
}
// 窗口尺寸变化
void XVideoWidget::resizeGL(int width, int height)
{
m_F->glViewport(0, 0, width, height);
qDebug() << "resizeGL "<code></iostream></qtimer></qdebug>Here’s a bit of code from my MainWindow :
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent)
{
FfmpegDecoder* ffmpegDecoder = new FfmpegDecoder();
if(!ffmpegDecoder->Init()) {
std::cout << "problem with ffmpeg decoder init" << std::endl;
} else {
std::cout << "fmmpeg decoder initiated" << std::endl;
}
XVideoWidget * xVideoWidget = new XVideoWidget(parent);
ffmpegDecoder->setOpenGLWidget(xVideoWidget);
mediaStream = new MediaStream(uri, ffmpegDecoder, videoConsumer);//= new MediaStream(uri, ffmpegDecoder, videoConsumer);
//...
}
void MainWindow::run()
{
mediaStream->receiveFrame();
}My main.cpp makes sure my window
run()
method runs in the background.MainWindow w;
w.setFixedSize(1280,720);
w.show();
boost::thread mediaThread(&MainWindow::run, &w);
std::cout << "mediaThread running" << std::endl;If someone wants to view the entire code, please feel free to visit the commit I just did : https://github.com/lucaszanella/orwell/tree/bbd74e42bd42df685bacc5d51cacbee3a178689f
-
Video Overlay not returning to black once video stopped
24 septembre 2020, par Matt NelsonI am combining multiple videos from a webrtc call and aligning the "user-terminal" videos to the left, and the "user-visitor" videos to the right. As the visitor feed can start and strop, they have multiple videos so I'm offsetting them by the timestamp.


This is working, however crazy it looks !


The one last issue I have is that when the first visitor video stop on the right, it shows the last frame of that video until the next video starts on the left. Can I have it return o the black background ?


Here is the command passed to ffmpeg :


ffmpeg -y 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-terminal-1600953586531366-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-visitor-1600953592694430-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-visitor-1600953609873223-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-visitor-1600953628668227-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-visitor-1600953663905342-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-MasterTerminal-52350116-1600953681107272-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-visitor-1600953697832165-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-MasterTerminal-52350116-1600953723320364-audio.mjr.opus 
-i /recordings/process/5f6c9c3/videoroom-5f6c9c3-user-visitor-1600953725307043-audio.mjr.opus 
-filter_complex [1:a]adelay=6163|6163[1adelay];[2:a]adelay=23341|23341[2adelay];[3:a]adelay=42136|42136[3adelay];[4:a]adelay=77373|77373[4adelay];[5:a]adelay=94575|94575[5adelay];[6:a]adelay=111300|111300[6adelay];[7:a]adelay=136788|136788[7adelay];[8:a]adelay=138775|138775[8adelay];[0:a][1adelay][2adelay][3adelay][4adelay][5adelay][6adelay][7adelay][8adelay]amix=inputs=9:duration=longest[a] 
-map [a] -ac -2 /recordings/process/5f6c9c3/5f6c9c3.mp3