Recherche avancée

Médias (91)

Autres articles (33)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • Automated installation script of MediaSPIP

    25 avril 2011, par

    To overcome the difficulties mainly due to the installation of server side software dependencies, an "all-in-one" installation script written in bash was created to facilitate this step on a server with a compatible Linux distribution.
    You must have access to your server via SSH and a root account to use it, which will install the dependencies. Contact your provider if you do not have that.
    The documentation of the use of this installation script is available here.
    The code of this (...)

Sur d’autres sites (3513)

  • 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;

  • Batch script cannot read file if there is a space

    25 août 2022, par Shahpari
    CD "C:\Input"&#xA;for %%a in ("*.*") do "C:\ffmpeg.exe" -i %%a -map 0:v -map 0:a:0 -map 0:s -c:v copy -c:a ac3 -b:a 640K "C:\Out\%%~na.mkv"&#xA;pause&#xA;

    &#xA;

    if there is no space this script works fine, but if there is a space in file name, the script reads only the first word of the file and throws an error. i tried to add a double quote first %%a. but then the script does not even run.

    &#xA;

    here is an example file name :&#xA;[TEST] ABC test - 99

    &#xA;

  • I am trying to use the ffmpeg.wasm to transcode videos since i dont have very powerful servers does it work for HLS or DASH

    22 février 2021, par James Murry

    my website allows users to upload videos but my servers cant handle the traffic and the budget is low. i heard about webassembly and i have been looking to see if i can transcode on client-side and then upload the hls files to my server.

    &#xA;

    I cannot find any documentation about hls on ffmpeg.wasm is it even possible.

    &#xA;