
Recherche avancée
Médias (1)
-
Carte de Schillerkiez
13 mai 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Texte
Autres articles (96)
-
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 (...) -
Mise à jour de la version 0.1 vers 0.2
24 juin 2013, parExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
Sur d’autres sites (6434)
-
FFmpeg - Audio encoding produces extra noise over audio
17 mai 2020, par user3208915I am trying to use FFmpeg to take a video (MP4 in this case) and copy it as another MP4. This is so that I can get the hang of decoding/encoding a video and go on to doing other things in that process. My code basically takes a video file, decodes the video and audio streams, and encodes the video and audio streams to an output video file.



As of now, my code only works for the video stream of the input file. The video part of the output file is exactly the same as the video part of the input file. However, the audio part is not. The audio part of the output contains the original audio, but with noise over it. Think of it as someone screaming into their mic or when audio gets too loud for a speaker to handle.



The way I'm handling the decoding/encoding process for the video and audio streams is the same, except with a difference in AVCodecContext settings (video —> frame_rate, width, height, etc. ; audio —> sample_rate, channels, etc.).



This is currently the code that I'm working with :



The Video struct :



typedef struct Video {
 AVFormatContext* inputContext;
 AVFormatContext* outputContext;
 AVCodec* videoCodec;
 AVCodec* audioCodec;
 AVStream* inputStream;
 AVStream* outputStream;
 AVCodecContext* videoCodecContext_I; // Input
 AVCodecContext* audioCodecContext_I; // Input
 AVCodecContext* videoCodecContext_O; // Output
 AVCodecContext* audioCodecContext_O; // Output
 int videoStream; // Video stream index
 int audioStream; // Audio stream index
} Video;




