
Recherche avancée
Médias (1)
-
Carte de Schillerkiez
13 mai 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Texte
Autres articles (50)
-
Qu’est ce qu’un masque de formulaire
13 juin 2013, parUn masque de formulaire consiste en la personnalisation du formulaire de mise en ligne des médias, rubriques, actualités, éditoriaux et liens vers des sites.
Chaque formulaire de publication d’objet peut donc être personnalisé.
Pour accéder à la personnalisation des champs de formulaires, il est nécessaire d’aller dans l’administration de votre MediaSPIP puis de sélectionner "Configuration des masques de formulaires".
Sélectionnez ensuite le formulaire à modifier en cliquant sur sont type d’objet. (...) -
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir
Sur d’autres sites (8603)
-
Encoding AAC audio with libav
14 mars 2018, par Michael IVI am trying to encode AAC using FFMPEG C libs. The closest thing I found on SO is this question,but it deals with mp4 container which has aac stream. That’s not what I am trying to do. I am encoding single audio file. Now, FFMPEG example for audio encoding doesn’t show aac and it is not clear if it is enough also for the aac codec. Here is how I do it :
Setup :
AVCodec* mInputAudioCodec = NULL;
AVCodecContext* mInputAudioCodecContext = NULL;
AVPacket* mAudioPacket = NULL;
AVFrame* mAudioInputFrame = NULL;
mInputAudioCodec = avcodec_find_encoder(AV_CODEC_ID_AAC);
if (!mInputAudioCodec)
{
return false;
}
mInputAudioCodecContext = avcodec_alloc_context3(mInputAudioCodec);
if (!mInputAudioCodecContext)
{
return false;
}
mInputAudioCodecContext->bit_rate = 192000;// 64000;
mInputAudioCodecContext->sample_fmt = AV_SAMPLE_FMT_FLTP; AV_SAMPLE_FMT_S16;
// check that a given sample format is supported by the encoder
const enum AVSampleFormat *p = mInputAudioCodec->sample_fmts;
bool formatSupported = false;
while (*p != AV_SAMPLE_FMT_NONE)
{
if (*p == mInputAudioCodecContext->sample_fmt)
{
formatSupported = true;
break;
}
p++;
}
if (formatSupported == false)
{
return false;
}
mInputAudioCodecContext->sample_rate = 48000;
mInputAudioCodecContext->channel_layout = AV_CH_LAYOUT_STEREO;
mInputAudioCodecContext->channels = av_get_channel_layout_nb_channels(mInputAudioCodecContext->channel_layout);
// open codec:
if (avcodec_open2(mInputAudioCodecContext, mInputAudioCodec, NULL) < 0)
{
return false;
}
mAudioPacket = av_packet_alloc();
mAudioInputFrame = av_frame_alloc();
mAudioInputFrame->nb_samples = mInputAudioCodecContext->frame_size;
mAudioInputFrame->format = mInputAudioCodecContext->sample_fmt;
mAudioInputFrame->channel_layout = mInputAudioCodecContext->channel_layout;
mAudioInputFrame->sample_rate = mInputAudioCodecContext->sample_rate;
if (av_frame_get_buffer(mAudioInputFrame, 0) < 0)
{
return false;
}
mFileOut = fopen("audio.aac","wb");Encoding :
For the simplicity, I encode synthetic frames,just like in FFMPEG example.
FLTP is planar format,so I write dummy data into two separate buffers.int ret = 0;
ret = av_frame_make_writable(mAudioInputFrame);
if (ret < 0)
{
return;
}
//generate sound data:
float* samples0 = (float*)mAudioInputFrame->data[0];
float* samples1 = (float*)mAudioInputFrame->data[1];
float t = 0;
float tincr = 2 * M_PI * 440.0f / mInputAudioCodecContext->sample_rate;
for (int j = 0; j < mInputAudioCodecContext->frame_size; j++)
{
*samples0 = (sin(t) * 10000);
*samples1 = (sin(t) * 10000);
samples0++;
samples1++;
t += tincr;
}
av_init_packet(mAudioPacket);
mAudioPacket->data = NULL;
mAudioPacket->size = 0;
ret = avcodec_send_frame(mInputAudioCodecContext, mAudioInputFrame);
if (ret < 0)
{
fprintf(stderr, "Error sending the frame to the encoder\n");
}
/* read all the available output packets (in general there may be any
* number of them */
while (ret >= 0)
{
ret = avcodec_receive_packet(mInputAudioCodecContext, mAudioPacket);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
{
return;
}
else if (ret < 0)
{
return;
}
fwrite(mAudioPacket->data, 1, mAudioPacket->size, mFileOut);
}
av_packet_unref(mAudioPacket);The encoding session performs ok, avcodec lib doesn’t spit any warnings or errors. But the resulting .aac file is not opened neither by VLC nor by any other audio player. It is corrupted. I ran FFProbe on the file and here is what it says :
[aac @ 000000000274b840] Format aac detected only with low score of 1,
misdetection possible ! [aac @ 00000000026fb2e0] More than one AAC RDB
per ADTS frame is not implemented. Update your FFmpeg version to the
newest one from Git. If the problem still occurs, it means that your
file has a feature which has not been implemented. [aac @
00000000026fb2e0] Sample rate index in program config element does not
match the sample rate index configured by the container. [aac @
00000000026fb2e0] Inconsistent channel configuration. [aac @
00000000026fb2e0] get_buffer() failed [aac @ 00000000026fb2e0] channel
element 2.15 is not allocated [aac @ 00000000026fb2e0] Assuming an
incorrectly encoded 7.1 channel layout instead of a spec-compliant
7.1(wide) layout, use -strict 1 to decode according to the specification instead. [aac @ 00000000026fb2e0] Multiple frames in a
packet. [aac @ 00000000026fb2e0] Number of scalefactor bands in group
(53) exceeds limit (51). [aac @ 00000000026fb2e0] channel element 2.1
is not allocated [aac @ 000000000274b840] decoding for stream 0 failed
[aac @ 000000000274b840] Estimating duration from bitrate, this may be
inaccurate [aac @ 000000000274b840] Could not find codec parameters
for stream 0 (Audio : aac (SSR), stereo, fltp, 254 kb/s) : unspecified
sample rate Consider increasing the value for the ’analyzeduration’
and ’probesize’ options Input #0, aac, from ’audio.aac’ : Duration :
00:00:03.21, bitrate : 254 kb/s
Stream #0:0 : Audio : aac (SSR), stereo, fltp, 254 kb/sWhat am I doing wrong here ?
-
trying to read .smp stream using ffmpeg over windows cmd
15 décembre 2022, par Moayad RayyanAm trying to read the stream over windows CMD using ffmpeg.
I am able to stream the same link to VLC Player but Cmd showing bellow error.


