
Recherche avancée
Médias (39)
-
Stereo master soundtrack
17 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Audio
-
ED-ME-5 1-DVD
11 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Audio
-
1,000,000
27 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Demon Seed
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
The Four of Us are Dying
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Corona Radiata
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
Autres articles (30)
-
Les formats acceptés
28 janvier 2010, parLes commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
ffmpeg -codecs ffmpeg -formats
Les format videos acceptés en entrée
Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
Les formats vidéos de sortie possibles
Dans un premier temps on (...) -
Ajouter notes et légendes aux images
7 février 2011, parPour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
Modification lors de l’ajout d’un média
Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...) -
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 (4372)
-
how to stream h.264 video with mp3 audio using libavcodec ?
29 août 2020, par dasgI read h.264 frames from webcamera and capture audio from microphone. I need to stream live video to ffserver. During debug I read video from ffserver using ffmpeg with following command :



ffmpeg -i http://127.0.0.1:12345/robot.avi -vcodec copy -acodec copy out.avi




My video in output file is slightly accelerated. If I add a audio stream it is accelerated several times. Sometimes there is no audio in the output file.



Here is my code for encoding audio :



#include "v_audio_encoder.h"

extern "C" {
#include <libavcodec></libavcodec>avcodec.h>
}
#include <cassert>

struct VAudioEncoder::Private
{
 AVCodec *m_codec;
 AVCodecContext *m_context;

 std::vector m_outBuffer;
};

VAudioEncoder::VAudioEncoder( int sampleRate, int bitRate )
{
 d = new Private( );
 d->m_codec = avcodec_find_encoder( CODEC_ID_MP3 );
 assert( d->m_codec );
 d->m_context = avcodec_alloc_context3( d->m_codec );

 // put sample parameters
 d->m_context->channels = 2;
 d->m_context->bit_rate = bitRate;
 d->m_context->sample_rate = sampleRate;
 d->m_context->sample_fmt = AV_SAMPLE_FMT_S16;
 strcpy( d->m_context->codec_name, "libmp3lame" );

 // open it
 int res = avcodec_open2( d->m_context, d->m_codec, 0 );
 assert( res >= 0 );

 d->m_outBuffer.resize( d->m_context->frame_size );
}

VAudioEncoder::~VAudioEncoder( )
{
 avcodec_close( d->m_context );
 av_free( d->m_context );
 delete d;
}

void VAudioEncoder::encode( const std::vector& samples, std::vector& outbuf )
{
 assert( (int)samples.size( ) == d->m_context->frame_size );

 int outSize = avcodec_encode_audio( d->m_context, d->m_outBuffer.data( ),
 d->m_outBuffer.size( ), reinterpret_cast<const>( samples.data( ) ) );
 if( outSize ) {
 outbuf.resize( outSize );
 memcpy( outbuf.data( ), d->m_outBuffer.data( ), outSize );
 }
 else
 outbuf.clear( );
}

int VAudioEncoder::getFrameSize( ) const
{
 return d->m_context->frame_size;
}
</const></cassert>



Here is my code for streaming video :



#include "v_out_video_stream.h"

extern "C" {
#include <libavformat></libavformat>avformat.h>
#include <libavutil></libavutil>opt.h>
#include <libavutil></libavutil>avstring.h>
#include <libavformat></libavformat>avio.h>
}

#include <stdexcept>
#include <cassert>

struct VStatticRegistrar
{
 VStatticRegistrar( )
 {
 av_register_all( );
 avformat_network_init( );
 }
};

VStatticRegistrar __registrar;

struct VOutVideoStream::Private
{
 AVFormatContext * m_context;
 int m_videoStreamIndex;
 int m_audioStreamIndex;

 int m_videoBitrate;
 int m_width;
 int m_height;
 int m_fps;
 int m_bitrate;

 bool m_waitKeyFrame;
};

VOutVideoStream::VOutVideoStream( int width, int height, int fps, int bitrate )
{
 d = new Private( );
 d->m_width = width;
 d->m_height = height;
 d->m_fps = fps;
 d->m_context = 0;
 d->m_videoStreamIndex = -1;
 d->m_audioStreamIndex = -1;
 d->m_bitrate = bitrate;
 d->m_waitKeyFrame = true;
}

bool VOutVideoStream::connectToServer( const std::string& uri )
{
 assert( ! d->m_context );

 // initalize the AV context
 d->m_context = avformat_alloc_context();
 if( !d->m_context )
 return false;
 // get the output format
 d->m_context->oformat = av_guess_format( "ffm", NULL, NULL );
 if( ! d->m_context->oformat )
 return false;

 strcpy( d->m_context->filename, uri.c_str( ) );

 // add an H.264 stream
 AVStream *stream = avformat_new_stream( d->m_context, NULL );
 if ( ! stream )
 return false;
 // initalize codec
 AVCodecContext* codec = stream->codec;
 if( d->m_context->oformat->flags & AVFMT_GLOBALHEADER )
 codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
 codec->codec_id = CODEC_ID_H264;
 codec->codec_type = AVMEDIA_TYPE_VIDEO;
 strcpy( codec->codec_name, "libx264" );
// codec->codec_tag = ( unsigned('4') << 24 ) + (unsigned('6') << 16 ) + ( unsigned('2') << 8 ) + 'H';
 codec->width = d->m_width;
 codec->height = d->m_height;
 codec->time_base.den = d->m_fps;
 codec->time_base.num = 1;
 codec->bit_rate = d->m_bitrate;
 d->m_videoStreamIndex = stream->index;

 // add an MP3 stream
 stream = avformat_new_stream( d->m_context, NULL );
 if ( ! stream )
 return false;
 // initalize codec
 codec = stream->codec;
 if( d->m_context->oformat->flags & AVFMT_GLOBALHEADER )
 codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
 codec->codec_id = CODEC_ID_MP3;
 codec->codec_type = AVMEDIA_TYPE_AUDIO;
 strcpy( codec->codec_name, "libmp3lame" );
 codec->sample_fmt = AV_SAMPLE_FMT_S16;
 codec->channels = 2;
 codec->bit_rate = 64000;
 codec->sample_rate = 44100;
 d->m_audioStreamIndex = stream->index;

 // try to open the stream
 if( avio_open( &d->m_context->pb, d->m_context->filename, AVIO_FLAG_WRITE ) < 0 )
 return false;

 // write the header
 return avformat_write_header( d->m_context, NULL ) == 0;
}