The main code that handles the encoding/decoding (I've only included the audio side since the video side is the same) :



int openVideo(Video* video, char* filename, char* outputFile) {
 video->inputContext = avformat_alloc_context();
 if (!video->inputContext) {
 printf("[ERROR] Failed to allocate input format context\n");
 return -1;
 }
 if (avformat_open_input(&(video->inputContext), filename, NULL, NULL) < 0) {
 printf("[ERROR] Could not open the input file\n");
 return -1;
 }

 if (avformat_find_stream_info(video->inputContext, NULL) < 0) {
 printf("[ERROR] Failed to retrieve input stream info\n");
 return -1;
 }
 avformat_alloc_output_context2(&(video->outputContext), NULL, NULL, outputFile);
 if (!video->outputContext) {
 printf("[ERROR] Failed to create output context\n");
 return -1;
 }
 printf("[OPEN] Video %s opened\n", filename);
 return 0;
}

int prepareStreamInfo(AVCodecContext** codecContext, AVCodec** codec, AVStream* stream) {
 *codec = avcodec_find_decoder(stream->codecpar->codec_id);
 if (!*codec) {
 printf("[ERROR] Failed to find input codec\n");
 return -1;
 }
 *codecContext = avcodec_alloc_context3(*codec);
 if (!codecContext) {
 printf("[ERROR] Failed to allocate memory for input codec context\n");
 return -1;
 }
 if (avcodec_parameters_to_context(*codecContext, stream->codecpar) < 0) {
 printf("[ERROR] Failed to fill input codec context\n");
 return -1;
 }
 if (avcodec_open2(*codecContext, *codec, NULL) < 0) {
 printf("[ERROR] Failed to open input codec\n");
 return -1;
 }
 return 0;
}

int findStreams(Video* video, char* filename, char* outputFile) {
 if (openVideo(video, filename, outputFile) < 0) {
 printf("[ERROR] Video %s failed to open\n", filename);
 return -1;
 }
 for (int i = 0; i < video->inputContext->nb_streams; i++) {
 video->inputStream = video->inputContext->streams[i];
 if (video->inputContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
 video->videoStream = i;
 if (prepareStreamInfo(&(video->videoCodecContext_I), &(video->videoCodec), video->inputStream) < 0) {
 printf("[ERROR] Could not prepare video stream information\n");
 return -1;video->outputStream->time_base = video->audioCodecContext_O->time_base;
 }
 } else if (video->inputContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
 video->audioStream = i;
 if (prepareStreamInfo(&(video->audioCodecContext_I), &(video->audioCodec), video->inputStream) < 0) {
 printf("[ERROR] Could not prepare audio stream information\n");
 return -1;
 }
 }
 video->outputStream = avformat_new_stream(video->outputContext, NULL);
 if (!video->outputStream) {
 printf("[ERROR] Failed allocating output stream\n");
 return -1;
 }
 if (avcodec_parameters_copy(video->outputStream->codecpar, video->inputStream->codecpar) < 0) {
 printf("[ERROR] Failed to copy codec parameters\n");
 return -1;
 }
 }
 if (video->videoStream == -1) {
 printf("[ERROR] Video stream for %s not found\n", filename);
 return -1;
 }
 if (video->audioStream == -1) {
 printf("[ERROR] Audio stream for %s not found\n", filename);
 return -1;
 }
 if (!(video->outputContext->oformat->flags & AVFMT_NOFILE)) {
 if (avio_open(&(video->outputContext->pb), outputFile, AVIO_FLAG_WRITE) < 0) {
 printf("Could not open output file %s", outputFile);
 return -1;
 }
 }
 return 0;
}

int prepareAudioOutStream(Video* video) {
 video->audioCodec = avcodec_find_encoder_by_name("mp2");
 if (!video->audioCodec) {
 printf("[ERROR] Failed to find audio output codec\n");
 return -1;
 }
 video->audioCodecContext_O = avcodec_alloc_context3(video->audioCodec);
 if (!video->audioCodecContext_O) {
 printf("[ERROR] Failed to allocate memory for audio output codec context\n");
 return -1;
 }
 // Quite possibly the issue
 video->audioCodecContext_O->channels = video->audioCodecContext_I->channels;
 video->audioCodecContext_O->channel_layout = av_get_default_channel_layout(video->audioCodecContext_O->channels);
 video->audioCodecContext_O->sample_rate = video->audioCodecContext_I->sample_rate;
 video->audioCodecContext_O->sample_fmt = video->audioCodec->sample_fmts[0];
 video->audioCodecContext_O->bit_rate = video->audioCodecContext_I->bit_rate;
 video->audioCodecContext_O->time_base = video->audioCodecContext_I->time_base;
 video->audioCodecContext_O->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
 if (avcodec_open2(video->audioCodecContext_O, video->audioCodec, NULL) < 0) {
 printf("[ERROR] Failed to open audio output codec\n");
 return -1;
 }
 if (avcodec_parameters_from_context(getAudioStream(video)->codecpar, video->audioCodecContext_O) < 0) {
 printf("[ERROR] Failed to fill audio stream\n");
 return -1;
 }
 return 0;
}

int decodeAudio(Video* video, AVPacket* packet, AVFrame* frame) {
 int response = avcodec_send_packet(video->audioCodecContext_I, packet);
 if (response < 0) {
 printf("[ERROR] Failed to send audio packet to decoder\n");
 return response;
 }
 while (response >= 0) {
 response = avcodec_receive_frame(video->audioCodecContext_I, frame);
 if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {
 break;
 } else if (response < 0) {
 printf("[ERROR] Failed to receive audio frame from decoder\n");
 return response;
 }
 if (response >= 0) {
 // Do stuff and encode
 if (encodeAudio(video, frame) < 0) {
 printf("[ERROR] Failed to encode new audio\n");
 return -1;
 }
 }
 av_frame_unref(frame);
 }
 return 0;
}

int encodeAudio(Video* video, AVFrame* frame) {
 AVPacket* packet = av_packet_alloc();
 if (!packet) {
 printf("[ERROR] Could not allocate memory for audio output packet\n");
 return -1;
 }
 int response = avcodec_send_frame(video->audioCodecContext_O, frame);
 if (response < 0) {
 printf("[ERROR] Failed to send audio frame for encoding\n");
 return response;
 }
 while (response >= 0) {
 response = avcodec_receive_packet(video->audioCodecContext_O, packet);
 if (response == AVERROR(EAGAIN) || response == AVERROR_EOF) {
 break;
 } else if (response < 0) {
 printf("[ERROR] Failed to receive audio packet from encoder\n");
 return response;
 }
 packet->stream_index = video->audioStream;
 video->inputStream = getAudioStream(video);
 video->outputStream = video->outputContext->streams[packet->stream_index];
 packet->pts = av_rescale_q_rnd(packet->pts, video->inputStream->time_base, video->outputStream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
 packet->dts = av_rescale_q_rnd(packet->dts, video->inputStream->time_base, video->outputStream->time_base, AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX);
 packet->duration = av_rescale_q(packet->duration, video->inputStream->time_base, video->outputStream->time_base);
 packet->pos = -1;
 //av_packet_rescale_ts(packet, video->inputStream->time_base, video->outputStream->time_base);

 response = av_interleaved_write_frame(video->outputContext, packet);
 if (response < 0) {
 printf("[ERROR] Failed to write audio packet\n");
 break;
 }
 }
 av_packet_unref(packet);
 av_packet_free(&packet);
 return 0;
}

int readFrames(Video* video, AVPacket* packet, AVFrame* frame) {
 if (!packet) {
 printf("[ERROR] Packet not allocated to be read\n");
 return -1;
 }
 if (!frame) {
 printf("[ERROR] Frame not allocated to be read\n");
 return -1;
 }
 if (prepareVideoOutStream(video) < 0) {
 printf("[ERROR] Failed to prepare output video stream\n");
 return -1;
 }
 if (prepareAudioOutStream(video) < 0) {
 printf("[ERROR] Failed to prepare output audio stream\n");
 return -1;
 }
 int frameNum = 0;
 while (av_read_frame(video->inputContext, packet) >= 0) {
 printf("[READ] Reading frame %i\n", frameNum);
 if (packet->stream_index == video->videoStream) {
 if (decodeVideo(video, packet, frame) < 0) {
 printf("[ERROR] Failed to decode and encode video\n");
 return -1;
 }
 } else if (packet->stream_index == video->audioStream) {
 if (decodeAudio(video, packet, frame) < 0) {
 printf("[ERROR] Failed to decode and encode audio\n");
 return -1;
 }
 }
 av_packet_unref(packet);
 frameNum++;
 }
 // Flush encoder
 encodeVideo(video, NULL);
 encodeAudio(video, NULL);
 av_write_trailer(video->outputContext);
 return 0;
}




My main method that runs all the functions :



int main(int argc, char* argv[]) {
 Video* video = (Video*)malloc(sizeof(Video));
 initVideo(video);
 if (findStreams(video, argv[1], argv[2]) < 0) {
 printf("[ERROR] Could not find streams\n");
 return -1;
 }

 AVDictionary* dic = NULL;
 if (avformat_write_header(video->outputContext, &dic) < 0) {
 printf("[ERROR] Error while writing header to output file\n");
 return -1;
 }
 AVFrame* frame = av_frame_alloc();
 AVPacket* packet = av_packet_alloc();
 if (readFrames(video, packet, frame) < 0) {
 printf("[ERROR] Failed to read and write new video\n");
 return -1;
 }
 freeVideo(video); // Frees all codecs and contexts and the video
 return 0;
}




I tried to lay out my code so that it can be read from top to bottom without needing to scroll up.



I realize that when copying a video, I can just pass the AVPacket to write to the output file, but I wanted to be able to work with the AVFrame in the future, so I wrote it this way. I have a feeling that the issue with the way my audio is behaving is because of the audio output AVCodecContext from the prepareAudioOutStream() function.



Reading the FFmpeg documentation has proved to be of little help with this issue as well as other online sources. I must be missing something (or have something unneeded) so anything that would point me in the right direction would be helpful.



Thank you.


-
ffmpeg - convert video file with 1 frame video and 4 minutes audio to HTML5 video
4 juin 2020, par d3imHave this input video - it's 1 frame video (=picture) with audio :



Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf57.83.100
 Duration: 00:04:34.55, start: 0.000000, bitrate: 122 kb/s
 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 480x360 [SAR 1:1 DAR 4:3], 6375600 kb/s, 90k fps, 90k tbr, 90k tbn, 180k tbc (default)
 Metadata:
 handler_name : VideoHandler
 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
 Metadata:
 handler_name : SoundHandler




I need to convert it to mp4 with video track of length of audio for HTML5 - but ffmpeg (4.2.3) says :



Stream mapping:
 Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
 Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[libfdk_aac @ 0x55f35bf28100] Note, the VBR setting is unsupported and only works with some parameter combinations
Too many packets buffered for output stream 0:1.
[libfdk_aac @ 0x55f35bf28100] 2 frames left in the queue on closing
Conversion failed!




Converting audio or video alone is successful.



Converting with -c:v copy is successful but it's not what I need.



adding -max_muxing_queue_size 9999 didn't help.



EDIT :



full command :



ffmpeg -i input.mp4 -c:a libfdk_aac -vbr 2 -c:v libx264 -crf 28 -profile:v high -level 41 -vf format=yuv420p -sn -sample_fmt s16 -ac 1 -threads 0 -map_metadata -1 low.mp4




full log :



ffmpeg version 4.2.3 Copyright (c) 2000-2020 the FFmpeg developers
 built with gcc 9.3.0 (Gentoo 9.3.0 p2)
 configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/share/doc/ffmpeg-4.2.3/html --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-O2 -pipe -march=haswell -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -mbmi2 -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mno-mwaitx -mno-clzero -mno-pku -mtune=haswell' --disable-static --enable-avfilter --enable-avresample --disable-stripping --disable-optimizations --disable-libcelt --enable-version3 --enable-version3 --disable-indev=oss --disable-outdev=oss --enable-version3 --enable-nonfree --enable-bzlib --disable-runtime-cpudetect --disable-debug --disable-gcrypt --enable-gnutls --disable-gmp --enable-gpl --disable-hardcoded-tables --enable-iconv --disable-libtls --disable-libxml2 --enable-lzma --enable-network --disable-opencl --disable-openssl --enable-postproc --enable-libsmbclient --enable-ffplay --enable-sdl2 --enable-vaapi --disable-vdpau --enable-xlib --enable-libxcb --enable-libxcb-shm --enable-libxcb-xfixes --enable-zlib --disable-libcdio --disable-libiec61883 --disable-libdc1394 --disable-libcaca --disable-openal --enable-opengl --disable-libv4l2 --enable-libpulse --disable-libdrm --enable-libjack --enable-libopencore-amrwb --enable-libopencore-amrnb --disable-libcodec2 --enable-libdav1d --enable-libfdk-aac --enable-libopenjpeg --enable-libbluray --disable-libgme --disable-libgsm --disable-libaribb24 --disable-mmal --disable-libmodplug --enable-libopus --disable-libilbc --enable-librtmp --disable-libssh --enable-libspeex --enable-libsrt --enable-librsvg --disable-ffnvcodec --enable-libvorbis --enable-libvpx --disable-libzvbi --disable-appkit --disable-libbs2b --disable-chromaprint --disable-cuda-llvm --disable-libflite --enable-frei0r --disable-libfribidi --disable-fontconfig --enable-ladspa --disable-libass --disable-libtesseract --enable-lv2 --enable-libfreetype --enable-libvidstab --disable-librubberband --disable-libzmq --disable-libzimg --enable-libsoxr --enable-pthreads --enable-libvo-amrwbenc --enable-libmp3lame --disable-libkvazaar --enable-libaom --disable-libopenh264 --disable-libsnappy --enable-libtheora --disable-libtwolame --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-neon --disable-vfp --disable-vfpv3 --disable-armv8 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-altivec --disable-amd3dnow --disable-amd3dnowext --disable-fma4 --disable-xop --cpu=haswell --disable-doc --disable-htmlpages --enable-manpages
 libavutil 56. 31.100 / 56. 31.100
 libavcodec 58. 54.100 / 58. 54.100
 libavformat 58. 29.100 / 58. 29.100
 libavdevice 58. 8.100 / 58. 8.100
 libavfilter 7. 57.100 / 7. 57.100
 libavresample 4. 0. 0 / 4. 0. 0
 libswscale 5. 5.100 / 5. 5.100
 libswresample 3. 5.100 / 3. 5.100
 libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf57.83.100
 Duration: 00:04:34.55, start: 0.000000, bitrate: 122 kb/s
 Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 480x360 [SAR 1:1 DAR 4:3], 6375600 kb/s, 90k fps, 90k tbr, 90k tbn, 180k tbc (default)
 Metadata:
 handler_name : VideoHandler
 Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
 Metadata:
 handler_name : SoundHandler
Stream mapping:
 Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
 Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[libfdk_aac @ 0x55fb6c86b080] Note, the VBR setting is unsupported and only works with some parameter combinations
Too many packets buffered for output stream 0:1.
[libfdk_aac @ 0x55fb6c86b080] 2 frames left in the queue on closing
Conversion failed!




debug verbosity :



ffmpeg -v debug -i input.mp4 -c:a libfdk_aac -vbr 2 -c:v libx264 -crf 28 -profile:v high -level 41 -vf format=yuv420p -sn -sample_fmt s16 -ac 1 -threads 0 -map_metadata -1 low.mp4
ffmpeg version 4.2.3 Copyright (c) 2000-2020 the FFmpeg developers
 built with gcc 9.3.0 (Gentoo 9.3.0 p2)
 configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/share/doc/ffmpeg-4.2.3/html --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-O2 -pipe -march=haswell -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -mbmi2 -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mno-mwaitx -mno-clzero -mno-pku -mtune=haswell' --disable-static --enable-avfilter --enable-avresample --disable-stripping --disable-optimizations --disable-libcelt --enable-version3 --enable-version3 --disable-indev=oss --disable-outdev=oss --enable-version3 --enable-nonfree --enable-bzlib --disable-runtime-cpudetect --disable-debug --disable-gcrypt --enable-gnutls --disable-gmp --enable-gpl --disable-hardcoded-tables --enable-iconv --disable-libtls --disable-libxml2 --enable-lzma --enable-network --disable-opencl --disable-openssl --enable-postproc --enable-libsmbclient --enable-ffplay --enable-sdl2 --enable-vaapi --disable-vdpau --enable-xlib --enable-libxcb --enable-libxcb-shm --enable-libxcb-xfixes --enable-zlib --disable-libcdio --disable-libiec61883 --disable-libdc1394 --disable-libcaca --disable-openal --enable-opengl --disable-libv4l2 --enable-libpulse --disable-libdrm --enable-libjack --enable-libopencore-amrwb --enable-libopencore-amrnb --disable-libcodec2 --enable-libdav1d --enable-libfdk-aac --enable-libopenjpeg --enable-libbluray --disable-libgme --disable-libgsm --disable-libaribb24 --disable-mmal --disable-libmodplug --enable-libopus --disable-libilbc --enable-librtmp --disable-libssh --enable-libspeex --enable-libsrt --enable-librsvg --disable-ffnvcodec --enable-libvorbis --enable-libvpx --disable-libzvbi --disable-appkit --disable-libbs2b --disable-chromaprint --disable-cuda-llvm --disable-libflite --enable-frei0r --disable-libfribidi --disable-fontconfig --enable-ladspa --disable-libass --disable-libtesseract --enable-lv2 --enable-libfreetype --enable-libvidstab --disable-librubberband --disable-libzmq --disable-libzimg --enable-libsoxr --enable-pthreads --enable-libvo-amrwbenc --enable-libmp3lame --disable-libkvazaar --enable-libaom --disable-libopenh264 --disable-libsnappy --enable-libtheora --disable-libtwolame --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-neon --disable-vfp --disable-vfpv3 --disable-armv8 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-altivec --disable-amd3dnow --disable-amd3dnowext --disable-fma4 --disable-xop --cpu=haswell --disable-doc --disable-htmlpages --enable-manpages
 libavutil 56. 31.100 / 56. 31.100
 libavcodec 58. 54.100 / 58. 54.100
 libavformat 58. 29.100 / 58. 29.100
 libavdevice 58. 8.100 / 58. 8.100
 libavfilter 7. 57.100 / 7. 57.100
 libavresample 4. 0. 0 / 4. 0. 0
 libswscale 5. 5.100 / 5. 5.100
 libswresample 3. 5.100 / 3. 5.100
 libpostproc 55. 5.100 / 55. 5.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with argument 'debug'.
Reading option '-i' ... matched as input url with argument 'input.mp4'.
Reading option '-c:a' ... matched as option 'c' (codec name) with argument 'libfdk_aac'.
Reading option '-vbr' ... matched as AVOption 'vbr' with argument '2'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'libx264'.
Reading option '-crf' ... matched as AVOption 'crf' with argument '28'.
Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument 'high'.
Reading option '-level' ... matched as AVOption 'level' with argument '41'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'format=yuv420p'.
Reading option '-sn' ... matched as option 'sn' (disable subtitle) with argument '1'.
Reading option '-sample_fmt' ... matched as option 'sample_fmt' (set sample format) with argument 's16'.
Reading option '-ac' ... matched as option 'ac' (set number of audio channels) with argument '1'.
Reading option '-threads' ... matched as AVOption 'threads' with argument '0'.
Reading option '-map_metadata' ... matched as option 'map_metadata' (set metadata information of outfile from infile) with argument '-1'.
Reading option 'low.mp4' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input url input.mp4.
Successfully parsed a group of options.
Opening an input file: input.mp4.
[NULL @ 0x559fb7ecda40] Opening 'input.mp4' for reading
[file @ 0x559fb7ece4c0] Setting default whitelist 'file,crypto'
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] ISO: File Type Major Brand: isom
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Processing st: 0, edit list 0 - media time: 0, duration: 90
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Processing st: 1, edit list 0 - media time: 1024, duration: 12106376
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] drop a frame at curr_cts: 0 @ 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Before avformat_find_stream_info() pos: 48725 bytes read:65536 seeks:0 nb_streams:2
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 8(PPS), nal_ref_idc: 3
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] demuxer injecting skip 1024 / discard 0
[aac @ 0x559fb7ed1180] skip 1024 / discard 0 samples due to side data
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 6(SEI), nal_ref_idc: 0
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x559fb7ecf6c0] Format yuvj420p chosen by get_format().
[h264 @ 0x559fb7ecf6c0] Reinit context to 480x368, pix_fmt: yuvj420p
[h264 @ 0x559fb7ecf6c0] no picture 
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] After avformat_find_stream_info() pos: 4059034 bytes read:98304 seeks:1 frames:46
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
 Metadata:
 major_brand : isom
 minor_version : 512
 compatible_brands: isomiso2avc1mp41
 encoder : Lavf57.83.100
 Duration: 00:04:34.55, start: 0.000000, bitrate: 122 kb/s
 Stream #0:0(und), 1, 1/90000: Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuvj420p(pc, left), 480x360 (480x368) [SAR 1:1 DAR 4:3], 0/1, 6375600 kb/s, 90k fps, 90k tbr, 90k tbn, 180k tbc (default)
 Metadata:
 handler_name : VideoHandler
 Stream #0:1(und), 45, 1/44100: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
 Metadata:
 handler_name : SoundHandler
