
Recherche avancée
Médias (1)
-
Video d’abeille en portrait
14 mai 2011, par
Mis à jour : Février 2012
Langue : français
Type : Video
Sur d’autres sites (1074)
-
How do I get an InputStream out of a Mono ?
30 octobre 2022, par EinfariBear with my noobness, I am learning web-flux. I had this simple application that takes a video and extract the audio using FFprobe and FFmpeg, so I thought of redoing it reactively, but I am failing miserably...


Controller :


@PostMapping("/upload")
public String upload(@RequestPart("file") Mono<filepart> filePartMono, final Model model) {
 Flux<string> filenameList = mediaComponent.extractAudio(filePartMono);
 model.addAttribute("filenameList", new ReactiveDataDriverContextVariable(filenameList));
 return "download";
}
</string></filepart>


Function to get audio streams out of the video :


public Mono<ffproberesult> getAudioStreams(InputStream inputStream) {
 try {
 return Mono.just(FFprobe.atPath(FFprobePath)
 .setShowStreams(true)
 .setSelectStreams(StreamType.AUDIO)
 .setLogLevel(LogLevel.INFO)
 .setInput(inputStream)
 .execute());
 } catch (JaffreeException e) {
 log.error(e.getMessage(), e);
 throw new MediaException("Audio formats could not be identified.");
 }
}
</ffproberesult>


Attempt 1 :


public Flux<string> extractAudio(Mono<filepart> filePartMono) {
 filePartMono.flatMapMany(Part::content)
 .map(dataBuffer -> dataBuffer.asInputStream(true))
 .flatMap(this::getAudioStreams)
 .subscribe(System.out::println);
 ...
}
</filepart></string>


Attempt 2 :


public Flux<string> extractAudio(Mono<filepart> filePartMono) {
 filePartMono.flatMapMany(Part::content)
 .reduce(InputStream.nullInputStream(), (inputStream, dataBuffer) -> new SequenceInputStream(
 inputStream, dataBuffer.asInputStream()
 ))
 .flatMap(this::getAudioStreams)
 .subscribe(System.out::println);
 ...
}
</filepart></string>


Attempt 3 :


public Flux<string> extractAudio(Mono<filepart> filePartMono) {
 DataBufferUtils.write(filePartMono.flatMapMany(Part::content), OutputStream.nullOutputStream())
 .map(dataBuffer -> dataBuffer.asInputStream(true))
 .flatMap(this::getAudioStreams)
 .subscribe(System.out::println);
 ...
}
</filepart></string>


Attempt 1 and 3 seems to be the same in the end, FFprobe complains as follows :


2022-10-30 11:24:30.292 WARN 79049 --- [ StdErr] c.g.k.jaffree.process.BaseStdReader : [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9162702340] [warning] STSZ atom truncated
2022-10-30 11:24:30.292 ERROR 79049 --- [ StdErr] c.g.k.jaffree.process.BaseStdReader : [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9162702340] [error] stream 0, contradictionary STSC and STCO
2022-10-30 11:24:30.292 ERROR 79049 --- [ StdErr] c.g.k.jaffree.process.BaseStdReader : [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9162702340] [error] error reading header
2022-10-30 11:24:30.294 ERROR 79049 --- [ StdErr] c.g.k.jaffree.process.BaseStdReader : [error] tcp://127.0.0.1:51532: Invalid data found when processing input
2022-10-30 11:24:30.295 INFO 79049 --- [oundedElastic-3] c.g.k.jaffree.process.ProcessHandler : Process has finished with status: 1
2022-10-30 11:24:30.409 ERROR 79049 --- [oundedElastic-3] c.e.s.application.MediaComponent : Process execution has ended with non-zero status: 1. Check logs for detailed error message.



Attempt 2 produces multiple of these :


Exception in thread "Runnable-0" java.lang.StackOverflowError
 at java.base/java.io.SequenceInputStream.read(SequenceInputStream.java:198)



Could anybody point me in the right direction ? What am I doing wrong ? By the way, I am outputting to console just to see a result, but in the end I need to take all the outputted streams and pass them as arguments to another function that will finally extract the audio, so I need to figure out that as well.


Thank you in advance.


-
Can't get CBR when converting MP4 to Mono MP3
28 octobre 2022, par GDPHaving read at least a dozen other answers, it seems that the
b:a 96k
parameter should be producing a MP3 with a constant bitrate (CBR), yet I can only get Variable bitrates.

