
Recherche avancée
Autres articles (111)
-
La sauvegarde automatique de canaux SPIP
1er avril 2010, parDans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...) -
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 (...) -
Encodage et transformation en formats lisibles sur Internet
10 avril 2011MediaSPIP transforme et ré-encode les documents mis en ligne afin de les rendre lisibles sur Internet et automatiquement utilisables sans intervention du créateur de contenu.
Les vidéos sont automatiquement encodées dans les formats supportés par HTML5 : MP4, Ogv et WebM. La version "MP4" est également utilisée pour le lecteur flash de secours nécessaire aux anciens navigateurs.
Les documents audios sont également ré-encodés dans les deux formats utilisables par HTML5 :MP3 et Ogg. La version "MP3" (...)
Sur d’autres sites (5991)
-
C# - Discord.Net - Trying to read audio from soundcloud and transmit it to discord
28 mars 2022, par Bruno BragaI am currently working on a discord bot that is able to play a song using soundcloud.
Unfortunately, I can't seem to figure out how to get it to read from the url and stream it !
The bot it made in C#, and uses Discord.net library and ffmpeg for the audio.
Would love to hear some suggestions !


These are the three functions involved :


[Command("teste", RunMode = RunMode.Async)]
public async Task Play(IVoiceChannel channel = null)
{
 var audioClient = await JoinChannel(channel);
 var url = "https://soundcloud.com/campatechlive/campatech-live-feat- 
 matheus-moussa-arabian-system-vol-2-psy-trance-150-original-mix";

 var ffmpeg = new Ffmpeg(audioClient);
 await ffmpeg.SendAsync(url);
}

public async Task SendAsync(string path)
{
 using (var ffmpeg = CreateStream(path))
 using (var output = ffmpeg.StandardOutput.BaseStream)
 using (var discord = _client.CreatePCMStream(AudioApplication.Mixed))
 {
 try { await output.CopyToAsync(discord); }
 finally { await discord.FlushAsync(); }
 }
}

private Process? CreateStream(string path)
{
 return Process.Start(new ProcessStartInfo
 {
 FileName = "ffmpeg",
 Arguments = $"-hide_banner -loglevel panic -i \"{path}\" -ac 2 -f 
 s16le -ar 48000 pipe:1",
 UseShellExecute = false,
 RedirectStandardOutput = true,
 });
}



I'm guessing it's something on the ffmpeg arguments, but can't kind of figure out what.


I've tried a bunch of different arguments on ffmpeg, but none of them worked.
Anyone can lend me a hand ?


-
Unknown issue with Discord.js and ytdl, completely skips playing audio
21 novembre 2017, par Gman0064One of the commands I have for my Discord bot is to play a predefined music clip in the current user’s voice channel. The bot can connect, but rather than playing the song, it instantaneously leaves. I’ve tried using both
connection.playStream
as well asconnection.playFile
, and both seem to return the same (lack of) output. Am I missing some sort of dependency or is my code just written incorrectly ? Any help would be greatly appreciated !const Discord = require('discord.js');
const ytdl = require('ytdl-core');
const client = new Discord.Client();
const streamOptions = { seek: 0, volume: 1};
client.on('ready', () => {
console.log('Login Success');
});
client.on('message', message => {
if (message.content === '$vaporwave') {
if (!message.guild) return;
if(message.member.voiceChannel) {
message.member.voiceChannel.join().then(connection => {
console.log("joined channel");
//const stream = ytdl('https://www.youtube.com/watch?v=cU8HrO7XuiE', { filter : 'audioonly' });
const dispatcher = connection.playFile('./mcp420.mp3');
//const dispatcher = connection.playStream(stream, streamOptions);
dispatcher.on("end", end => {
console.log("left channel");
message.member.voiceChannel.leave();
});
}).catch(err => console.log(err));
}
}
});- NPM v4.6.1
- Node.js v8.9.1
- FFMPEG v3.2.8-1
-
How can I dynamically update metadata in audio output with libav so that updates appear in MPV ?
9 mars, par TeddyMy ultimate goal is to proxy an internet radio station and programmatically add metadata to it during the stream that can be displayed and updated in MPV, the media player playing the audio.


The metadata I would like to add is primarily the song title, but ideally additional information including artist, composer, and album.


I envision running the proxy program like this :


$ curl https://example.com/stream.mp3 | ./proxy_add_metadata | mpv -