The camera used here is : **Hanwha **


So when i run this command, there is error "Invalid data found when processing input"


How to tell ffmjpeg to identify this type of stream.


Command :


ffmpeg -i rtsp://admin:******@10.82.0.165:80/profile1/media.smp -loglevel 99



Command Result :


ffmpeg version 2022-12-11-git-c3e20f78b0-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
 built with gcc 12.1.0 (Rev2, Built by MSYS2 project)
 configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
 libavutil 57. 43.100 / 57. 43.100
 libavcodec 59. 55.100 / 59. 55.100
 libavformat 59. 34.102 / 59. 34.102
 libavdevice 59. 8.101 / 59. 8.101
 libavfilter 8. 52.100 / 8. 52.100
 libswscale 6. 8.112 / 6. 8.112
 libswresample 4. 9.100 / 4. 9.100
 libpostproc 56. 7.100 / 56. 7.100
Splitting the commandline.
Reading option '-codec' ... matched as option 'codec' (codec name) with argument 'hevc'.
Reading option '-i' ... matched as input url with argument 'rtsp://admin:*******@10.82.0.165:80/profile1/media.smp'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument '99'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument 99.
Successfully parsed a group of options.
Parsing a group of options: input url rtsp://admin:******@10.82.0.165:80/profile1/media.smp.
Applying option codec (codec name) with argument hevc.
Successfully parsed a group of options.
Opening an input file: rtsp://admin:******@10.82.0.165:80/profile1/media.smp.
Probing rtsp score:100 size:0
[tcp @ 000001ce22e0f0c0] No default whitelist set
[tcp @ 000001ce22e0f0c0] Original list of addresses:
[tcp @ 000001ce22e0f0c0] Address 10.82.0.165 port 80
[tcp @ 000001ce22e0f0c0] Interleaved list of addresses:
[tcp @ 000001ce22e0f0c0] Address 10.82.0.165 port 80
[tcp @ 000001ce22e0f0c0] Starting connection attempt to 10.82.0.165 port 80
[tcp @ 000001ce22e0f0c0] Successfully connected to 10.82.0.165 port 80
[rtsp @ 000001ce22e0e800] Sending:
OPTIONS rtsp://10.82.0.165:80/profile1/media.smp RTSP/1.0
CSeq: 1
User-Agent: Lavf59.34.102

