Recherche avancée

Médias (1)

Mot : - Tags -/epub

Autres articles (66)

Sur d’autres sites (14161)

  • ProcessBuilder is not called when trying to start a process

    15 juin 2022, par xnok

    I am trying to understand more about the ffmpeg usage in JavaCV for android studio and for said task I am trying to use ProcessBuilder. I tried writting a simple program to debug the pb.start(); Although, I am not getting a response. What I did was to start a default/empty activity and pasted the following program :

    


    package com.example.myapplication;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;

import org.bytedeco.javacpp.Loader;

import android.os.Build;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    static final int cols = 192;
    static final int rows = 108;
    static final String ffmpeg = Loader.load(org.bytedeco.ffmpeg.ffmpeg.class);
    static final String rtmp_url = "test.flv";
    static final String[] command = {ffmpeg,
            "-y",
            "-f", "rawvideo",
            "-vcodec", "rawvideo",
            "-pix_fmt", "bgr24",
            "-s", (Integer.toString(cols) + "x" + Integer.toString(rows)),
            "-r", "10",
            "-i", "pipe:",
            "-c:v", "libx264",
            "-pix_fmt", "yuv420p",
            "-preset", "ultrafast",
            "-f", "flv",
            rtmp_url};
    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread(t1).start();

    }
    private static Runnable t1 = () -> {
        Log.e("TAG", "void OnCreate called successfully!");
        ProcessBuilder pb = new ProcessBuilder(command).redirectErrorStream(true);
        pb.redirectErrorStream(true);
        try {
            Process process = pb.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            OutputStream writer = process.getOutputStream();
            Log.e("TAG", "Something good happened here");
        } catch (IOException e) {
            e.printStackTrace();
            Log.e("TAG", "Nothing good happened here");
        }
    };


}


    


    My current problem is that I can't seem to start properly the processBuilder process via pb.start() ;

    


    I get the following logs from the logcat panel :

    


    2022-06-14 17:24:46.328 13371-13371/com.example.myapplication E/TAG: void OnCreate called successfully!
2022-06-14 17:24:46.333 13371-13371/com.example.myapplication E/TAG: Nothing good happened here


    


    I'd like to understand why is it skipping the try/catch block and not starting the process ?

    


    EDIT : I made some changes as per @g00se's suggestions and I got the following stack trace from the code above :

    


    2022-06-15 00:32:26.700 29787-29787/? E/USNET: USNET: appName: com.example.myapplication
2022-06-15 00:32:29.328 29787-29828/com.example.myapplication E/TAG: void OnCreate called successfully!
2022-06-15 00:32:29.330 29787-29828/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    Process: com.example.myapplication, PID: 29787
    java.lang.NullPointerException
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1012)
        at com.example.myapplication.MainActivity.lambda$static$0(MainActivity.java:48)
        at com.example.myapplication.MainActivity$$ExternalSyntheticLambda0.run(Unknown Source:0)
        at java.lang.Thread.run(Thread.java:920)


    


  • avformat/dhav : fix backward scanning for get_duration and optimize seeking

    21 mars, par Justin Ruggles
    avformat/dhav : fix backward scanning for get_duration and optimize seeking
    

    The backwards scanning done for incomplete final packets should not
    assume a specific alignment at the end of the file. Truncated files
    result in hundreds of thousands of seeks if the final packet does not
    fall on a specific byte boundary, which can be extremely slow.
    For example, with HTTP, each backwards seek results in a separate
    HTTP request.

    This changes the scanning to check for the end tag 1 byte at a time
    and buffers the last 1 MiB to avoid additional seek operations.

    Co-authored-by : Derek Buitenhuis <derek.buitenhuis@gmail.com>
    Signed-off-by : Justin Ruggles <justinr@vimeo.com>
    Signed-off-by : Derek Buitenhuis <derek.buitenhuis@gmail.com>

    • [DH] libavformat/dhav.c
  • ffmpeg : Converting animated GIF files to video while upscaling produces a file with inaccurate colors

    14 juin 2020, par Metamoran

    I apologize if this is a dumb question, but even after using the search function I have not seen anyone asking about this.

    &#xA;&#xA;

    I'm trying to both &#xA;(1) : Convert some low-resolution animated GIF files (pixel art in particular) to video, and&#xA;(2) : Upscale them at the same time, using nearest-neighbor to preserve the hard edges.

    &#xA;&#xA;

    ffmpeg does everything with no warnings or errors whatsoever, but the end result's colors look off. If I convert without upscaling, the color accuracy is preserved. I have tried both using and NOT using "palettegen", but it does not make a difference. For brevity, I'm only pasting the lines with palettegen in them. The end results are the same either way.

    &#xA;&#xA;

    This is what I've been using for upscaling :

    &#xA;&#xA;

    ffmpeg -i input.gif -c:v libx264 -b:v 10000K -y -vf "split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse,scale=2*iw:2*ih:flags=neighbor" output.mp4&#xA;

    &#xA;&#xA;

    This is what I used for testing conversion (with no upscaling) :

    &#xA;&#xA;

    ffmpeg -i input.gif -c:v libx264 -b:v 10000K -y -vf "split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.mp4&#xA;

    &#xA;&#xA;

    Here's the input file :

    &#xA;&#xA;

    Original animated GIF file

    &#xA;&#xA;

    Here's a screenshot of how the final video looks if I don't upscale (colors look exactly like in the input file) :

    &#xA;&#xA;

    Screenshot - Final - No Upscaling

    &#xA;&#xA;

    And here's the result if I upscale (2x Nearest-Neighbor upscaling, with the screenshot downsized 50% to make comparison easier. Colors were not altered during the process.) :

    &#xA;&#xA;

    Screenshot - Final - 2x Upscaling (Nearest-Neighbor) [Downsized]

    &#xA;&#xA;

    Folder with all relevant files :&#xA;Google Drive

    &#xA;&#xA;

    Is there something I'm missing ? Or is there some sort of technical limitation, a step that will alter the colors of the video no matter what I try ? I'm not technically inclined, I'd like to know if that is the case. Thank you for your time.

    &#xA;