void VOutVideoStream::disconnect( )
{
 assert( d->m_context );

 avio_close( d->m_context->pb );
 avformat_free_context( d->m_context );
 d->m_context = 0;
}

VOutVideoStream::~VOutVideoStream( )
{
 if( d->m_context )
 disconnect( );
 delete d;
}

int VOutVideoStream::getVopType( const std::vector& image )
{
 if( image.size( ) < 6 )
 return -1;
 unsigned char *b = (unsigned char*)image.data( );

 // Verify NAL marker
 if( b[ 0 ] || b[ 1 ] || 0x01 != b[ 2 ] ) {
 ++b;
 if ( b[ 0 ] || b[ 1 ] || 0x01 != b[ 2 ] )
 return -1;
 }

 b += 3;

 // Verify VOP id
 if( 0xb6 == *b ) {
 ++b;
 return ( *b & 0xc0 ) >> 6;
 }

 switch( *b ) {
 case 0x65: return 0;
 case 0x61: return 1;
 case 0x01: return 2;
 }

 return -1;
}

bool VOutVideoStream::sendVideoFrame( std::vector& image )
{
 // Init packet
 AVPacket pkt;
 av_init_packet( &pkt );
 pkt.flags |= ( 0 >= getVopType( image ) ) ? AV_PKT_FLAG_KEY : 0;

 // Wait for key frame
 if ( d->m_waitKeyFrame ) {
 if( pkt.flags & AV_PKT_FLAG_KEY )
 d->m_waitKeyFrame = false;
 else
 return true;
 }

 pkt.stream_index = d->m_videoStreamIndex;
 pkt.data = image.data( );
 pkt.size = image.size( );
 pkt.pts = pkt.dts = AV_NOPTS_VALUE;

 return av_write_frame( d->m_context, &pkt ) >= 0;
}

bool VOutVideoStream::sendAudioFrame( std::vector& audio )
{
 // Init packet
 AVPacket pkt;
 av_init_packet( &pkt );
 pkt.stream_index = d->m_audioStreamIndex;
 pkt.data = audio.data( );
 pkt.size = audio.size( );
 pkt.pts = pkt.dts = AV_NOPTS_VALUE;

 return av_write_frame( d->m_context, &pkt ) >= 0;
}
</cassert></stdexcept>



Here is how I use it :



BOOST_AUTO_TEST_CASE(testSendingVideo)
{
 const int framesToGrab = 90000;

 VOutVideoStream stream( VIDEO_WIDTH, VIDEO_HEIGHT, FPS, VIDEO_BITRATE );
 if( stream.connectToServer( URI ) ) {
 VAudioEncoder audioEncoder( AUDIO_SAMPLE_RATE, AUDIO_BIT_RATE );
 VAudioCapture microphone( MICROPHONE_NAME, AUDIO_SAMPLE_RATE, audioEncoder.getFrameSize( ) );

 VLogitecCamera camera( VIDEO_WIDTH, VIDEO_HEIGHT );
 BOOST_REQUIRE( camera.open( CAMERA_PORT ) );
 BOOST_REQUIRE( camera.startCapturing( ) );

 std::vector image, encodedAudio;
 std::vector voice;
 boost::system_time startTime;
 int delta;
 for( int i = 0; i < framesToGrab; ++i ) {
 startTime = boost::posix_time::microsec_clock::universal_time( );

 BOOST_REQUIRE( camera.read( image ) );
 BOOST_REQUIRE( microphone.read( voice ) );
 audioEncoder.encode( voice, encodedAudio );

 BOOST_REQUIRE( stream.sendVideoFrame( image ) );
 BOOST_REQUIRE( stream.sendAudioFrame( encodedAudio ) );

 delta = ( boost::posix_time::microsec_clock::universal_time( ) - startTime ).total_milliseconds( );
 if( delta < 1000 / FPS )
 boost::thread::sleep( startTime + boost::posix_time::milliseconds( 1000 / FPS - delta ) );
 }

 BOOST_REQUIRE( camera.stopCapturing( ) );
 BOOST_REQUIRE( camera.close( ) );
 }
 else
 std::cout << "failed to connect to server" << std::endl;
}




I think my problem is in PTS and DTS. Can anyone help me ?


-
Blog series part 1 : How to use Matomo to increase customer acquisitions for your business
2 septembre 2020, par Joselyn Khor — Analytics Tips, Marketing -
Song name under video
2 septembre 2020, par ottpeterI'm trying to write the song name under the video with ffmpeg. My mp3 files are running in a loop like this :

-stream_loop -1 -i music.txt

My workaround would be to write an SRT file with timecodes, a script would determine when next song is comming, and I would repeat this, let's say, a 1000 times (time codes adjusted), then I would get song names for a month for example. (this would be done before ffmpeg is started)
Obviously this is not optimal, especially because I can't loop the SRT file as well, because of the timecode. It would be better to do this with a filter complex.

Is there a way to know the name of the mp3 that is currently playing, in ffmpeg ?