--
[rtsp @ 000001ce22e0e800] ret=1 c=48 [H]
[rtsp @ 000001ce22e0e800] ret=1 c=54 [T]
 Last message repeated 1 times
[rtsp @ 000001ce22e0e800] ret=1 c=50 [P]
[rtsp @ 000001ce22e0e800] ret=1 c=2f [/]
[rtsp @ 000001ce22e0e800] ret=1 c=31 [1]
[rtsp @ 000001ce22e0e800] ret=1 c=2e [.]
[rtsp @ 000001ce22e0e800] ret=1 c=30 [0]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=34 [4]
[rtsp @ 000001ce22e0e800] ret=1 c=30 [0]
 Last message repeated 1 times
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=42 [B]
[rtsp @ 000001ce22e0e800] ret=1 c=61 [a]
[rtsp @ 000001ce22e0e800] ret=1 c=64 [d]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=52 [R]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=71 [q]
[rtsp @ 000001ce22e0e800] ret=1 c=75 [u]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=73 [s]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
]rtsp @ 000001ce22e0e800] ret=1 c=0d [
[rtsp @ 000001ce22e0e800] ret=1 c=0a [
]
[rtsp @ 000001ce22e0e800] line='HTTP/1.0 400 Bad Request'
[rtsp @ 000001ce22e0e800] ret=1 c=43 [C]
[rtsp @ 000001ce22e0e800] ret=1 c=6f [o]
[rtsp @ 000001ce22e0e800] ret=1 c=6e [n]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=6e [n]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=2d [-]
[rtsp @ 000001ce22e0e800] ret=1 c=54 [T]
[rtsp @ 000001ce22e0e800] ret=1 c=79 [y]
[rtsp @ 000001ce22e0e800] ret=1 c=70 [p]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=3a [:]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=78 [x]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=2f [/]
[rtsp @ 000001ce22e0e800] ret=1 c=68 [h]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=6d [m]
[rtsp @ 000001ce22e0e800] ret=1 c=6c [l]
]rtsp @ 000001ce22e0e800] ret=1 c=0d [
[rtsp @ 000001ce22e0e800] ret=1 c=0a [
]
[rtsp @ 000001ce22e0e800] line='Content-Type: text/html'
[rtsp @ 000001ce22e0e800] ret=1 c=43 [C]
[rtsp @ 000001ce22e0e800] ret=1 c=6f [o]
[rtsp @ 000001ce22e0e800] ret=1 c=6e [n]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=6e [n]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=2d [-]
[rtsp @ 000001ce22e0e800] ret=1 c=4c [L]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=6e [n]
[rtsp @ 000001ce22e0e800] ret=1 c=67 [g]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=68 [h]
[rtsp @ 000001ce22e0e800] ret=1 c=3a [:]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=33 [3]
[rtsp @ 000001ce22e0e800] ret=1 c=34 [4]
[rtsp @ 000001ce22e0e800] ret=1 c=39 [9]
]rtsp @ 000001ce22e0e800] ret=1 c=0d [
[rtsp @ 000001ce22e0e800] ret=1 c=0a [
]
[rtsp @ 000001ce22e0e800] line='Content-Length: 349'
[rtsp @ 000001ce22e0e800] ret=1 c=43 [C]
[rtsp @ 000001ce22e0e800] ret=1 c=6f [o]
[rtsp @ 000001ce22e0e800] ret=1 c=6e [n]
 Last message repeated 1 times
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=63 [c]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=69 [i]
[rtsp @ 000001ce22e0e800] ret=1 c=6f [o]
[rtsp @ 000001ce22e0e800] ret=1 c=6e [n]
[rtsp @ 000001ce22e0e800] ret=1 c=3a [:]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=63 [c]
[rtsp @ 000001ce22e0e800] ret=1 c=6c [l]
[rtsp @ 000001ce22e0e800] ret=1 c=6f [o]
[rtsp @ 000001ce22e0e800] ret=1 c=73 [s]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
]rtsp @ 000001ce22e0e800] ret=1 c=0d [
[rtsp @ 000001ce22e0e800] ret=1 c=0a [
]
[rtsp @ 000001ce22e0e800] line='Connection: close'
[rtsp @ 000001ce22e0e800] ret=1 c=44 [D]
[rtsp @ 000001ce22e0e800] ret=1 c=61 [a]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=3a [:]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=54 [T]
[rtsp @ 000001ce22e0e800] ret=1 c=68 [h]
[rtsp @ 000001ce22e0e800] ret=1 c=75 [u]
[rtsp @ 000001ce22e0e800] ret=1 c=2c [,]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=31 [1]
[rtsp @ 000001ce22e0e800] ret=1 c=35 [5]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=44 [D]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=63 [c]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=32 [2]
[rtsp @ 000001ce22e0e800] ret=1 c=30 [0]
[rtsp @ 000001ce22e0e800] ret=1 c=32 [2]
 Last message repeated 1 times
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=30 [0]
[rtsp @ 000001ce22e0e800] ret=1 c=38 [8]
[rtsp @ 000001ce22e0e800] ret=1 c=3a [:]
[rtsp @ 000001ce22e0e800] ret=1 c=31 [1]
[rtsp @ 000001ce22e0e800] ret=1 c=32 [2]
[rtsp @ 000001ce22e0e800] ret=1 c=3a [:]
[rtsp @ 000001ce22e0e800] ret=1 c=35 [5]
[rtsp @ 000001ce22e0e800] ret=1 c=32 [2]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=47 [G]
[rtsp @ 000001ce22e0e800] ret=1 c=4d [M]
[rtsp @ 000001ce22e0e800] ret=1 c=54 [T]
]rtsp @ 000001ce22e0e800] ret=1 c=0d [
[rtsp @ 000001ce22e0e800] ret=1 c=0a [
]
[rtsp @ 000001ce22e0e800] line='Date: Thu, 15 Dec 2022 08:12:52 GMT'
[rtsp @ 000001ce22e0e800] ret=1 c=53 [S]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=72 [r]
[rtsp @ 000001ce22e0e800] ret=1 c=76 [v]
[rtsp @ 000001ce22e0e800] ret=1 c=65 [e]
[rtsp @ 000001ce22e0e800] ret=1 c=72 [r]
[rtsp @ 000001ce22e0e800] ret=1 c=3a [:]
[rtsp @ 000001ce22e0e800] ret=1 c=20 [ ]
[rtsp @ 000001ce22e0e800] ret=1 c=6c [l]
[rtsp @ 000001ce22e0e800] ret=1 c=69 [i]
[rtsp @ 000001ce22e0e800] ret=1 c=67 [g]
[rtsp @ 000001ce22e0e800] ret=1 c=68 [h]
[rtsp @ 000001ce22e0e800] ret=1 c=74 [t]
 Last message repeated 1 times
[rtsp @ 000001ce22e0e800] ret=1 c=70 [p]
[rtsp @ 000001ce22e0e800] ret=1 c=64 [d]
]rtsp @ 000001ce22e0e800] ret=1 c=0d [
[rtsp @ 000001ce22e0e800] ret=1 c=0a [
]
[rtsp @ 000001ce22e0e800] line='Server: lighttpd'
]rtsp @ 000001ce22e0e800] ret=1 c=0d [
[rtsp @ 000001ce22e0e800] ret=1 c=0a [
]
[rtsp @ 000001ce22e0e800] line=''
[rtsp @ 000001ce22e0e800] ret=-541478725 c=0a [
]
rtsp://admin:********@10.82.0.165:80/profile1/media.smp: Invalid data found when processing input



-
Add coverart into ogg containing an opus audio stream with ffmpeg without re-encoding the audio stream
12 décembre 2023, par SebMaI'm trying to add a coverart into an ogg file with
ffmpeg
:



Here are my
source.ogg
andsource.jpg
files :


$ ffprobe -hide_banner source.ogg 
Input #0, ogg, from 'source.ogg':
 Duration: 00:03:02.45, start: 0.007500, bitrate: 73 kb/s
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100
$ identify source.jpg 
source.jpg JPEG 480x360 480x360+0+0 8-bit DirectClass 15.1KB 0.000u 0:00.000




I tried this :



$ ffmpeg -hide_banner -i source.ogg -i source.jpg -map 0 -map 1 -c:a copy -c copy -map_metadata 0 dest.ogg -y && echo && ffprobe -hide_banner dest.ogg 
Input #0, ogg, from 'source.ogg':
 Duration: 00:03:02.45, start: 0.007500, bitrate: 73 kb/s
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100
Input #1, image2, from 'source.jpg':
 Duration: 00:00:00.04, start: 0.000000, bitrate: 3023 kb/s
 Stream #1:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 480x360 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
[ogg @ 0x5655578064c0] Unsupported codec id in stream 1
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
 Stream #0:0 -> #0:0 (copy)
 Stream #1:0 -> #0:1 (copy)
 Last message repeated 1 times
[ogg @ 0x5655577e8540] Format ogg detected only with low score of 1, misdetection possible!
dest.ogg: End of file




I've also found this answer but it does not explain how to do it with
ffmpeg
.


I've read about a "METADATA_BLOCK_PICTURE" metadata in the ogg container that might contain the picture in base64, so I tried this :



$ ffmpeg -hide_banner -i source.ogg -map 0 -c:a copy -c copy -metadata METADATA_BLOCK_PICTURE="$(base64 source.jpg)" dest.ogg
Input #0, ogg, from 'source.ogg':
 Duration: 00:03:02.45, start: 0.007500, bitrate: 73 kb/s
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100
File 'dest.ogg' already exists. Overwrite ? [y/N] y
Output #0, ogg, to 'dest.ogg':
 Metadata:
 METADATA_BLOCK_PICTURE: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz
 : ODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj
 ..............................................................................
 : nVmaS2E/urUWVbH6ORI9z2l8zyRfFpkLooIHSBuk9lFFoC6OBnP1SON8rEooqM2WOVHDdRRAAUVK
 : KiiCWRRRRBJ//9k=
 encoder : Lavf58.20.100
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100
 METADATA_BLOCK_PICTURE: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkz
 : ODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2Nj
 : Y2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQED
 ..............................................................................
 : nVmaS2E/urUWVbH6ORI9z2l8zyRfFpkLooIHSBuk9lFFoC6OBnP1SON8rEooqM2WOVHDdRRAAUVK
 : KiiCWRRRRBJ//9k=
Stream mapping:
 Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size= 1658kB time=00:03:02.41 bitrate= 74.5kbits/s speed=1.01e+03x 
video:0kB audio:1624kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.100392%




It kinda "worked", but neither
ffplay
normpv
can parse the cover art :


$ ffplay -hide_banner dest.ogg
[ogg @ 0x5655577e8540] Failed to parse cover art block.
Input #0, ogg, from 'dest.ogg':
 Duration: 00:03:02.44, start: 0.000000, bitrate: 74 kb/s
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100
 3.95 M-A: -0.000 fd= 0 aq= 14KB vq= 0KB sq= 0B f=0/0 
$ mpv dest.ogg 
Playing: dest.ogg
[ffmpeg/demuxer] ogg: Failed to parse cover art block.
 (+) Audio --aid=1 (opus 2ch 48000Hz)
AO: [pulse] 48000Hz stereo 2ch float
A: 00:00:03 / 00:03:02 (2%)


Exiting... (Quit)




I alse tried
-metadata:s:a
along with the--wrap 0
ofbase64
(which I had forgotten to specify, oops :) ) :


