Recherche avancée

Médias (1)

Mot : - Tags -/portrait

Sur d’autres sites (1074)

  • How do I get an InputStream out of a Mono ?

    30 octobre 2022, par Einfari

    Bear 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")&#xA;public String upload(@RequestPart("file") Mono<filepart> filePartMono, final Model model) {&#xA;    Flux<string> filenameList = mediaComponent.extractAudio(filePartMono);&#xA;    model.addAttribute("filenameList", new ReactiveDataDriverContextVariable(filenameList));&#xA;    return "download";&#xA;}&#xA;</string></filepart>

    &#xA;

    Function to get audio streams out of the video :

    &#xA;

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

    &#xA;

    Attempt 1 :

    &#xA;

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

    &#xA;

    Attempt 2 :

    &#xA;

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

    &#xA;

    Attempt 3 :

    &#xA;

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

    &#xA;

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

    &#xA;

    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&#xA;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&#xA;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&#xA;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&#xA;2022-10-30 11:24:30.295  INFO 79049 --- [oundedElastic-3] c.g.k.jaffree.process.ProcessHandler     : Process has finished with status: 1&#xA;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.&#xA;

    &#xA;

    Attempt 2 produces multiple of these :

    &#xA;

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

    &#xA;

    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.

    &#xA;

    Thank you in advance.

    &#xA;

  • Can't get CBR when converting MP4 to Mono MP3

    28 octobre 2022, par GDP

    Having 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.

    &#xA;

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

    &#xA;

    UPDATE : replace input/output with the latest results.

    &#xA;

    From MediaInfo :

    &#xA;

    General&#xA;Complete name                            : C:\3024.mp3&#xA;Format                                   : MPEG Audio&#xA;File size                                : 124 MiB&#xA;Duration                                 : 2 h 59 min&#xA;Overall bit rate mode                    : Variable&#xA;Overall bit rate                         : 96.0 kb/s&#xA;Track name                               : My Title&#xA;Writing library                          : LAME3.100&#xA;major_brand                              : mp42&#xA;minor_version                            : 0&#xA;compatible_brands                        : mp42mp41&#xA;&#xA;Audio&#xA;Format                                   : MPEG Audio&#xA;Format version                           : Version 1&#xA;Format profile                           : Layer 3&#xA;Duration                                 : 2 h 59 min&#xA;Bit rate mode                            : Variable&#xA;Bit rate                                 : 96.0 kb/s&#xA;Channel(s)                               : 1 channel&#xA;Sampling rate                            : 44.1 kHz&#xA;Frame rate                               : 38.281 FPS (1152 SPF)&#xA;Compression mode                         : Lossy&#xA;Stream size                              : 124 MiB (100%)&#xA;Writing library                          : LAME3.100&#xA;

    &#xA;

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

    &#xA;

    ffmpeg version 4.1.1 Copyright (c) 2000-2019 the FFmpeg developers&#xA;  built with gcc 8.2.1 (GCC) 20190212&#xA;  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&#xA;  libavutil      56. 22.100 / 56. 22.100&#xA;  libavcodec     58. 35.100 / 58. 35.100&#xA;  libavformat    58. 20.100 / 58. 20.100&#xA;  libavdevice    58.  5.100 / 58.  5.100&#xA;  libavfilter     7. 40.101 /  7. 40.101&#xA;  libswscale      5.  3.100 /  5.  3.100&#xA;  libswresample   3.  3.100 /  3.  3.100&#xA;  libpostproc    55.  3.100 / 55.  3.100&#xA;Input #0, mov,mp4,m4a,3gp,3g2,mj2, from &#x27;20221011_regular_3024.mp4&#x27;:&#xA;  Metadata:&#xA;    major_brand     : mp42&#xA;    minor_version   : 0&#xA;    compatible_brands: mp42mp41&#xA;    creation_time   : 2022-10-12T06:53:10.000000Z&#xA;  Duration: 02:59:59.36, start: 0.000000, bitrate: 1297 kb/s&#xA;    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)&#xA;    Metadata:&#xA;      creation_time   : 2022-10-12T06:53:10.000000Z&#xA;      handler_name    : ?Mainconcept Video Media Handler&#xA;      encoder         : AVC Coding&#xA;    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 93 kb/s (default)&#xA;    Metadata:&#xA;      creation_time   : 2022-10-12T06:53:11.000000Z&#xA;      handler_name    : #Mainconcept MP4 Sound Media Handler&#xA;Stream mapping:&#xA;  Stream #0:1 -> #0:0 (aac (native) -> mp3 (libmp3lame))&#xA;Press [q] to stop, [?] for help&#xA;Output #0, mp3, to &#x27;20221011_regular_3024.mp3&#x27;:&#xA;  Metadata:&#xA;    major_brand     : mp42&#xA;    minor_version   : 0&#xA;    compatible_brands: mp42mp41&#xA;    TIT2            : Regular Meeting on Tuesday, October 11th, 2022&#xA;    TSSE            : Lavf58.20.100&#xA;    Stream #0:0(eng): Audio: mp3 (libmp3lame), 44100 Hz, mono, fltp, 96 kb/s (default)&#xA;    Metadata:&#xA;      creation_time   : 2022-10-12T06:53:11.000000Z&#xA;      handler_name    : #Mainconcept MP4 Sound Media Handler&#xA;      encoder         : Lavc58.35.100 libmp3lame&#xA;size=  126556kB time=02:59:59.36 bitrate=  96.0kbits/s speed= 126x&#xA;video:0kB audio:126555kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000393% ```&#xA;

    &#xA;

  • MP3 file become silent when time changed in Firefox with audio API

    14 décembre 2022, par Simon Trichereau

    I have some problem but I need to give you some context :

    &#xA;

    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.

    &#xA;

    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...

    &#xA;

    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...

    &#xA;

    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.

    &#xA;

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

    &#xA;

    Do you have any idea what is happening ?

    &#xA;

    Thanks a lot !

    &#xA;

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

    &#xA;

    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 ...

    &#xA;