
Recherche avancée
Médias (1)
-
La conservation du net art au musée. Les stratégies à l’œuvre
26 mai 2011
Mis à jour : Juillet 2013
Langue : français
Type : Texte
Autres articles (111)
-
Use, discuss, criticize
13 avril 2011, parTalk to people directly involved in MediaSPIP’s development, or to people around you who could use MediaSPIP to share, enhance or develop their creative projects.
The bigger the community, the more MediaSPIP’s potential will be explored and the faster the software will evolve.
A discussion list is available for all exchanges between users. -
Gestion des droits de création et d’édition des objets
8 février 2011, parPar défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;
-
Amélioration de la version de base
13 septembre 2013Jolie sélection multiple
Le plugin Chosen permet d’améliorer l’ergonomie des champs de sélection multiple. Voir les deux images suivantes pour comparer.
Il suffit pour cela d’activer le plugin Chosen (Configuration générale du site > Gestion des plugins), puis de configurer le plugin (Les squelettes > Chosen) en activant l’utilisation de Chosen dans le site public et en spécifiant les éléments de formulaires à améliorer, par exemple select[multiple] pour les listes à sélection multiple (...)
Sur d’autres sites (13239)
-
Generate waveforms for audio files with large amount of channels
3 mai 2021, par motioI want to generate .png files displaying the waveforms of interleaved audio .wav files using the FFmpeg libraries. http://ffmpeg.org/documentation.html


If the interleaved audio file contains maximum 8 channels, I manage to successfully achieve this using the following command line :


ffmpeg -i 8_channels_input.wav -y -filter_complex "showwavespic=s=1920x1200:split_channels=1" -frames:v 1 8_channels_waveform_output.png



However, if the interleaved audio file contains more than 8 channels, FFmpeg gives the following :




Input #0, wav, from '30_channels_input.wav' : Duration : 00:00:02.08,
bitrate : 31752 kb/s Stream #0:0 : Audio : pcm_s24le ([1][0][0][0] /
0x0001), 44100 Hz, 30 channels, s32 (24 bit), 31752 kb/s Stream
mapping : Stream #0:0 (pcm_s24le) -> showwavespic showwavespic ->
Stream #0:0 (png) Press [q] to stop, [?] for help [auto_resampler_0 @
0x7faf5d60a3c0] Cannot select channel layout for the link between
filters auto_resampler_0 and Parsed_showwavespic_0. [auto_resampler_0
@ 0x7faf5d60a3c0] Unknown channel layouts not supported, try
specifying a channel layout using 'aformat=channel_layouts=something'.
Error reinitializing filters ! Failed to inject frame into filter
network : Invalid argument Error while processing the decoded data for
stream #0:0 Conversion failed !




Here is the related documentation (c.f. bottom of the page) :
https://trac.ffmpeg.org/wiki/AudioChannelManipulation


My problem is :
I need to generate the visual waveforms of audio files containing up to 30 channels.
All my attempts were unsuccessful so far (I am trying to define custom channel layouts and I am not sure if I am on the right track here).


To simplify, I need to complete/modify the following command to make it work :


ffmpeg -i 30_channels_input.wav -y -filter_complex "showwavespic=s=1920x1200:split_channels=1" -frames:v 1 30_channels_waveform_output.png 



[EDIT] Remarks :


I manage to generate the waveforms of a 10 channels input by combining existing layouts :


ffmpeg -i 10_channels_input.wav -y -filter_complex "aformat=channel_layouts=7.1+downmix, showwavespic=s=1920x1200:split_channels=1" -frames:v 1 10_channels_waveform_output.png



However, if you attempt to do it for a 30 channels input by combining 5x 6.0 layouts :


ffmpeg -i 30_channels_input.wav -y -filter_complex "aformat=channel_layouts=6.0+6.0+6.0+6.0+6.0, showwavespic=s=1920x1200:split_channels=1" -frames:v 1 30_channels_waveform_output.png



FFmpeg gives the following :




[auto_resampler_0 @ 0x7ffd7002a480] [SWR @ 0x7ffd7013a000] Rematrix is
needed between 30 channels and 6.0 but there is not enough information
to do it [auto_resampler_0 @ 0x7ffd7002a480] Failed to configure
output pad on auto_resampler_0 Error reinitializing filters ! Failed to
inject frame into filter network : Invalid argument Error while
processing the decoded data for stream #0:0