The latest variation of ffmpeg that comes closest is below. I don't believe I'm missing anything, so are the other values interfering ?


UPDATE : replace input/output with the latest results.


From MediaInfo :


General
Complete name : C:\3024.mp3
Format : MPEG Audio
File size : 124 MiB
Duration : 2 h 59 min
Overall bit rate mode : Variable
Overall bit rate : 96.0 kb/s
Track name : My Title
Writing library : LAME3.100
major_brand : mp42
minor_version : 0
compatible_brands : mp42mp41

Audio
Format : MPEG Audio
Format version : Version 1
Format profile : Layer 3
Duration : 2 h 59 min
Bit rate mode : Variable
Bit rate : 96.0 kb/s
Channel(s) : 1 channel
Sampling rate : 44.1 kHz
Frame rate : 38.281 FPS (1152 SPF)
Compression mode : Lossy
Stream size : 124 MiB (100%)
Writing library : LAME3.100



ffmpeg -i 3024.mp4 -metadata title="My Title" -vn -ar 44100 -ac 1 -b:a 96k 3024.mp3


ffmpeg version 4.1.1 Copyright (c) 2000-2019 the FFmpeg developers
 built with gcc 8.2.1 (GCC) 20190212
 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
 libavutil 56. 22.100 / 56. 22.100
 libavcodec 58. 35.100 / 58. 35.100
 libavformat 58. 20.100 / 58. 20.100
 libavdevice 58. 5.100 / 58. 5.100
 libavfilter 7. 40.101 / 7. 40.101
 libswscale 5. 3.100 / 5. 3.100
 libswresample 3. 3.100 / 3. 3.100
 libpostproc 55. 3.100 / 55. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20221011_regular_3024.mp4':
 Metadata:
 major_brand : mp42
 minor_version : 0
 compatible_brands: mp42mp41
 creation_time : 2022-10-12T06:53:10.000000Z
 Duration: 02:59:59.36, start: 0.000000, bitrate: 1297 kb/s
 Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 1198 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 60k tbc (default)
 Metadata:
 creation_time : 2022-10-12T06:53:10.000000Z
 handler_name : ?Mainconcept Video Media Handler
 encoder : AVC Coding
 Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 93 kb/s (default)
 Metadata:
 creation_time : 2022-10-12T06:53:11.000000Z
 handler_name : #Mainconcept MP4 Sound Media Handler
Stream mapping:
 Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, mp3, to '20221011_regular_3024.mp3':
 Metadata:
 major_brand : mp42
 minor_version : 0
 compatible_brands: mp42mp41
 TIT2 : Regular Meeting on Tuesday, October 11th, 2022
 TSSE : Lavf58.20.100
 Stream #0:0(eng): Audio: mp3 (libmp3lame), 44100 Hz, mono, fltp, 96 kb/s (default)
 Metadata:
 creation_time : 2022-10-12T06:53:11.000000Z
 handler_name : #Mainconcept MP4 Sound Media Handler
 encoder : Lavc58.35.100 libmp3lame
size= 126556kB time=02:59:59.36 bitrate= 96.0kbits/s speed= 126x
video:0kB audio:126555kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000393% ```



-
MP3 file become silent when time changed in Firefox with audio API
14 décembre 2022, par Simon TrichereauI have some problem but I need to give you some context :


I have a production environment with large audio mp3 files. Everything is working perfectly but files are too heavy. I used
ffmpeg
to reduce their Bitrates from 320kbit/s to 190kbit/s to free space in my disk.

My script worked well and I saved almost 50% of space, but before to put it in production I wanted to test it on pre-production and there is some problem with Firefox...


When I play the audio everything is working good, if I listen to it normally everything is working BUT, when I click on the range to change the time and navigate into the audio, it becomes silent. Nothing happens, I can stop, start again, change the time, nothing works, but the audio is still playing...


I don't have any errors in my console, nothing so the only solution is to reload the page and play again the audio without changing the time.


I tried in chrome and it works like a charm, but in Firefox no. I also tried without any extensions and still the same...


Do you have any idea what is happening ?


Thanks a lot !


--- EDIT 14/12/2022 ---


Ok, I have tried a lot of different solutions and I finally found one, it seems firefox doesn't support VBR (variable bitrate) so I've compressed my file in CBR and it seems to finally work ...