or maybe this :


$ ./proxy_add_metadata &
#=> <output>
$ mpv <output>
</output></output>


How could I make song metadata updates dynamically over time using libav ?


I’m using FFmpeg version 7.1.


I first tried changing the metadata dictionary shortly before writing a frame with a few different container formats :


av_dict_set(&output_ctx->metadata, "title", "Title 1", 0);
/* [...] */
av_interleaved_write_frame(output_ctx, packet);



Setting metadata with
av_dict_set(&output_ctx->metadata, "title", "Title 1", 0);
only appears to work when done before writing the output header.

My next idea was to try setting metadata in
AVPacket
side data, but I’m unclear which container formats support this for the kind of metadata I’m working with.

I’m open to any output media container format or FFmpeg-originated network stream.


It’s unclear to me whether the metadata should be written to a separate stream within the media container or whether it should be written as side data in the output packets.


If what I’m trying to do is impossible, please explain why.


What I have so far reads audio from standard input and writes it to standard output. The input audio can be assumed to be in MP3 format. Non-working sections for metadata updates are commented out.


/* proxy_add_metadata.c */
#include 

#include <libavformat></libavformat>avformat.h>
#include <libavcodec></libavcodec>avcodec.h>

int main() {
 int _err;

 /* MP3 input */
 AVFormatContext *input_ctx = avformat_alloc_context();
 _err = avformat_open_input(&input_ctx, "pipe:0", NULL, NULL);
 _err = avformat_find_stream_info(input_ctx, NULL);

 AVFormatContext *output_ctx;
 _err = avformat_alloc_output_context2(&output_ctx, NULL, "matroska", "pipe:1");

 AVStream *input_stream = input_ctx->streams[0];
 AVStream *output_stream = avformat_new_stream(output_ctx, NULL);

 _err = avcodec_parameters_copy(output_stream->codecpar, input_stream->codecpar);
 _err = avio_open(&output_ctx->pb, "pipe:1", AVIO_FLAG_WRITE);

 _err = avformat_write_header(output_ctx, NULL);

 AVPacket *packet = av_packet_alloc();

 /* Set up packet side data. */
 /*
 AVDictionary *packet_side_data_dict;
 av_dict_set(&packet_side_data_dict, "title", "Title 1", 0);

 size_t packet_side_data_size = 0;
 uint8_t *packet_side_data = av_packet_pack_dictionary(
 packet_side_data_dict,
 &packet_side_data_size
 );
 av_dict_free(&packet_side_data_dict);
 */

 while (1) {
 _err = av_read_frame(input_ctx, packet);
 if (_err < 0) {
 break;
 }

 /* Can metadata updates be made here? */

 /* Option 1: Attempt to write metadata to the container. */
 /*
 _err = av_dict_set(&output_ctx->metadata, "title", "Title 1", 0);
 if (_err < 0) {
 fprintf(stderr, "error: can't set metadata title in stream: %s\n", av_err2str(_err));
 break;
 }
 */

 /* Option 2: Attempt to write metadata to packet side data. */
 /*
 _err = av_packet_add_side_data(
 packet,
 AV_PKT_DATA_METADATA_UPDATE,
 packet_side_data,
 packet_side_data_size
 );
 if (_err < 0) {
 fprintf(stderr, "error: can't add side data to packet: %s\n", av_err2str(_err));
 break;
 }
 */

 AVStream *input_stream = input_ctx->streams[packet->stream_index];
 AVStream *output_stream = output_ctx->streams[packet->stream_index];

 av_packet_rescale_ts(packet, input_stream->time_base, output_stream->time_base);
 packet->pos = -1;

 _err = av_interleaved_write_frame(output_ctx, packet);
 if (_err < 0) {
 fprintf(stderr, "error: packet write: %s\n", av_err2str(_err));
 break;
 }
 }

 av_write_trailer(output_ctx);

 av_packet_free_side_data(packet);
 av_packet_free(&packet);

 avio_closep(&output_ctx->pb);
 avformat_free_context(output_ctx);

 avformat_close_input(&input_ctx);

 return 0;
}



cc \
 -Wall \
 -g \
 -I/.../ffmpeg7/include \
 -o proxy_add_metadata \
 proxy_add_metadata.c \
 -L/.../ffmpeg7/lib -lavformat -lavcodec



$ < sample.mp3 ./proxy_add_metadata | mpv -