Successfully opened the file.
Parsing a group of options: output url low.mp4.
Applying option c:a (codec name) with argument libfdk_aac.
Applying option c:v (codec name) with argument libx264.
Applying option profile:v (set profile) with argument high.
Applying option vf (set video filters) with argument format=yuv420p.
Applying option sn (disable subtitle) with argument 1.
Applying option sample_fmt (set sample format) with argument s16.
Applying option ac (set number of audio channels) with argument 1.
Applying option map_metadata (set metadata information of outfile from infile) with argument -1.
Successfully parsed a group of options.
Opening an output file: low.mp4.
File 'low.mp4' already exists. Overwrite ? [y/N] y
[file @ 0x559fb7ef6e40] Setting default whitelist 'file,crypto'
Successfully opened the file.
detected 8 logical cores
[h264 @ 0x559fb7f2ee40] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x559fb7f2ee40] nal_unit_type: 8(PPS), nal_ref_idc: 3
Stream mapping:
 Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
 Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
[aac @ 0x559fb7ed3980] skip 1024 / discard 0 samples due to side data
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'time_base' to value '1/44100'
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'sample_rate' to value '44100'
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'sample_fmt' to value 'fltp'
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'channel_layout' to value '0x3'
[graph_1_in_0_1 @ 0x559fb7f431c0] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[format_out_0_1 @ 0x559fb8109140] Setting 'sample_fmts' to value 's16'
[format_out_0_1 @ 0x559fb8109140] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000'
[format_out_0_1 @ 0x559fb8109140] Setting 'channel_layouts' to value '0x4'
[format_out_0_1 @ 0x559fb8109140] auto-inserting filter 'auto_resampler_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_1'
[AVFilterGraph @ 0x559fb7f3eb80] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto_resampler_0 @ 0x559fb810a000] [SWR @ 0x559fb810a380] Using fltp internally between filters
[auto_resampler_0 @ 0x559fb810a000] [SWR @ 0x559fb810a380] Matrix coefficients:
[auto_resampler_0 @ 0x559fb810a000] [SWR @ 0x559fb810a380] FC: FL:0.500000 FR:0.500000 
[auto_resampler_0 @ 0x559fb810a000] ch:2 chl:stereo fmt:fltp r:44100Hz -> ch:1 chl:mono fmt:s16 r:44100Hz
[libfdk_aac @ 0x559fb7ef7080] Note, the VBR setting is unsupported and only works with some parameter combinations
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
 Last message repeated 44 times