My assumption is that I need to create a custom layout using 30 unique channel IDs (c.f. https://trac.ffmpeg.org/wiki/AudioChannelManipulation bottom of the page) instead of combining existing layouts.


It seems that only 25 channel IDs are available though. Creating a custom layout with 30 channels is maybe not possible at all...


[EDIT 2] Remarks :


I finally found the documentation I was looking for. But it still seems that generating the waveforms of 30 channels would be difficult.


Here is how to create custom layouts :
https://ffmpeg.org/ffmpeg-utils.html




A custom channel layout can be specified as a sequence of terms,
separated by ’+’ or ’|’. Each term can be :


the name of a standard channel layout (e.g. ‘mono’, ‘stereo’, ‘4.0’,
‘quad’, ‘5.0’, etc.) the name of a single channel (e.g. ‘FL’, ‘FR’,
‘FC’, ‘LFE’, etc.) a number of channels, in decimal, followed by ’c’,
yielding the default channel layout for that number of channels (see
the function av_get_default_channel_layout). Note that not all channel
counts have a default layout. a number of channels, in decimal,
followed by ’C’, yielding an unknown channel layout with the specified
number of channels. Note that not all channel layout specification
strings support unknown channel layouts. a channel layout mask, in
hexadecimal starting with "0x" (see the AV_CH_* macros in
libavutil/channel_layout.h. Before libavutil version 53 the trailing
character "c" to specify a number of channels was optional, but now it
is required, while a channel layout mask can also be specified as a
decimal number (if and only if not followed by "c" or "C").


See also the function av_get_channel_layout defined in
libavutil/channel_layout.h.




e.g.


Therefore, for 11 channels input :


ffmpeg -i 11_channels_input.wav -y -filter_complex "aformat=channel_layouts=FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL, showwavespic=s=1920x1200:split_channels=1" -frames:v 1 11_waveform_output.png



—> worked for me


while :


ffmpeg -i 11_channels_input.wav -y -filter_complex "aformat=channel_layouts=11c, showwavespic=s=1920x1200:split_channels=1" -frames:v 1 11_waveform_output.png



—> does not work


But :


ffmpeg -i 24_channels_input.wav -y -filter_complex "aformat=channel_layouts=24c, showwavespic=s=1920x1200:split_channels=1" -frames:v 1 24_waveform_output.png



—> does work


and finally, what I am still trying to achieve :


ffmpeg -i 30_channels_input.wav -y -filter_complex "aformat=channel_layouts=30c, showwavespic=s=1920x1200:split_channels=1" -frames:v 1 30_waveform_output.png



—> does not work


p.s.


- 

- I execute these commands in sub shells via Ruby scripts (puts %x...)
- My system : macOS 10.15.6 | zsh | FFmpeg 4.4 | Ruby 2.6.3






-
FFmpeg - MJPEG decoding - getting different values
27 décembre 2016, par ahmadhI have a set of JPEG frames which I am muxing into an avi, which gives me a mjpeg video. This is the command I run on the console :
ffmpeg -y -start_number 0 -i %06d.JPEG -codec copy vid.avi
When I try to demux the video using ffmpeg C api, I get frames which are slightly different in values. Demuxing code looks something like this :
AVFormatContext* fmt_ctx = NULL;
AVCodecContext* cdc_ctx = NULL;
AVCodec* vid_cdc = NULL;
int ret;
unsigned int height, width;
....
// read_nframes is the number of frames to read
output_arr = new unsigned char [height * width * 3 *
sizeof(unsigned char) * read_nframes];
avcodec_open2(cdc_ctx, vid_cdc, NULL);
int num_bytes;
uint8_t* buffer = NULL;
const AVPixelFormat out_format = AV_PIX_FMT_RGB24;
num_bytes = av_image_get_buffer_size(out_format, width, height, 1);
buffer = (uint8_t*)av_malloc(num_bytes * sizeof(uint8_t));
AVFrame* vid_frame = NULL;
vid_frame = av_frame_alloc();
AVFrame* conv_frame = NULL;
conv_frame = av_frame_alloc();
av_image_fill_arrays(conv_frame->data, conv_frame->linesize, buffer,
out_format, width, height, 1);
struct SwsContext *sws_ctx = NULL;
sws_ctx = sws_getContext(width, height, cdc_ctx->pix_fmt,
width, height, out_format,
SWS_BILINEAR, NULL,NULL,NULL);
int frame_num = 0;
AVPacket vid_pckt;
while (av_read_frame(fmt_ctx, &vid_pckt) >=0) {
ret = avcodec_send_packet(cdc_ctx, &vid_pckt);
if (ret < 0)
break;
ret = avcodec_receive_frame(cdc_ctx, vid_frame);
if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
break;
if (ret >= 0) {
// convert image from native format to planar GBR
sws_scale(sws_ctx, vid_frame->data,
vid_frame->linesize, 0, vid_frame->height,
conv_frame->data, conv_frame->linesize);
unsigned char* r_ptr = output_arr +
(height * width * sizeof(unsigned char) * 3 * frame_num);
unsigned char* g_ptr = r_ptr + (height * width * sizeof(unsigned char));
unsigned char* b_ptr = g_ptr + (height * width * sizeof(unsigned char));
unsigned int pxl_i = 0;
for (unsigned int r = 0; r < height; ++r) {
uint8_t* avframe_r = conv_frame->data[0] + r*conv_frame->linesize[0];
for (unsigned int c = 0; c < width; ++c) {
r_ptr[pxl_i] = avframe_r[0];
g_ptr[pxl_i] = avframe_r[1];
b_ptr[pxl_i] = avframe_r[2];
avframe_r += 3;
++pxl_i;
}
}
++frame_num;
if (frame_num >= read_nframes)
break;
}
}
...In my experience around two-thirds of the pixel values are different, each by +-1 (in a range of [0,255]). I am wondering is it due to some decoding scheme FFmpeg uses for reading JPEG frames ? I tried encoding and decoding png frames, and it works perfectly fine.
In short my goal is to get the same pixel by pixel values for each JPEG frame as I would I have gotten if I was reading the JPEG images directly. Here is the stand-alone code I used. It includes cmake files to build code, and a couple of jpeg frames with the converted avi file to test this problem. (give —filetype png to test the png decoding).
-
FFMPEG Multiple outputs from BlackMagic input
24 septembre 2018, par leo_dragonsI’m currently needing help to achieve multiple outputs from one input.
Right now, the outputs are set like this :ffmpeg -re -f decklink -i "DeckLink Mini Recorder" -y -pix_fmt yuv420p -c:v h264 -preset fast -tune zerolatency -c:a aac -ac 2 -b:a 128k -ar 44100 -async 1 -b:v 2300k -g 5 -probesize 32 -framerate 30 -movflags +faststart -s 1280x720 -bufsize 1000k -maxrate 3072k -shortest -f flv "rtmp://10.0.0.172:1935/Testing/live_720p"
ffmpeg -re -i "rtmp://10.0.0.172:1935/Testing/live_720p" -c:v h264 -preset fast -tune zerolatency -c:a aac -ac 2 -b:a 114k -ar 44100 -async 1 -b:v 900k -g 5 -probesize 32 -framerate 30 -movflags +faststart -s 854x480 -bufsize 400k -maxrate 1000k -shortest -f flv "rtmp://10.0.0.172:1935/Testing/live_480p_hq"
ffmpeg -re -i "rtmp://10.0.0.172:1935/Testing/live_720p" -c:v h264 -preset fast -tune zerolatency -c:a aac -ac 2 -b:a 114k -ar 44100 -async 1 -b:v 550k -g 5 -probesize 32 -framerate 30 -movflags +faststart -s 854x480 -bufsize 400k -maxrate 500k -shortest -f flv "rtmp://10.0.0.172:1935/Testing/live_480p_lq"
ffmpeg -re -i "rtmp://10.0.0.172:1935/Testing/live_720p" -c:v h264 -preset fast -tune zerolatency -c:a aac -ac 2 -b:a 114k -ar 44100 -async 1 -b:v 450k -g 5 -probesize 32 -framerate 30 -movflags +faststart -s 640x360 -bufsize 400k -maxrate 500k -shortest -f flv "rtmp://10.0.0.172:1935/Testing/live_360p"This uses quite a lot of processing power, and also generates unnecessary latency (since I have to stream to WOWZA first, then back to FFMPEG and then back to WOWZA).
And I want to optimize this.
I’ve been trying several methods, but I only managed to overflow the decklink buffer. How could I solve this ?