$ ffmpeg -i source.ogg -map 0 -c:a copy -c copy -metadata:s:a METADATA_BLOCK_PICTURE="$(base64 --wrap 0 source.jpg)" dest.ogg
Input #0, ogg, from 'source.ogg':
 Duration: 00:03:02.45, start: 0.007500, bitrate: 73 kb/s
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100
File 'dest.ogg' already exists. Overwrite ? [y/N] y
Output #0, ogg, to 'dest.ogg':
 Metadata:
 encoder : Lavf58.20.100
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100
 METADATA_BLOCK_PICTURE: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2MBERISGBUYLxoaL2NCOEJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY//AABEIAWgB4AMBIgACEQEDEQH/xAAaAAACAwEBAAAAAAAAAAA
Stream mapping:
 Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size= 1658kB time=00:03:02.41 bitrate= 74.5kbits/s speed=1.22e+03x 
video:0kB audio:1624kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.084397%




But still the
dest.ogg
jpg coverart cannot be read properly :


$ ffprobe -hide_banner dest.ogg 
[ogg @ 0x5655577e8540] Invalid picture type: -2555936.
[ogg @ 0x5655577e8540] Could not read mimetype from an attached picture.
Input #0, ogg, from 'dest.ogg':
 Duration: 00:03:02.44, start: 0.000000, bitrate: 74 kb/s
 Stream #0:0: Audio: opus, 48000 Hz, stereo, fltp
 Metadata:
 DURATION : 00:03:02.441000000
 ENCODER : Lavf58.20.100




Can you please help me ?