[h264 @ 0x559fb7f2ee40] nal_unit_type: 6(SEI), nal_ref_idc: 0
[h264 @ 0x559fb7f2ee40] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x559fb7f2ee40] Format yuvj420p chosen by get_format().
[h264 @ 0x559fb7f2ee40] Reinit context to 480x368, pix_fmt: yuvj420p
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
 Last message repeated 1 times
[h264 @ 0x559fb7f2ee40] no picture 
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
 Last message repeated 81 times
Too many packets buffered for output stream 0:1.
[AVIOContext @ 0x559fb7ed3780] Statistics: 0 seeks, 0 writeouts
[libfdk_aac @ 0x559fb7ef7080] 2 frames left in the queue on closing
[AVIOContext @ 0x559fb7ed6880] Statistics: 131072 bytes read, 2 seeks
Conversion failed!




EDIT 2 :



The original file is converted by online tool which uses ffmpeg also.
The source file was .mp3 with jpeg cover inside. But I wasn't able to simulate online tool's behavior = to convert cover to one-frame video.


-
Ffmpeg command to efficiently merge mp3 audio file and jpeg image file to a video file
9 juin 2020, par EugenI'm looking for an efficient way to merge a large .mp3 file and a single .jpg image to a video format for youtube. If I use :



ffmpeg -loop 1 -i image.jpg -i audio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4




the result is very slow, especially for large .mp3 files. Is it possible to do it more efficiently with ffmpeg ? I know there must be a way to do it much more efficiently, like all the online converters are doing it.