Recherche avancée

Médias (1)

Mot : - Tags -/géodiversité

Autres articles (39)

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • MediaSPIP v0.2

    21 juin 2013, par

    MediaSPIP 0.2 is the first MediaSPIP stable release.
    Its official release date is June 21, 2013 and is announced here.
    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 (...)

  • HTML5 audio and video support

    13 avril 2011, par

    MediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
    The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
    For older browsers the Flowplayer flash fallback is used.
    MediaSPIP allows for media playback on major mobile platforms with the above (...)

Sur d’autres sites (3639)

  • How to add a subtitle to a video using ffmpeg in Flutter ?

    3 juillet 2024, par Mohammed Bekele

    I'm using flutter_ffmpeg_kit_full package to add subtitles to my video. First I loop through all words and create an srt file and stored it in temp folder :

    


     Future<string> _createSrtFile() async {&#xA;    String filePath = await getSrtOutputFilePath();&#xA;&#xA;    final file = File(filePath);&#xA;    final buffer = StringBuffer();&#xA;&#xA;    for (int i = 0; i &lt; widget.words.length; i&#x2B;&#x2B;) {&#xA;      final word = widget.words[i];&#xA;      final startTime = _formatSrtTime(word[&#x27;startTime&#x27;].toDouble());&#xA;      final endTime = _formatSrtTime(word[&#x27;endTime&#x27;].toDouble());&#xA;      final text = word[&#x27;word&#x27;];&#xA;&#xA;      buffer.writeln(&#x27;${i &#x2B; 1}&#x27;);&#xA;      buffer.writeln(&#x27;$startTime --> $endTime&#x27;);&#xA;      buffer.writeln(&#x27;$text&#x27;);&#xA;      buffer.writeln(&#x27;&#x27;);&#xA;    }&#xA;&#xA;    await file.writeAsString(buffer.toString());&#xA;    return filePath;&#xA;  }&#xA;&#xA;  String _formatSrtTime(double seconds) {&#xA;    final int hours = seconds ~/ 3600;&#xA;    final int minutes = ((seconds % 3600) ~/ 60);&#xA;    final int secs = (seconds % 60).toInt();&#xA;    final int millis = ((seconds - secs) * 1000).toInt() % 1000;&#xA;&#xA;    return &#x27;${hours.toString().padLeft(2, &#x27;0&#x27;)}:${minutes.toString().padLeft(2, &#x27;0&#x27;)}:${secs.toString().padLeft(2, &#x27;0&#x27;)},${millis.toString().padLeft(3, &#x27;0&#x27;)}&#x27;;&#xA;  }&#xA;</string>

    &#xA;

    Then I create a future function to handle the export by using ffmpeg command :

    &#xA;

    Future<void> _exportVideo() async {&#xA;    final hasPermission = await _requestStoragePermission();&#xA;    if (!hasPermission) {&#xA;      ScaffoldMessenger.of(context).showSnackBar(&#xA;          const SnackBar(content: Text(&#x27;Storage permission denied&#x27;)));&#xA;      return;&#xA;    }&#xA;&#xA;    setState(() {&#xA;      _isProcessing = true;&#xA;      _outputFilePath = "";&#xA;    });&#xA;&#xA;    try {&#xA;      final srtFilePath = await _createSrtFile();&#xA;&#xA;      String videoPath = widget.videoFile!.path;&#xA;&#xA;      String _outputPath = await getOutputFilePath();&#xA;&#xA;      final command =&#xA;          &#x27;-i $videoPath -vf "drawtext="text=\&#x27;Stack Overflow\&#x27;:fontcolor=white:fontsize=24:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)/2:y=(h-text_h)/2"" -codec:a copy $_outputPath&#x27;;&#xA;&#xA;      // final cmd = [&#xA;      //   &#x27;-i&#x27;,&#xA;      //   videoPath,&#xA;      //   &#x27;-preset&#x27;,&#xA;      //   &#x27;ultrafast&#x27;,&#xA;      //   &#x27;-vf&#x27;,&#xA;      //   &#x27;subtitles=$srtFilePath:force_style=\&#x27;Fontname=Roboto Bold,FontSize=30,MarginV=70,PrimaryColour=ffffff,OutlineColour=000000\&#x27;&#x27;,&#xA;      //   _outputPath&#xA;      // ];&#xA;      // FFmpegKit.executeWithArguments(cmd)&#xA;&#xA;      print(&#x27;Executing FFmpeg command: $command&#x27;);&#xA;&#xA;      await FFmpegKit.execute(command).then((session) async {&#xA;        final returnCode = await session.getReturnCode();&#xA;        final output = await session.getOutput();&#xA;        final failStackTrace = await session.getFailStackTrace();&#xA;&#xA;        print(&#x27;FFmpeg Output: $output&#x27;);&#xA;        if (failStackTrace != null) {&#xA;          print(&#x27;FFmpeg Fail StackTrace: $failStackTrace&#x27;);&#xA;        }&#xA;&#xA;        if (ReturnCode.isSuccess(returnCode)) {&#xA;          setState(() {&#xA;            _outputFilePath = _outputPath;&#xA;          });&#xA;          ScaffoldMessenger.of(context).showSnackBar(&#xA;              const SnackBar(content: Text(&#x27;Export successful!&#x27;)));&#xA;        } else {&#xA;          final logs = await session.getLogsAsString();&#xA;          print(&#x27;FFmpeg Logs: $logs&#x27;);&#xA;          ScaffoldMessenger.of(context)&#xA;              .showSnackBar(const SnackBar(content: Text(&#x27;Export failed!&#x27;)));&#xA;        }&#xA;      });&#xA;    } catch (e) {&#xA;      print(&#x27;Error: $e&#x27;);&#xA;      ScaffoldMessenger.of(context).showSnackBar(&#xA;          SnackBar(content: Text(&#x27;Export failed with error: $e&#x27;)));&#xA;    } finally {&#xA;      setState(() {&#xA;        _isProcessing = false;&#xA;      });&#xA;    }&#xA;  }&#xA;</void>

    &#xA;

    I did the export without the subtitles and it works. but the issue is when I try to do it with subtitles. I don't know what fault I'm making but this code is failing to export. Here is the path for the srt and video itself :

    &#xA;

      Future<string> getOutputFilePath() async {&#xA;    final Directory? downloadsDir = await getDownloadsDirectory();&#xA;    final timestamp = DateTime.now().millisecondsSinceEpoch;&#xA;    final name = "output-$timestamp.avi";&#xA;    return &#x27;${downloadsDir!.path}/$name&#x27;; // Save in downloads folder&#xA;  }&#xA;&#xA;  Future<string> getSrtOutputFilePath() async {&#xA;    final Directory? downloadsDir = await getDownloadsDirectory();&#xA;    final timestamp = DateTime.now().millisecondsSinceEpoch;&#xA;    final name = "caption-$timestamp.srt";&#xA;    return &#x27;${downloadsDir!.path}/$name&#x27;; // Save in downloads folder&#xA;  }&#xA;</string></string>

    &#xA;

  • Join two flv files with PHP and ffmpeg

    14 avril 2015, par Sergio

    On my website I’m using phpmotion to convert videos into FLV files.
    What I want to do is that after the successful conversion of any new FLV file add short FLV file at the beginning.

    So, I need FFMPEG command in PHP which will join the file 1.flv (intro file) with 2.flv (successful converted file) and as a result create final.flv

    I tried with :

    ffmpeg -i 1.flv -i 2.flv -vcodec copy -acodec copy final.flv

    But without result.

    Thanks for any suggestion.

  • How to cut and merge avi videos with java

    17 août 2017, par Monticle

    I want to cut and merge some avi videos(same codec, same resolution, same fps) using java library.

    Now I am trying this using Humble video(https://github.com/artclarke/humble-video), which is based on ffmpeg.

    I want to use the seek function to cut the input video first, but the result is not correct.

    this is my code.

    public void cutjob(String input, String output, int starttime) {
           final Demuxer demuxer = Demuxer.make();
           final Muxer muxer = Muxer.make(output, null, "avi");
           try {
               demuxer.open(input, null, false, true, null, null);
               final MuxerFormat format = MuxerFormat.guessFormat("avi", null, null);
               int n = demuxer.getNumStreams();
               final Decoder[] decoders = new Decoder[n];
               for (int i = 0; i &lt; n; i++) {
                   final DemuxerStream ds = demuxer.getStream(i);
                   decoders[i] = ds.getDecoder();
                   final Decoder d = decoders[i];
                   if (d != null) {
                       if (format.getFlag(MuxerFormat.Flag.GLOBAL_HEADER))
                           d.setFlag(Coder.Flag.FLAG_GLOBAL_HEADER, true);
                       d.open(null, null);
                       muxer.addNewStream(d);
                   }
               }
               muxer.open(null, null);

               demuxer.seek(-1, Long.MIN_VALUE, (long)starttime* Global.getDefaultTimeBase().getDenominator(), Long.MAX_VALUE, Demuxer.SeekFlag.SEEK_ANY.swigValue());
               final MediaPacket packet = MediaPacket.make();
               long dts = -1;
               while (demuxer.read(packet) >= 0) {
                   System.out.println("dts:"+packet.getDts() + ",pts:"+packet.getPts());
                   final Decoder d = decoders[packet.getStreamIndex()];
                   if (packet.isComplete() &amp;&amp; d != null) {
                       dts = dts == -1 ? packet.getDts() : dts;

                       packet.setDts(packet.getDts() - dts);
                       packet.setPosition(-1);
                       muxer.write(packet, false);

                   }
               }
               muxer.close();
               demuxer.close();
           } catch (InterruptedException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }
       }

    The video source is about 190 seconds long, and I set the "starttime" as 180,
    want to cut the last 10 seconds and write to a new avi file.

    The output avi file is 10 seconds long, but only the last 5s of the video is correct, the first 5s seems no data.

    Is there any wrong in my code.
    Thanks.