Recherche avancée

Médias (0)

Mot : - Tags -/gis

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (56)

  • Qu’est ce qu’un éditorial

    21 juin 2013, par

    Ecrivez votre de point de vue dans un article. Celui-ci sera rangé dans une rubrique prévue à cet effet.
    Un éditorial est un article de type texte uniquement. Il a pour objectif de ranger les points de vue dans une rubrique dédiée. Un seul éditorial est placé à la une en page d’accueil. Pour consulter les précédents, consultez la rubrique dédiée.
    Vous pouvez personnaliser le formulaire de création d’un éditorial.
    Formulaire de création d’un éditorial Dans le cas d’un document de type éditorial, les (...)

  • Multilang : améliorer l’interface pour les blocs multilingues

    18 février 2011, par

    Multilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
    Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela.

  • 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

Sur d’autres sites (8736)

  • MOV to ACVHD conversion via Spring Boot and FFmpeg leads to file system error

    31 décembre 2024, par epicUsername

    I am experiencing an issue on a personal project that seeks to convert HEIC to JPG files and MOV files to AVCHD format. The HEIC to JPG conversion works, but the MOV to AVCHD does not, which is where my problems lie.

    


    The intent is to do this with Spring Boot and FFmpeg, using a simple interface done in WindowBuilder.

    


    The relevant bits are the pom file :

    


        <dependencies>&#xA;    &#xA;        &#xA;        <dependency>&#xA;            <groupid>jmagick</groupid>&#xA;            <artifactid>jmagick</artifactid>&#xA;            <version>6.6.9</version>&#xA;        </dependency>&#xA;&#xA;        &#xA;        <dependency>&#xA;            <groupid>net.java.dev.jna</groupid>&#xA;            <artifactid>jna</artifactid>&#xA;            <version>5.7.0</version> &#xA;        </dependency>&#xA;        <dependency>&#xA;            <groupid>net.java.dev.jna</groupid>&#xA;            <artifactid>jna-platform</artifactid>&#xA;            <version>5.7.0</version>&#xA;        </dependency>&#xA;        &#xA;        &#xA;&#xA;&#xA;        <dependency>&#xA;            <groupid>org.bytedeco</groupid>&#xA;            <artifactid>ffmpeg</artifactid>&#xA;            <version>7.1-1.5.11</version>&#xA;        </dependency>&#xA;        <dependency>&#xA;            <groupid>org.bytedeco</groupid>&#xA;            <artifactid>javacv</artifactid>&#xA;            <version>1.5.11</version>&#xA;        </dependency>&#xA;        <dependency>&#xA;            <groupid>org.bytedeco</groupid>&#xA;            <artifactid>ffmpeg-platform</artifactid>&#xA;            <version>7.1-1.5.11</version>&#xA;        </dependency>&#xA;        &#xA;        <dependency>&#xA;            <groupid>org.bytedeco</groupid>&#xA;            <artifactid>javacpp</artifactid>&#xA;            <version>1.5.11</version>&#xA;        </dependency>&#xA;    </dependencies>&#xA;&#xA;

    &#xA;

    and the main file with the event handling for the application, based on the interface :

    &#xA;

    package home.multimeida.mmconverter;&#xA;&#xA;imports...&#xA;&#xA;public class MMConverterInterface extends JFrame {&#xA;&#xA;    public static void main(String[] args) {&#xA;        &#xA;        &#xA;        try {&#xA;            System.setProperty("jna.library.path", "absolute/path/to/gstreamer/bin");&#xA;            // Gst.init("GStreamer Test");&#xA;            System.out.println("GStreamer initialized successfully.");&#xA;        } catch (Exception e) {&#xA;            e.printStackTrace();&#xA;            System.out.println("Failed to initialize GStreamer.");&#xA;        }&#xA;        EventQueue.invokeLater(new Runnable() {&#xA;            public void run() {&#xA;                try {&#xA;                    MMConverterInterface frame = new MMConverterInterface();&#xA;                    frame.setVisible(true);&#xA;                } catch (Exception e) {&#xA;                    e.printStackTrace();&#xA;                }&#xA;            }&#xA;        });&#xA;    }&#xA;&#xA;    /**&#xA;     * Create the frame.&#xA;     */&#xA;    public MMConverterInterface() {&#xA;        &#xA;        // convert button&#xA;        &#xA;        btnConvert.addActionListener(e -> {&#xA;            &#xA;            try {&#xA;                &#xA;                if (sourceFileLabel.getText().equals("No file chosen...") || destinationFolderLabel.getText().equals("No folder selected...")) {&#xA;                    JOptionPane.showMessageDialog(null, "Please select both an input file and a save location.", "Validation Error", JOptionPane.WARNING_MESSAGE);&#xA;                    return;&#xA;                }&#xA;                 &#xA;                File sourceFile = new File(sourceFileLabel.getText());&#xA;                File destinationFile;&#xA;                 &#xA;                if (rdbtnNewRadioButton.isSelected()) {&#xA;                    &#xA;                    System.out.println("Converting HEIC to JPG...");&#xA;                        &#xA;                    String outputFileName = sourceFile.getName().replaceFirst("[.][^.]&#x2B;$", ".jpg");&#xA;                    &#xA;                    // Call your conversion logic here&#xA;                    &#xA;                    destinationFile = new File(destinationFolderLabel.getText(), outputFileName);&#xA;                    &#xA;                    convertHeicToJpg(sourceFile, destinationFile);&#xA;                    &#xA;                } else if (rdbtnNewRadioButton_1.isSelected()) {&#xA;                    &#xA;                    if (sourceFileLabel.getText().equals("No file chosen...") || destinationFolderLabel.getText().equals("No folder selected...")) {&#xA;                        JOptionPane.showMessageDialog(null, "Please select both an input file and a save location.", "Validation Error", JOptionPane.WARNING_MESSAGE);&#xA;                        return;&#xA;                    }&#xA;                    &#xA;                     // Validate source file&#xA;                    if (!sourceFile.exists() || !sourceFile.canRead()) {&#xA;                        JOptionPane.showMessageDialog(null, "Source file does not exist or is not readable.", "File Error", JOptionPane.ERROR_MESSAGE);&#xA;                        return;&#xA;                    }&#xA;                    &#xA;                    // Validate destination folder&#xA;                    String destinationPath = destinationFolderLabel.getText();&#xA;                    if (destinationPath == null || destinationPath.isEmpty() || !(new File(destinationPath).isDirectory())) {&#xA;                        JOptionPane.showMessageDialog(null, "Invalid destination folder.", "File Error", JOptionPane.ERROR_MESSAGE);&#xA;                        return;&#xA;                    }&#xA;                    &#xA;                    System.out.println("Converting MOV to AVCHD...");&#xA;                    &#xA;                    String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());&#xA;&#xA;                    // Extract the file name without the extension&#xA;                    String baseName = sourceFile.getName().replaceFirst("[.][^.]&#x2B;$", "");&#xA;&#xA;                    // Sanitize the base name (replace invalid characters with &#x27;_&#x27;)&#xA;                    baseName = baseName.replaceAll("[^a-zA-Z0-9-_]", "_");&#xA;                    &#xA;                    String sanitizedFileName = baseName &#x2B; "_" &#x2B; currentDate;&#xA;                    sanitizedFileName = sanitizedFileName.replaceAll("[^a-zA-Z0-9._-]", "_"); // Allow alphanumeric, &#x27;-&#x27;, &#x27;_&#x27;, and &#x27;.&#x27;&#xA;&#xA;                    destinationFile = new File(destinationPath, sanitizedFileName);&#xA;                    &#xA;                    &#xA;                    /*&#xA;                    // Ensure the destination file is writable&#xA;                    if (!destinationFile.canWrite()) {&#xA;                        JOptionPane.showMessageDialog(null, "Output file is not writable.", "File Error", JOptionPane.ERROR_MESSAGE);&#xA;                        return;&#xA;                    }&#xA;                    */&#xA;                   &#xA;&#xA;                    convertMovToAvchd(sourceFile, destinationFile);&#xA;                    &#xA;                } else {&#xA;                    &#xA;                    JOptionPane.showMessageDialog(null, "Please select a conversion type.");&#xA;                    &#xA;                }&#xA;                &#xA;            } catch (Exception ex) {&#xA;                &#xA;                JOptionPane.showMessageDialog(null, "Error: " &#x2B; ex.getMessage(), "Conversion Error", JOptionPane.ERROR_MESSAGE);&#xA;                ex.printStackTrace();&#xA;            }&#xA;            &#xA;            &#xA;        });&#xA;        &#xA;        // cancel button:&#xA;        &#xA;        btnCancel.addActionListener(e -> {&#xA;            System.out.println("Operation canceled.");&#xA;            System.exit(0); // Close the application&#xA;        });&#xA;&#xA;    }&#xA;    &#xA;    public void convertMovToAvchd(File sourceFile, File destinationFile) {&#xA;        avutil.av_log_set_level(avutil.AV_LOG_DEBUG);&#xA;        &#xA;        &#xA;&#xA;        AVFormatContext inputFormatContext = null;&#xA;        AVFormatContext outputFormatContext = new AVFormatContext(null);&#xA;        AVCodecContext inputCodecContext = null;&#xA;        AVCodecContext outputCodecContext = null;&#xA;&#xA;        try {&#xA;            // Validate input file&#xA;            if (!sourceFile.exists() || !sourceFile.canRead()) {&#xA;                System.out.println("Source file does not exist or is not readable: " &#x2B; sourceFile.getAbsolutePath());&#xA;                return;&#xA;            }&#xA;            &#xA;            // Validate output file path using the validateFileCreation method&#xA;            if (!validateFileCreation(destinationFile)) {&#xA;                return; // Exit if destination file validation fails&#xA;            }&#xA;&#xA;            // Validate output file path&#xA;            if (destinationFile.getParentFile() == null || !destinationFile.getParentFile().exists()) {&#xA;                System.out.println("Output directory does not exist: " &#x2B; destinationFile.getParentFile());&#xA;                return;&#xA;            }&#xA;            if (!destinationFile.getParentFile().canWrite()) {&#xA;                System.out.println("Output directory is not writable: " &#x2B; destinationFile.getParentFile());&#xA;                return;&#xA;            }&#xA;&#xA;            // Open input file&#xA;            inputFormatContext = avformat.avformat_alloc_context();&#xA;            if (avformat.avformat_open_input(inputFormatContext, sourceFile.getAbsolutePath(), null, null) &lt; 0) {&#xA;                System.out.println("Failed to open input file: " &#x2B; sourceFile.getAbsolutePath());&#xA;                return;&#xA;            }&#xA;&#xA;            // Find stream information&#xA;            if (avformat.avformat_find_stream_info(inputFormatContext, (PointerPointer) null) &lt; 0) {&#xA;                System.out.println("Failed to retrieve input stream information.");&#xA;                return;&#xA;            }&#xA;&#xA;            // Find video stream&#xA;            int videoStreamIndex = avformat.av_find_best_stream(inputFormatContext, avutil.AVMEDIA_TYPE_VIDEO, -1, -1, (AVCodec) null, 0);&#xA;            if (videoStreamIndex &lt; 0) {&#xA;                System.out.println("Failed to find video stream in input file.");&#xA;                return;&#xA;            }&#xA;&#xA;            // Initialize input codec context&#xA;            inputCodecContext = avcodec.avcodec_alloc_context3(null);&#xA;            avcodec.avcodec_parameters_to_context(inputCodecContext, inputFormatContext.streams(videoStreamIndex).codecpar());&#xA;&#xA;            AVCodec decoder = avcodec.avcodec_find_decoder(inputCodecContext.codec_id());&#xA;            if (decoder == null || avcodec.avcodec_open2(inputCodecContext, decoder, (PointerPointer) null) &lt; 0) {&#xA;                System.out.println("Failed to open video decoder.");&#xA;                return;&#xA;            }&#xA;&#xA;            // Allocate output format context&#xA;            if (avformat.avformat_alloc_output_context2(outputFormatContext, null, "mpegts", destinationFile.getAbsolutePath()) &lt; 0) {&#xA;                System.out.println("Failed to allocate output format context.");&#xA;                return;&#xA;            }&#xA;&#xA;            // Initialize output codec&#xA;            AVCodec encoder = avcodec.avcodec_find_encoder_by_name("mpeg2video");&#xA;            if (encoder == null) {&#xA;                System.out.println("Failed to find MPEG2 video encoder.");&#xA;                return;&#xA;            }&#xA;&#xA;            outputCodecContext = avcodec.avcodec_alloc_context3(encoder);&#xA;            if (outputCodecContext == null) {&#xA;                System.out.println("Failed to allocate output codec context.");&#xA;                return;&#xA;            }&#xA;            &#xA;            if ((outputFormatContext.oformat().flags() &amp; avformat.AVFMT_GLOBALHEADER) != 0) {&#xA;                outputCodecContext.flags(outputCodecContext.flags() | avcodec.AV_CODEC_FLAG_GLOBAL_HEADER);&#xA;            }&#xA;&#xA;&#xA;            //outputCodecContext.codec_id(avcodec.AV_CODEC_ID_MPEG2VIDEO);&#xA;            outputCodecContext.codec_id(encoder.id());&#xA;            outputCodecContext.codec_type(avutil.AVMEDIA_TYPE_VIDEO);&#xA;            outputCodecContext.width(1920);&#xA;            outputCodecContext.height(1080);&#xA;            outputCodecContext.pix_fmt(avutil.AV_PIX_FMT_YUV420P);&#xA;            outputCodecContext.time_base(avutil.av_make_q(1, 25));&#xA;            outputCodecContext.bit_rate(4000000);&#xA;            outputCodecContext.gop_size(12);&#xA;&#xA;            if ((outputFormatContext.oformat().flags() &amp; avformat.AVFMT_GLOBALHEADER) != 0) {&#xA;                outputCodecContext.flags(outputCodecContext.flags() | avcodec.AV_CODEC_FLAG_GLOBAL_HEADER);&#xA;            }&#xA;&#xA;            &#xA;            &#xA;            if (avcodec.avcodec_open2(outputCodecContext, encoder, (PointerPointer) null) &lt; 0) {&#xA;                System.out.println("Failed to open video encoder.");&#xA;                return;&#xA;            }&#xA;&#xA;            // Create output stream&#xA;            AVStream videoStream = avformat.avformat_new_stream(outputFormatContext, encoder);&#xA;            if (videoStream == null) {&#xA;                System.out.println("Failed to create video stream.");&#xA;                return;&#xA;            }&#xA;&#xA;            avcodec.avcodec_parameters_from_context(videoStream.codecpar(), outputCodecContext);&#xA;            &#xA;            System.out.println("Destination file path before trying to open the file is: " &#x2B; destinationFile);&#xA;&#xA;            if ((outputFormatContext.oformat().flags() &amp; avformat.AVFMT_NOFILE) == 0) {&#xA;                // Ensure the output path has the correct extension&#xA;                String outputPath = destinationFile.getAbsolutePath().replace("\\", "/") &#x2B; ".avchd";&#xA;                System.out.println("Normalized output path: " &#x2B; outputPath);&#xA;&#xA;                // Try opening the output file&#xA;                int ret = avformat.avio_open(outputFormatContext.pb(), outputPath, avformat.AVIO_FLAG_WRITE);&#xA;                if (ret &lt; 0) {&#xA;                    BytePointer errorBuffer = new BytePointer(avutil.AV_ERROR_MAX_STRING_SIZE);&#xA;                    avutil.av_strerror(ret, errorBuffer, errorBuffer.capacity());&#xA;                    System.out.println("Failed to open output file: " &#x2B; errorBuffer.getString());&#xA;                    return;&#xA;                }&#xA;            }&#xA;&#xA;&#xA;            // Write header&#xA;            if (avformat.avformat_write_header(outputFormatContext, (PointerPointer) null) &lt; 0) {&#xA;                System.out.println("Failed to write header to output file.");&#xA;                return;&#xA;            }&#xA;&#xA;&#xA;            // Packet processing loop&#xA;            AVPacket packet = new AVPacket();&#xA;            while (avformat.av_read_frame(inputFormatContext, packet) >= 0) {&#xA;                if (packet.stream_index() == videoStreamIndex) {&#xA;                    if (avcodec.avcodec_send_packet(inputCodecContext, packet) >= 0) {&#xA;                        AVFrame frame = avutil.av_frame_alloc();&#xA;                        while (avcodec.avcodec_receive_frame(inputCodecContext, frame) >= 0) {&#xA;                            if (avcodec.avcodec_send_frame(outputCodecContext, frame) >= 0) {&#xA;                                AVPacket encodedPacket = new AVPacket();&#xA;                                while (avcodec.avcodec_receive_packet(outputCodecContext, encodedPacket) >= 0) {&#xA;                                    encodedPacket.stream_index(videoStream.index());&#xA;                                    avformat.av_interleaved_write_frame(outputFormatContext, encodedPacket);&#xA;                                    avcodec.av_packet_unref(encodedPacket);&#xA;                                }&#xA;                            }&#xA;                            avutil.av_frame_unref(frame);&#xA;                        }&#xA;                        avutil.av_frame_free(frame);&#xA;                    }&#xA;                }&#xA;                avcodec.av_packet_unref(packet);&#xA;            }&#xA;&#xA;            // Write trailer&#xA;            avformat.av_write_trailer(outputFormatContext);&#xA;            System.out.println("Conversion completed successfully.");&#xA;            &#xA;            if (avcodec.avcodec_send_frame(outputCodecContext, null) >= 0) {&#xA;                AVPacket encodedPacket = new AVPacket();&#xA;                while (avcodec.avcodec_receive_packet(outputCodecContext, encodedPacket) >= 0) {&#xA;                    encodedPacket.stream_index(videoStream.index());&#xA;                    avformat.av_interleaved_write_frame(outputFormatContext, encodedPacket);&#xA;                    avcodec.av_packet_unref(encodedPacket);&#xA;                }&#xA;            }&#xA;&#xA;        } catch (Exception e) {&#xA;            e.printStackTrace();&#xA;        } finally {&#xA;            // Cleanup&#xA;            avcodec.avcodec_free_context(inputCodecContext);&#xA;            avcodec.avcodec_free_context(outputCodecContext);&#xA;            avformat.avformat_close_input(inputFormatContext);&#xA;&#xA;            if (outputFormatContext != null &amp;&amp; outputFormatContext.pb() != null) {&#xA;                avformat.avio_closep(outputFormatContext.pb());&#xA;            }&#xA;            avformat.avformat_free_context(outputFormatContext);&#xA;        }&#xA;    }&#xA;    &#xA;    private boolean validateFileCreation(File destinationFile) {&#xA;        // Check if the parent directory exists and is writable&#xA;        File parentDir = destinationFile.getParentFile();&#xA;        if (parentDir == null || !parentDir.exists()) {&#xA;            System.out.println("Parent directory does not exist: " &#x2B; parentDir);&#xA;            return false;&#xA;        }&#xA;        if (!parentDir.canWrite()) {&#xA;            System.out.println("Cannot write to parent directory: " &#x2B; parentDir);&#xA;            return false;&#xA;        }&#xA;&#xA;        // Check if the file exists and is writable&#xA;        if (destinationFile.exists()) {&#xA;            if (!destinationFile.canWrite()) {&#xA;                System.out.println("Destination file is not writable: " &#x2B; destinationFile);&#xA;                return false;&#xA;            }&#xA;        } else {&#xA;            // If the file doesn&#x27;t exist, try to create it to verify writability&#xA;            try {&#xA;                if (!destinationFile.createNewFile()) {&#xA;                    System.out.println("Unable to create destination file: " &#x2B; destinationFile);&#xA;                    return false;&#xA;                }&#xA;                // Delete the file after successful creation to avoid residual files&#xA;                destinationFile.delete();&#xA;            } catch (IOException e) {&#xA;                System.out.println("File creation failed: " &#x2B; e.getMessage());&#xA;                return false;&#xA;            }&#xA;        }&#xA;&#xA;        return true;&#xA;    }&#xA;    &#xA;}&#xA;&#xA;&#xA;

    &#xA;

    A few caveats :

    &#xA;

      &#xA;
    1. I did explore FFmpeg and GStreamer for this project. GStreamer was inconclusive, with available version for it that were too old for use with my current state of STS4.27 and Java 17, even if this version of Java is under long-term support...

      &#xA;

    2. &#xA;

    3. I've used AI to tell me about the options and suggest ways to build this thing, since multimedia handling is very far away from my skillset. I don't have a good conceptual grasp of video formats and how they transfrom from one to another.

      &#xA;

    4. &#xA;

    &#xA;

    The issue, as I have identified it, occurs at these lines :

    &#xA;

     // Ensure the destination file is writable&#xA;                    if (!destinationFile.canWrite()) {&#xA;                        JOptionPane.showMessageDialog(null, "Output file is not writable.", "File Error", JOptionPane.ERROR_MESSAGE);&#xA;                        return;&#xA;                    }&#xA;

    &#xA;

    ^^ And this, while temporarily commented out for testing, it meant to compensate for an issue that occurs here in the conversion function :

    &#xA;

     if ((outputFormatContext.oformat().flags() &amp; avformat.AVFMT_NOFILE) == 0) {&#xA;                // Ensure the output path has the correct extension&#xA;                String outputPath = destinationFile.getAbsolutePath().replace("\\", "/") &#x2B; ".avchd";&#xA;                System.out.println("Normalized output path: " &#x2B; outputPath);&#xA;&#xA;                // Try opening the output file&#xA;                int ret = avformat.avio_open(outputFormatContext.pb(), outputPath, avformat.AVIO_FLAG_WRITE);&#xA;                if (ret &lt; 0) {&#xA;                    BytePointer errorBuffer = new BytePointer(avutil.AV_ERROR_MAX_STRING_SIZE);&#xA;                    avutil.av_strerror(ret, errorBuffer, errorBuffer.capacity());&#xA;                    System.out.println("Failed to open output file: " &#x2B; errorBuffer.getString());&#xA;                    return;&#xA;                }&#xA;            }&#xA;

    &#xA;

    The idea here is that the avio_open() function requires the use of the a valid file path that it can open to be able to write it.

    &#xA;

    Padadoxically, the file conversion seems to work, but the project crashes with a fatal error in the console :

    &#xA;

    Selected file: E:\TestConveresions\sample_960x540.mov&#xA;Save location: E:\TestConveresions&#xA;Converting MOV to AVCHD...&#xA;Destination file path before trying to open the file is: E:\TestConveresions\sample_960x540_20241231&#xA;Normalized output path: E:/TestConveresions/sample_960x540_20241231.avchd&#xA;#&#xA;# A fatal error has been detected by the Java Runtime Environment:&#xA;#&#xA;#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffcffb0868b, pid=11020, tid=14436&#xA;#&#xA;# JRE version: OpenJDK Runtime Environment Temurin-21.0.5&#x2B;11 (21.0.5&#x2B;11) (build 21.0.5&#x2B;11-LTS)&#xA;# Java VM: OpenJDK 64-Bit Server VM Temurin-21.0.5&#x2B;11 (21.0.5&#x2B;11-LTS, mixed mode, emulated-client, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)&#xA;# Problematic frame:&#xA;# C  0x00007ffcffb0868b&#xA;#&#xA;# No core dump will be written. Minidumps are not enabled by default on client versions of Windows&#xA;#&#xA;# An error report file with more information is saved as:&#xA;# E:\STS4 Workspace\MMConverter\hs_err_pid11020.log&#xA;[80.882s][warning][os] Loading hsdis library failed&#xA;#&#xA;# If you would like to submit a bug report, please visit:&#xA;#   https://github.com/adoptium/adoptium-support/issues&#xA;# The crash happened outside the Java Virtual Machine in native code.&#xA;# See problematic frame for where to report the bug.&#xA;#&#xA;[AVFormatContext @ 000002528adcea40] Opening &#x27;E:\TestConveresions\sample_960x540.mov&#x27; for reading&#xA;[file @ 000002528ae51c40] Setting default whitelist &#x27;file,crypto,data&#x27;&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] ISO: File Type Major Brand: qt  &#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] Unknown dref type 0x206c7275 size 12&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] Processing st: 0, edit list 0 - media time: 2002, duration: 400410&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] Offset DTS by 2002 to make first pts zero.&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] Setting codecpar->delay to 2 for stream st: 0&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] Before avformat_find_stream_info() pos: 1320742 bytes read:38225 seeks:1 nb_streams:1&#xA;[h264 @ 000002528ae62780] nal_unit_type: 7(SPS), nal_ref_idc: 3&#xA;[h264 @ 000002528ae62780] Decoding VUI&#xA;[h264 @ 000002528ae62780] nal_unit_type: 8(PPS), nal_ref_idc: 3&#xA;[h264 @ 000002528ae62780] nal_unit_type: 7(SPS), nal_ref_idc: 3&#xA;[h264 @ 000002528ae62780] Decoding VUI&#xA;[h264 @ 000002528ae62780] nal_unit_type: 8(PPS), nal_ref_idc: 3&#xA;[h264 @ 000002528ae62780] nal_unit_type: 6(SEI), nal_ref_idc: 0&#xA;[h264 @ 000002528ae62780] nal_unit_type: 5(IDR), nal_ref_idc: 3&#xA;[h264 @ 000002528ae62780] Format yuv420p chosen by get_format().&#xA;[h264 @ 000002528ae62780] Reinit context to 960x544, pix_fmt: yuv420p&#xA;[h264 @ 000002528ae62780] no picture &#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] All info found&#xA;[mov,mp4,m4a,3gp,3g2,mj2 @ 000002528adcea40] After avformat_find_stream_info() pos: 51943 bytes read:90132 seeks:2 frames:1&#xA;[h264 @ 000002528ae62780] nal_unit_type: 7(SPS), nal_ref_idc: 3&#xA;[h264 @ 000002528ae62780] Decoding VUI&#xA;[h264 @ 000002528ae62780] nal_unit_type: 8(PPS), nal_ref_idc: 3&#xA;[mpeg2video @ 000002528ae8e700] intra_quant_bias = 96 inter_quant_bias = 0&#xA;&#xA;

    &#xA;

    If I refer to the error log, I get this. It is partial, as I'm not sure SO will take all of it (quite long), but still might have enough to be relevant :

    &#xA;

    Host: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz, 8 cores, 31G,  Windows 11 , 64 bit Build 26100 (10.0.26100.2454)&#xA;&#xA;&#xA;---------------  T H R E A D  ---------------&#xA;&#xA;Current thread (0x00000252d030b340):  JavaThread "AWT-EventQueue-0"        [_thread_in_native, id=14436, stack(0x000000a4e2b00000,0x000000a4e2c00000) (1024K)]&#xA;&#xA;Stack: [0x000000a4e2b00000,0x000000a4e2c00000],  sp=0x000000a4e2bfdf30,  free space=1015k&#xA;Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)&#xA;C  0x00007ffcffb0868b&#xA;&#xA;Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)&#xA;j  org.bytedeco.ffmpeg.global.avformat.avio_open(Lorg/bytedeco/ffmpeg/avformat/AVIOContext;Ljava/lang/String;I)I&#x2B;0&#xA;j  home.multimeida.mmconverter.MMConverterInterface.convertMovToAvchd(Ljava/io/File;Ljava/io/File;)V&#x2B;1120&#xA;j  home.multimeida.mmconverter.MMConverterInterface.lambda$2(Ljavax/swing/JRadioButton;Ljavax/swing/JRadioButton;Ljava/awt/event/ActionEvent;)V&#x2B;347&#xA;j  home.multimeida.mmconverter.MMConverterInterface$$Lambda&#x2B;0x000002528c0c7778.actionPerformed(Ljava/awt/event/ActionEvent;)V&#x2B;13&#xA;j  javax.swing.AbstractButton.fireActionPerformed(Ljava/awt/event/ActionEvent;)V&#x2B;84 java.desktop@21.0.5&#xA;j  javax.swing.AbstractButton$Handler.actionPerformed(Ljava/awt/event/ActionEvent;)V&#x2B;5 java.desktop@21.0.5&#xA;j  javax.swing.DefaultButtonModel.fireActionPerformed(Ljava/awt/event/ActionEvent;)V&#x2B;34 java.desktop@21.0.5&#xA;j  javax.swing.DefaultButtonModel.setPressed(Z)V&#x2B;117 java.desktop@21.0.5&#xA;j  javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Ljava/awt/event/MouseEvent;)V&#x2B;35 java.desktop@21.0.5&#xA;j  java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V&#x2B;64 java.desktop@21.0.5&#xA;j  javax.swing.JComponent.processMouseEvent(Ljava/awt/event/MouseEvent;)V&#x2B;23 java.desktop@21.0.5&#xA;J 2581 c1 java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V java.desktop@21.0.5 (220 bytes) @ 0x00000252fa62719c [0x00000252fa627020&#x2B;0x000000000000017c]&#xA;J 2580 c1 java.awt.Container.processEvent(Ljava/awt/AWTEvent;)V java.desktop@21.0.5 (22 bytes) @ 0x00000252fa627d9c [0x00000252fa627cc0&#x2B;0x00000000000000dc]&#xA;J 2406 c1 java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V java.desktop@21.0.5 (785 bytes) @ 0x00000252fa670f14 [0x00000252fa670040&#x2B;0x0000000000000ed4]&#xA;J 2325 c1 java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V java.desktop@21.0.5 (129 bytes) @ 0x00000252fa64e93c [0x00000252fa64e8a0&#x2B;0x000000000000009c]&#xA;J 2608 c1 java.awt.LightweightDispatcher.retargetMouseEvent(Ljava/awt/Component;ILjava/awt/event/MouseEvent;)V java.desktop@21.0.5 (372 bytes) @ 0x00000252fa61c364 [0x00000252fa61b9e0&#x2B;0x0000000000000984]&#xA;J 2578 c1 java.awt.LightweightDispatcher.processMouseEvent(Ljava/awt/event/MouseEvent;)Z java.desktop@21.0.5 (268 bytes) @ 0x00000252fa628a54 [0x00000252fa6284c0&#x2B;0x0000000000000594]&#xA;J 2474 c1 java.awt.LightweightDispatcher.dispatchEvent(Ljava/awt/AWTEvent;)Z java.desktop@21.0.5 (73 bytes) @ 0x00000252fa699bbc [0x00000252fa699a60&#x2B;0x000000000000015c]&#xA;J 2325 c1 java.awt.Container.dispatchEventImpl(Ljava/awt/AWTEvent;)V java.desktop@21.0.5 (129 bytes) @ 0x00000252fa64e914 [0x00000252fa64e8a0&#x2B;0x0000000000000074]&#xA;J 2473 c1 java.awt.Window.dispatchEventImpl(Ljava/awt/AWTEvent;)V java.desktop@21.0.5 (23 bytes) @ 0x00000252fa699654 [0x00000252fa6994e0&#x2B;0x0000000000000174]&#xA;J 1838 c1 java.awt.EventQueue.dispatchEventImpl(Ljava/awt/AWTEvent;Ljava/lang/Object;)V java.desktop@21.0.5 (139 bytes) @ 0x00000252fa3bec64 [0x00000252fa3beb20&#x2B;0x0000000000000144]&#xA;J 1837 c1 java.awt.EventQueue$4.run()Ljava/lang/Void; java.desktop@21.0.5 (60 bytes) @ 0x00000252fa3c0504 [0x00000252fa3c0460&#x2B;0x00000000000000a4]&#xA;J 1836 c1 java.awt.EventQueue$4.run()Ljava/lang/Object; java.desktop@21.0.5 (5 bytes) @ 0x00000252fa3c0a04 [0x00000252fa3c09c0&#x2B;0x0000000000000044]&#xA;J 1778 c1 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object; java.base@21.0.5 (22 bytes) @ 0x00000252fa4601d4 [0x00000252fa45ffa0&#x2B;0x0000000000000234]&#xA;J 1832 c1 java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V java.desktop@21.0.5 (80 bytes) @ 0x00000252fa44f14c [0x00000252fa44eae0&#x2B;0x000000000000066c]&#xA;J 1846 c1 java.awt.EventDispatchThread.pumpOneEventForFilters(I)V java.desktop@21.0.5 (106 bytes) @ 0x00000252fa3ba544 [0x00000252fa3ba2e0&#x2B;0x0000000000000264]&#xA;j  java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V&#x2B;35 java.desktop@21.0.5&#xA;j  java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V&#x2B;11 java.desktop@21.0.5&#xA;j  java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V&#x2B;4 java.desktop@21.0.5&#xA;j  java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V&#x2B;3 java.desktop@21.0.5&#xA;j  java.awt.EventDispatchThread.run()V&#x2B;9 java.desktop@21.0.5&#xA;v  ~StubRoutines::call_stub 0x00000252fa08100d&#xA;&#xA;siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), writing address 0x0000000000000000&#xA;&#xA;

    &#xA;

    If anyone has a perspective on this, it'd be appreciated.

    &#xA;

    The catch 22 in this project is that pre-creating the file is not a good idea, since avio_open has a purpose in-built method for that (I tried). Error checking everything about Java's File class in terms of setting pathways and creating and deleting files is not problematic. Likewise, permissions are all fine (Full Control in source and target folders) ; I've tested default C drive folders, which have restritions, to a separate volume and removable media, to no effect. Likewise, FFmpeg requires a forward slash, "/" in file paths, whereas Java does the backslash, generally. That's been handled with the replace method in the above conditioning, also to no effect.

    &#xA;

    The basic contradiction in the project seems to be that the error tries open a file that does not exist, with a valid source and destination file, and if I try to create a placeholder file wiht an acvhd extension at the event handling for the Convert button, it still errors out ; meanwhile, FFmpeg allegedly handles the file creation at its core, but requires a valid path to be passed ; I've tried with and without a filename, with and without an extension. I'm not able to resovle it.

    &#xA;

    The excessive error handling conditions are in an effort to isolate the problem, which I think I've done.

    &#xA;

    There also seems to be a compatibility between mpegts and acvhd, which is why I also had that format specified in the conversion function, without result.

    &#xA;

    I also have the idea to be able to do this without having to install any libraries locally or having to set path variables, which is an aspect that both GStreamer and FFmpeg have.

    &#xA;

    Nearest suggestion I've found is this : integrate ffmpeg with spring boot

    &#xA;

    AI remains hopeless for resolving this issue.

    &#xA;

  • How to Choose the Optimal Multi-Touch Attribution Model for Your Organisation

    13 mars 2023, par Erin — Analytics Tips

    If you struggle to connect the dots on your customer journeys, you are researching the correct solution. 

    Multi-channel attribution models allow you to better understand the users’ paths to conversion and identify key channels and marketing assets that assist them.

    That said, each attribution model has inherent limitations, which make the selection process even harder.

    This guide explains how to choose the optimal multi-touch attribution model. We cover the pros and cons of popular attribution models, main evaluation criteria and how-to instructions for model implementation. 

    Pros and Cons of Different Attribution Models 

    Types of Attribution Models

    First Interaction 

    First Interaction attribution model (also known as first touch) assigns full credit to the conversion to the first channel, which brought in a lead. However, it doesn’t report other interactions the visitor had before converting.

    Marketers, who are primarily focused on demand generation and user acquisition, find the first touch attribution model useful to evaluate and optimise top-of-the-funnel (ToFU). 

    Pros 

    • Reflects the start of the customer journey
    • Shows channels that bring in the best-qualified leads 
    • Helps track brand awareness campaigns

    Cons 

    • Ignores the impact of later interactions at the middle and bottom of the funnel 
    • Doesn’t provide a full picture of users’ decision-making process 

    Last Interaction 

    Last Interaction attribution model (also known as last touch) shifts the entire credit allocation to the last channel before conversion. But it doesn’t account for the contribution of all other channels. 

    If your focus is conversion optimization, the last-touch model helps you determine which channels, assets or campaigns seal the deal for the prospect. 

    Pros 

    • Reports bottom-of-the-funnel events
    • Requires minimal data and configurations 
    • Helps estimate cost-per-lead or cost-per-acquisition

    Cons 

    • No visibility into assisted conversions and prior visitor interactions 
    • Overemphasise the importance of the last channel (which can often be direct traffic) 

    Last Non-Direct Interaction 

    Last Non-Direct attribution excludes direct traffic from the calculation and assigns the full conversion credit to the preceding channel. For example, a paid ad will receive 100% of credit for conversion if a visitor goes directly to your website to buy a product. 

    Last Non-Direct attribution provides greater clarity into the bottom-of-the-funnel (BoFU). events. Yet, it still under-reports the role other channels played in conversion. 

    Pros 

    • Improved channel visibility, compared to Last-Touch 
    • Avoids over-valuing direct visits
    • Reports on lead-generation efforts

    Cons 

    • Doesn’t work for account-based marketing (ABM) 
    • Devalues the quality over quantity of leads 

    Linear Model

    Linear attribution model assigns equal credit for a conversion to all tracked touchpoints, regardless of their impact on the visitor’s decision to convert.

    It helps you understand the full conversion path. But this model doesn’t distinguish between the importance of lead generation activities versus nurturing touches.

    Pros 

    • Focuses on all touch points associated with a conversion 
    • Reflects more steps in the customer journey 
    • Helps analyse longer sales cycles

    Cons 

    • Doesn’t accurately reflect the varying roles of each touchpoint 
    • Can dilute the credit if too many touchpoints are involved 

    Time Decay Model 

    Time decay models assumes that the closer a touchpoint is to the conversion, the greater its influence. Pre-conversion touchpoints get the highest credit, while the first ones are ranked lower (5%-5%-10%-15%-25%-30%).

    This model better reflects real-life customer journeys. However, it devalues the impact of brand awareness and demand-generation campaigns. 

    Pros 

    • Helps track longer sales cycles and reports on each touchpoint involved 
    • Allows customising the half-life of decay to improve reporting 
    • Promotes conversion optimization at BoFu stages

    Cons 

    • Can prompt marketers to curtail ToFU spending, which would translate to fewer qualified leads at lower stages
    • Doesn’t reflect highly-influential events at earlier stages (e.g., a product demo request or free account registration, which didn’t immediately lead to conversion)

    Position-Based Model 

    Position-Based attribution model (also known as the U-shaped model) allocates the biggest credit to the first and the last interaction (40% each). Then distributes the remaining 20% across other touches. 

    For many marketers, that’s the preferred multi-touch attribution model as it allows optimising both ToFU and BoFU channels. 

    Pros 

    • Helps establish the main channels for lead generation and conversion
    • Adds extra layers of visibility, compared to first- and last-touch attribution models 
    • Promotes budget allocation toward the most strategic touchpoints

    Cons 

    • Diminishes the importance of lead nurturing activities as more credit gets assigned to demand-gen and conversion-generation channels
    • Limited flexibility since it always assigns a fixed amount of credit to the first and last touchpoints, and the remaining credit is divided evenly among the other touchpoints

    How to Choose the Right Multi-Touch Attribution Model For Your Business 

    If you’re deciding which attribution model is best for your business, prepare for a heated discussion. Each one has its trade-offs as it emphasises or devalues the role of different channels and marketing activities.

    To reach a consensus, the best strategy is to evaluate each model against three criteria : Your marketing objectives, sales cycle length and data availability. 

    Marketing Objectives 

    Businesses generate revenue in many ways : Through direct sales, subscriptions, referral fees, licensing agreements, one-off or retainer services. Or any combination of these activities. 

    In each case, your marketing strategy will look different. For example, SaaS and direct-to-consumer (DTC) eCommerce brands have to maximise both demand generation and conversion rates. In contrast, a B2B cybersecurity consulting firm is more interested in attracting qualified leads (as opposed to any type of traffic) and progressively nurturing them towards a big-ticket purchase. 

    When selecting a multi-touch attribution model, prioritise your objectives first. Create a simple scoreboard, where your team ranks various channels and campaign types you rely on to close sales. 

    Alternatively, you can survey your customers to learn how they first heard about your company and what eventually triggered their conversion. Having data from both sides can help you cross-validate your assumptions and eliminate some biases. 

    Then consider which model would best reflect the role and importance of different channels in your sales cycle. Speaking of which….

    Sales Cycle Length 

    As shoppers, we spend less time deciding on a new toothpaste brand versus contemplating a new IT system purchase. Factors like industry, business model (B2C, DTC, B2B, B2BC), and deal size determine the average cycle length in your industry. 

    Statistically, low-ticket B2C sales can happen within just several interactions. The average B2B decision-making process can have over 15 steps, spread over several months. 

    That’s why not all multi-touch attribution models work equally well for each business. Time-decay suits better B2B companies, while B2C usually go for position-based or linear attribution. 

    Data Availability 

    Businesses struggle with multi-touch attribution model implementation due to incomplete analytics data. 

    Our web analytics tool captures more data than Google Analytics. That’s because we rely on a privacy-focused tracking mechanism, which allows you to collect analytics without showing a cookie consent banner in markets outside of Germany and the UK. 

    Cookie consent banners are mandatory with Google Analytics. Yet, almost 40% of global consumers reject it. This results in gaps in your analytics and subsequent inconsistencies in multi-touch attribution reports. With Matomo, you can compliantly collect more data for accurate reporting. 

    Some companies also struggle to connect collected insights to individual shoppers. With Matomo, you can cross-attribute users across browning sessions, using our visitors’ tracking feature

    When you already know a user’s identifier (e.g., full name or email address), you can track their on-site behaviours over time to better understand how they interact with your content and complete their purchases. Quick disclaimer, though, visitors’ tracking may not be considered compliant with certain data privacy laws. Please consult with a local authority if you have doubts. 

    How to Implement Multi-Touch Attribution

    Multi-touch attribution modelling implementation is like a “seek and find” game. You have to identify all significant touchpoints in your customers’ journeys. And sometimes also brainstorm new ways to uncover the missing parts. Then figure out the best way to track users’ actions at those stages (aka do conversion and events tracking). 

    Here’s a step-by-step walkthrough to help you get started. 

    Select a Multi-Touch Attribution Tool 

    The global marketing attribution software is worth $3.1 billion. Meaning there are plenty of tools, differing in terms of accuracy, sophistication and price.

    To make the right call prioritise five factors :

    • Available models : Look for a solution that offers multiple options and allows you to experiment with different modelling techniques or develop custom models. 
    • Implementation complexity : Some providers offer advanced data modelling tools for creating custom multi-touch attribution models, but offer few out-of-the-box modelling options. 
    • Accuracy : Check if the shortlisted tool collects the type of data you need. Prioritise providers who are less dependent on third-party cookies and allow you to identify repeat users. 
    • Your marketing stack : Some marketing attribution tools come with useful add-ons such as tag manager, heatmaps, form analytics, user session recordings and A/B testing tools. This means you can collect more data for multi-channel modelling with them instead of investing in extra software. 
    • Compliance : Ensure that the selected multi-attribution analytics software wouldn’t put you at risk of GDPR non-compliance when it comes to user privacy and consent to tracking/analysis. 

    Finally, evaluate the adoption costs. Free multi-channel analytics tools come with data quality and consistency trade-offs. Premium attribution tools may have “hidden” licensing costs and bill you for extra data integrations. 

    Look for a tool that offers a good price-to-value ratio (i.e., one that offers extra perks for a transparent price). 

    Set Up Proper Data Collection 

    Multi-touch attribution requires ample user data. To collect the right type of insights you need to set up : 

    • Website analytics : Ensure that you have all tracking codes installed (and working correctly !) to capture pageviews, on-site actions, referral sources and other data points around what users do on page. 
    • Tags : Add tracking parameters to monitor different referral channels (e.g., “facebook”), campaign types (e.g., ”final-sale”), and creative assets (e.g., “banner-1”). Tags help you get a clearer picture of different touchpoints. 
    • Integrations : To better identify on-site users and track their actions, you can also populate your attribution tool with data from your other tools – CRM system, A/B testing app, etc. 

    Finally, think about the ideal lookback window — a bounded time frame you’ll use to calculate conversions. For example, Matomo has a default windows of 7, 30 or 90 days. But you can configure a custom period to better reflect your average sales cycle. For instance, if you’re selling makeup, a shorter window could yield better results. But if you’re selling CRM software for the manufacturing industry, consider extending it.

    Configure Goals and Events 

    Goals indicate your main marketing objectives — more traffic, conversions and sales. In web analytics tools, you can measure these by tracking specific user behaviours. 

    For example : If your goal is lead generation, you can track :

    • Newsletter sign ups 
    • Product demo requests 
    • Gated content downloads 
    • Free trial account registration 
    • Contact form submission 
    • On-site call bookings 

    In each case, you can set up a unique tag to monitor these types of requests. Then analyse conversion rates — the percentage of users who have successfully completed the action. 

    To collect sufficient data for multi-channel attribution modelling, set up Goal Tracking for different types of touchpoints (MoFU & BoFU) and asset types (contact forms, downloadable assets, etc). 

    Your next task is to figure out how users interact with different on-site assets. That’s when Event Tracking comes in handy. 

    Event Tracking reports notify you about specific actions users take on your website. With Matomo Event Tracking, you can monitor where people click on your website, on which pages they click newsletter subscription links, or when they try to interact with static content elements (e.g., a non-clickable banner). 

    Using in-depth user behavioural reports, you can better understand which assets play a key role in the average customer journey. Using this data, you can localise “leaks” in your sales funnel and fix them to increase conversion rates.

    Test and Validated the Selected Model 

    A common challenge of multi-channel attribution modelling is determining the correct correlation and causality between exposure to touchpoints and purchases. 

    For example, a user who bought a discounted product from a Facebook ad would act differently than someone who purchased a full-priced product via a newsletter link. Their rate of pre- and post-sales exposure will also differ a lot — and your attribution model may not always accurately capture that. 

    That’s why you have to continuously test and tweak the selected model type. The best approach for that is lift analysis. 

    Lift analysis means comparing how your key metrics (e.g., revenue or conversion rates) change among users who were exposed to a certain campaign versus a control group. 

    In the case of multi-touch attribution modelling, you have to monitor how your metrics change after you’ve acted on the model recommendations (e.g., invested more in a well-performing referral channel or tried a new brand awareness Twitter ad). Compare the before and after ROI. If you see a positive dynamic, your model works great. 

    The downside of this approach is that you have to invest a lot upfront. But if your goal is to create a trustworthy attribution model, the best way to validate is to act on its suggestions and then test them against past results. 

    Conclusion

    A multi-touch attribution model helps you measure the impact of different channels, campaign types, and marketing assets on metrics that matter — conversion rate, sales volumes and ROI. 

    Using this data, you can invest budgets into the best-performing channels and confidently experiment with new campaign types. 

    As a Matomo user, you also get to do so without breaching customers’ privacy or compromising on analytics accuracy.

    Start using accurate multi-channel attribution in Matomo. Get your free 21-day trial now. No credit card required.

  • make : *** [ffmpeg_g] Error 1

    22 décembre 2014, par P C SAS3

    hi i am trying to install ffmpeg . i choose to do it from source because i am using a vps server so i did these steps i am using git command for getting source from github after compiling i got the below result

    #cd ~/ffmpeg_sources
    #git clone --depth 1 git://source.ffmpeg.org/ffmpeg
    #cd ffmpeg
    #PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264


    install prefix            /root/ffmpeg_build
    source path               .
    C compiler                gcc
    C library                 glibc
    ARCH                      x86 (generic)
    big-endian                no
    runtime cpu detection     yes
    yasm                      yes
    MMX enabled               yes
    MMXEXT enabled            yes
    3DNow! enabled            yes
    3DNow! extended enabled   yes
    SSE enabled               yes
    SSSE3 enabled             yes
    AVX enabled               yes
    XOP enabled               yes
    FMA3 enabled              yes
    FMA4 enabled              yes
    i686 features enabled     yes
    CMOV is fast              yes
    EBX available             yes
    EBP available             yes
    debug symbols             yes
    strip symbols             yes
    optimize for size         no
    optimizations             yes
    static                    yes
    shared                    no
    postprocessing support    yes
    new filter support        yes
    network support           yes
    threading support         pthreads
    safe bitstream reader     yes
    SDL support               no
    opencl enabled            no
    texi2html enabled         no
    perl enabled              yes
    pod2man enabled           yes
    makeinfo enabled          no
    makeinfo supports HTML    no

    External libraries:
    iconv            libopus            libx264
    libfdk_aac        libvorbis        zlib
    libmp3lame        libvpx

    Enabled decoders:
    aac            bfi            gsm
    aac_latm        bink            gsm_ms
    aasc            binkaudio_dct        h261
    ac3            binkaudio_rdft        h263
    ac3_fixed        bintext            h263i
    adpcm_4xm        bmp            h263p
    adpcm_adx        bmv_audio        h264
    adpcm_afc        bmv_video        hevc
    adpcm_ct        brender_pix        hnm4_video
    adpcm_dtk        c93            huffyuv
    adpcm_ea        cavs            iac
    adpcm_ea_maxis_xa    cdgraphics        idcin
    adpcm_ea_r1        cdxl            idf
    adpcm_ea_r2        cinepak            iff_byterun1
    adpcm_ea_r3        cljr            iff_ilbm
    adpcm_ea_xas        cllc            imc
    adpcm_g722        comfortnoise        indeo2
    adpcm_g726        cook            indeo3
    adpcm_g726le        cpia            indeo4
    adpcm_ima_amv        cscd            indeo5
    adpcm_ima_apc        cyuv            interplay_dpcm
    adpcm_ima_dk3        dca            interplay_video
    adpcm_ima_dk4        dfa            jacosub
    adpcm_ima_ea_eacs    dirac            jpeg2000
    adpcm_ima_ea_sead    dnxhd            jpegls
    adpcm_ima_iss        dpx            jv
    adpcm_ima_oki        dsd_lsbf        kgv1
    adpcm_ima_qt        dsd_lsbf_planar        kmvc
    adpcm_ima_rad        dsd_msbf        lagarith
    adpcm_ima_smjpeg    dsd_msbf_planar        libfdk_aac
    adpcm_ima_wav        dsicinaudio        libopus
    adpcm_ima_ws        dsicinvideo        libvorbis
    adpcm_ms        dvbsub            libvpx_vp8
    adpcm_sbpro_2        dvdsub            libvpx_vp9
    adpcm_sbpro_3        dvvideo            loco
    adpcm_sbpro_4        dxa            mace3
    adpcm_swf        dxtory            mace6
    adpcm_thp        eac3            mdec
    adpcm_vima        eacmv            metasound
    adpcm_xa        eamad            microdvd
    adpcm_yamaha        eatgq            mimic
    aic            eatgv            mjpeg
    alac            eatqi            mjpegb
    alias_pix        eightbps        mlp
    als            eightsvx_exp        mmvideo
    amrnb            eightsvx_fib        motionpixels
    amrwb            escape124        movtext
    amv            escape130        mp1
    anm            evrc            mp1float
    ansi            exr            mp2
    ape            ffv1            mp2float
    apng            ffvhuff            mp3
    ass            ffwavesynth        mp3adu
    asv1            fic            mp3adufloat
    asv2            flac            mp3float
    atrac1            flashsv            mp3on4
    atrac3            flashsv2        mp3on4float
    atrac3p            flic            mpc7
    aura            flv            mpc8
    aura2            fourxm            mpeg1video
    avrn            fraps            mpeg2video
    avrp            frwu            mpeg4
    avs            g2m            mpegvideo
    avui            g723_1            mpl2
    ayuv            g729            msa1
    bethsoftvid        gif            msmpeg4v1
    msmpeg4v2        qcelp            twinvq
    msmpeg4v3        qdm2            txd
    msrle            qdraw            ulti
    mss1            qpeg            utvideo
    mss2            qtrle            v210
    msvideo1        r10k            v210x
    mszh            r210            v308
    mts2            ra_144            v408
    mvc1            ra_288            v410
    mvc2            ralf            vb
    mxpeg            rawvideo        vble
    nellymoser        realtext        vc1
    nuv            rl2            vc1image
    on2avc            roq            vcr1
    opus            roq_dpcm        vima
    paf_audio        rpza            vmdaudio
    paf_video        rv10            vmdvideo
    pam            rv20            vmnc
    pbm            rv30            vorbis
    pcm_alaw        rv40            vp3
    pcm_bluray        s302m            vp5
    pcm_dvd            sami            vp6
    pcm_f32be        sanm            vp6a
    pcm_f32le        sgi            vp6f
    pcm_f64be        sgirle            vp7
    pcm_f64le        shorten            vp8
    pcm_lxf            sipr            vp9
    pcm_mulaw        smackaud        vplayer
    pcm_s16be        smacker            vqa
    pcm_s16be_planar    smc            wavpack
    pcm_s16le        smvjpeg            webp
    pcm_s16le_planar    snow            webvtt
    pcm_s24be        sol_dpcm        wmalossless
    pcm_s24daud        sonic            wmapro
    pcm_s24le        sp5x            wmav1
    pcm_s24le_planar    srt            wmav2
    pcm_s32be        ssa            wmavoice
    pcm_s32le        stl            wmv1
    pcm_s32le_planar    subrip            wmv2
    pcm_s8            subviewer        wmv3
    pcm_s8_planar        subviewer1        wmv3image
    pcm_u16be        sunrast            wnv1
    pcm_u16le        svq1            ws_snd1
    pcm_u24be        svq3            xan_dpcm
    pcm_u24le        tak            xan_wc3
    pcm_u32be        targa            xan_wc4
    pcm_u32le        targa_y216        xbin
    pcm_u8            text            xbm
    pcm_zork        theora            xface
    pcx            thp            xl
    pgm            tiertexseqvideo        xsub
    pgmyuv            tiff            xwd
    pgssub            tmv            y41p
    pictor            truehd            yop
    pjs            truemotion1        yuv4
    png            truemotion2        zero12v
    ppm            truespeech        zerocodec
    prores            tscc            zlib
    prores_lgpl        tscc2            zmbv
    ptx            tta

    Enabled encoders:
    a64multi        libopus            pgmyuv
    a64multi5        libvorbis        png
    aac            libvpx_vp8        ppm
    ac3            libvpx_vp9        prores
    ac3_fixed        libx264            prores_aw
    adpcm_adx        libx264rgb        prores_ks
    adpcm_g722        ljpeg            qtrle
    adpcm_g726        mjpeg            r10k
    adpcm_ima_qt        movtext            r210
    adpcm_ima_wav        mp2            ra_144
    adpcm_ms        mp2fixed        rawvideo
    adpcm_swf        mpeg1video        roq
    adpcm_yamaha        mpeg2video        roq_dpcm
    alac            mpeg4            rv10
    alias_pix        msmpeg4v2        rv20
    amv            msmpeg4v3        s302m
    ass            msvideo1        sgi
    asv1            nellymoser        snow
    asv2            pam            sonic
    avrp            pbm            sonic_ls
    avui            pcm_alaw        srt
    ayuv            pcm_f32be        ssa
    bmp            pcm_f32le        subrip
    cinepak            pcm_f64be        sunrast
    cljr            pcm_f64le        svq1
    comfortnoise        pcm_mulaw        targa
    dca            pcm_s16be        tiff
    dnxhd            pcm_s16be_planar    tta
    dpx            pcm_s16le        utvideo
    dvbsub            pcm_s16le_planar    v210
    dvdsub            pcm_s24be        v308
    dvvideo            pcm_s24daud        v408
    eac3            pcm_s24le        v410
    ffv1            pcm_s24le_planar    vorbis
    ffvhuff            pcm_s32be        wavpack
    flac            pcm_s32le        webvtt
    flashsv            pcm_s32le_planar    wmav1
    flashsv2        pcm_s8            wmav2
    flv            pcm_s8_planar        wmv1
    g723_1            pcm_u16be        wmv2
    gif            pcm_u16le        xbm
    h261            pcm_u24be        xface
    h263            pcm_u24le        xsub
    h263p            pcm_u32be        xwd
    huffyuv            pcm_u32le        y41p
    jpeg2000        pcm_u8            yuv4
    jpegls            pcx            zlib
    libfdk_aac        pgm            zmbv
    libmp3lame

    Enabled hwaccels:

    Enabled parsers:
    aac            dvd_nav            mpegvideo
    aac_latm        dvdsub            opus
    ac3            flac            png
    adx            gsm            pnm
    bmp            h261            rv30
    cavsvideo        h263            rv40
    cook            h264            tak
    dca            hevc            vc1
    dirac            mjpeg            vorbis
    dnxhd            mlp            vp3
    dpx            mpeg4video        vp8
    dvbsub            mpegaudio        vp9

    Enabled demuxers:
    aac            h261            mxg
    ac3            h263            nc
    act            h264            nistsphere
    adf            hevc            nsv
    adp            hls            nut
    adx            hnm            nuv
    aea            ico            ogg
    afc            idcin            oma
    aiff            idf            paf
    amr            iff            pcm_alaw
    anm            ilbc            pcm_f32be
    apc            image2            pcm_f32le
    ape            image2_alias_pix    pcm_f64be
    apng            image2_brender_pix    pcm_f64le
    aqtitle            image2pipe        pcm_mulaw
    asf            image_bmp_pipe        pcm_s16be
    ass            image_dpx_pipe        pcm_s16le
    ast            image_exr_pipe        pcm_s24be
    au            image_j2k_pipe        pcm_s24le
    avi            image_jpeg_pipe        pcm_s32be
    avr            image_jpegls_pipe    pcm_s32le
    avs            image_pictor_pipe    pcm_s8
    bethsoftvid        image_png_pipe        pcm_u16be
    bfi            image_sgi_pipe        pcm_u16le
    bink            image_sunrast_pipe    pcm_u24be
    bintext            image_tiff_pipe        pcm_u24le
    bit            image_webp_pipe        pcm_u32be
    bmv            ingenient        pcm_u32le
    boa            ipmovie            pcm_u8
    brstm            ircam            pjs
    c93            iss            pmp
    caf            iv8            pva
    cavsvideo        ivf            pvf
    cdg            jacosub            qcp
    cdxl            jv            r3d
    cine            latm            rawvideo
    concat            live_flv        realtext
    data            lmlm4            redspark
    daud            loas            rl2
    dfa            lrc            rm
    dirac            lvf            roq
    dnxhd            lxf            rpl
    dsf            m4v            rsd
    dsicin            matroska        rso
    dts            mgsts            rtp
    dtshd            microdvd        rtsp
    dv            mjpeg            sami
    dxa            mlp            sap
    ea            mlv            sbg
    ea_cdata        mm            sdp
    eac3            mmf            sdr2
    epaf            mov            segafilm
    ffm            mp3            shorten
    ffmetadata        mpc            siff
    filmstrip        mpc8            sln
    flac            mpegps            smacker
    flic            mpegts            smjpeg
    flv            mpegtsraw        smush
    fourxm            mpegvideo        sol
    frm            mpl2            sox
    g722            mpsub            spdif
    g723_1            msnwc_tcp        srt
    g729            mtv            stl
    gif            mv            str
    gsm            mvi            subviewer
    gxf            mxf            subviewer1
    sup            vc1t            webvtt
    swf            vivo            wsaud
    tak            vmd            wsvqa
    tedcaptions        vobsub            wtv
    thp            voc            wv
    tiertexseq        vplayer            xa
    tmv            vqf            xbin
    truehd            w64            xmv
    tta            wav            xwma
    tty            wc3            yop
    txd            webm_dash_manifest    yuv4mpegpipe
    vc1

    Enabled muxers:
    a64            ipod            pcm_s24le
    ac3            ircam            pcm_s32be
    adts            ismv            pcm_s32le
    adx            ivf            pcm_s8
    aiff            jacosub            pcm_u16be
    amr            latm            pcm_u16le
    asf            lrc            pcm_u24be
    asf_stream        m4v            pcm_u24le
    ass            matroska        pcm_u32be
    ast            matroska_audio        pcm_u32le
    au            md5            pcm_u8
    avi            microdvd        psp
    avm2            mjpeg            rawvideo
    bit            mkvtimestamp_v2        rm
    caf            mlp            roq
    cavsvideo        mmf            rso
    crc            mov            rtp
    dash            mp2            rtp_mpegts
    data            mp3            rtsp
    daud            mp4            sap
    dirac            mpeg1system        segment
    dnxhd            mpeg1vcd        smjpeg
    dts            mpeg1video        smoothstreaming
    dv            mpeg2dvd        sox
    eac3            mpeg2svcd        spdif
    f4v            mpeg2video        spx
    ffm            mpeg2vob        srt
    ffmetadata        mpegts            stream_segment
    filmstrip        mpjpeg            swf
    flac            mxf            tee
    flv            mxf_d10            tg2
    framecrc        null            tgp
    framemd5        nut            truehd
    g722            oga            uncodedframecrc
    g723_1            ogg            vc1
    gif            oma            vc1t
    gxf            opus            voc
    h261            pcm_alaw        w64
    h263            pcm_f32be        wav
    h264            pcm_f32le        webm
    hds            pcm_f64be        webm_dash_manifest
    hevc            pcm_f64le        webp
    hls            pcm_mulaw        webvtt
    ico            pcm_s16be        wtv
    ilbc            pcm_s16le        wv
    image2            pcm_s24be        yuv4mpegpipe
    image2pipe

    Enabled protocols:
    cache            http            rtmpt
    concat            httpproxy        rtp
    crypto            icecast            srtp
    data            md5            subfile
    ffrtmphttp        mmsh            tcp
    file            mmst            udp
    ftp            pipe            udplite
    gopher            rtmp            unix
    hls

    Enabled filters:
    adelay            dejudder        pad
    aecho            delogo            pan
    aeval            deshake            perms
    aevalsrc        drawbox            perspective
    afade            drawgrid        phase
    aformat            earwax            pixdesctest
    ainterleave        ebur128            pp
    allpass            edgedetect        psnr
    alphaextract        elbg            pullup
    alphamerge        equalizer        removelogo
    amerge            extractplanes        replaygain
    amix            fade            rgbtestsrc
    amovie            field            rotate
    anull            fieldmatch        sab
    anullsink        fieldorder        scale
    anullsrc        flanger            select
    apad            format            sendcmd
    aperms            fps            separatefields
    aphaser            framepack        setdar
    aresample        framestep        setfield
    aselect            geq            setpts
    asendcmd        gradfun            setsar
    asetnsamples        haldclut        settb
    asetpts            haldclutsrc        showcqt
    asetrate        hflip            showinfo
    asettb            highpass        showspectrum
    ashowinfo        histeq            showwaves
    asplit            histogram        shuffleplanes
    astats            hqdn3d            signalstats
    astreamsync        hqx            silencedetect
    atempo            hue            silenceremove
    atrim            idet            sine
    avectorscope        il            smartblur
    bandpass        interlace        smptebars
    bandreject        interleave        smptehdbars
    bass            join            split
    bbox            kerndeint        spp
    biquad            lenscorrection        stereo3d
    blackdetect        life            super2xsai
    blackframe        lowpass            swapuv
    blend            lut            telecine
    boxblur            lut3d            testsrc
    cellauto        lutrgb            thumbnail
    channelmap        lutyuv            tile
    channelsplit        mandelbrot        tinterlace
    codecview        mcdeint            transpose
    color            mergeplanes        treble
    colorbalance        movie            trim
    colorchannelmixer    mp            unsharp
    colorlevels        mpdecimate        uspp
    colormatrix        mptestsrc        vflip
    compand            negate            vignette
    concat            noformat        volume
    copy            noise            volumedetect
    crop            null            w3fdif
    cropdetect        nullsink        xbr
    curves            nullsrc            yadif
    dctdnoiz        overlay            zoompan
    decimate        owdenoise

    Enabled bsfs:
    aac_adtstoasc        imx_dump_header        mp3_header_decompress
    chomp            mjpeg2jpeg        noise
    dump_extradata        mjpega_dump_header    remove_extradata
    h264_mp4toannexb    mov2textsub        text2movsub

    Enabled indevs:
    dv1394            lavfi            v4l2
    fbdev            oss

    Enabled outdevs:
    fbdev            oss            v4l2

    License: nonfree and unredistributable
    Creating config.mak, config.h, and doc/config.texi...
    config.h is unchanged
    config.asm is unchanged
    libavutil/avconfig.h is unchanged

    now i am trying to run make command but getting the following error

    make
    POD    doc/ffmpeg.pod
    POD    doc/ffprobe.pod
    POD    doc/ffserver.pod
    POD    doc/ffmpeg-all.pod
    POD    doc/ffprobe-all.pod
    POD    doc/ffserver-all.pod
    MAN    doc/ffmpeg.1
    MAN    doc/ffprobe.1
    MAN    doc/ffserver.1
    MAN    doc/ffmpeg-all.1
    MAN    doc/ffprobe-all.1
    MAN    doc/ffserver-all.1
    LD    ffmpeg_g
    libavcodec/libavcodec.a(tiertexseqv.o): In function `seq_decode_op1':
    /root/ffmpeg_sources/ffmpeg/libavcodec/tiertexseqv.c:111: undefined reference to `ff_log2_tab'
    libavcodec/libavcodec.a(xsubdec.o): In function `decode_frame':
    /root/ffmpeg_sources/ffmpeg/libavcodec/xsubdec.c:121: undefined reference to `ff_log2_tab'
    libavcodec/libavcodec.a(xsubenc.o): In function `put_xsub_rle':
    /root/ffmpeg_sources/ffmpeg/libavcodec/xsubenc.c:45: undefined reference to `ff_log2_tab'
    /root/ffmpeg_sources/ffmpeg/libavcodec/xsubenc.c:45: undefined reference to `ff_log2_tab'
    /root/ffmpeg_sources/ffmpeg/libavcodec/xsubenc.c:45: undefined reference to `ff_log2_tab'
    libavcodec/libavcodec.a(aacps.o):/root/ffmpeg_sources/ffmpeg/libavcodec/aacps.c:196: more undefined references to `ff_log2_tab' follow
    collect2: ld returned 1 exit status
    make: *** [ffmpeg_g] Error 1

    can anyone help me for it . thank you in advance