当前位置: 首页 > 知识库问答 >
问题:

压缩视频FFMPEG不起作用

通沛
2023-03-14

我尝试使用FFMPEG和这个库压缩视频:https://github.com/guardianproject/android-ffmpeg-java

public class MainActivity extends Activity {

    private ArrayList<Object> listVideoPaths = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getGalleryVideos();

        File videoFolderFile = new File("/storage/emulated/0/DCIM/Camera/");

        if(videoFolderFile.exists())
            Log.e("TEST FFMPEG", "video folder exist");
        else
            Log.e("TEST FFMPEG", "video folder DON'T exist");


        File videoInputFile = new File(listVideoPaths.get(0).toString());

        if(videoInputFile.exists())
            Log.e("TEST FFMPEG", "video input file exist");
        else
            Log.e("TEST FFMPEG", "video input file DON'T exist");

        File videoOutputFile = new File(videoFolderFile,"output.mp4");

        if(videoOutputFile.exists())
            Log.e("TEST FFMPEG", "video output file exist");
        else
            Log.e("TEST FFMPEG", "video output file DON'T exist");

        FfmpegController ffmpegController;

        try {
            ffmpegController = new FfmpegController(this,videoFolderFile);

            Clip mediaIn = new Clip();

            mediaIn.path = videoInputFile.getAbsolutePath();

            mediaIn.videoFps =  "25";

            ffmpegController.convertToMPEG(mediaIn, videoOutputFile.getAbsolutePath(), new ShellUtils.ShellCallback() {

                @Override
                public void shellOut(String shellLine) {
                    Log.e("TEST FFMPEG", "shellOut - " + shellLine);
                }

                @Override
                public void processComplete(int exitValue) {
                    Log.e("TEST FFMPEG", "proccess complete - " + exitValue);
                }
            });


        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {

            if(videoOutputFile.exists())
                Log.e("TEST FFMPEG", "finished ffmpeg ---> video output file exist");
            else
                Log.e("TEST FFMPEG", "finished ffmpeg ---> video output file DON'T exist");

        }
    }

    private void getGalleryVideos(){

        Cursor videoCursor = null;

        try {

            final String[] columns = { Media.DATA,
                    Media._ID,
                    Media.DATE_ADDED };

            final String orderBy = Media.DATE_ADDED;

            videoCursor = getContentResolver().query(
                    MediaStore.Video.Media.EXTERNAL_CONTENT_URI, columns,
                    null, null, orderBy);

            if (videoCursor != null && videoCursor.getCount() > 0) {

                while (videoCursor.moveToNext()) {

                    int dataColumnIndex = videoCursor
                            .getColumnIndex(Media.DATA);

                    listVideoPaths.add(videoCursor
                            .getString(dataColumnIndex));

                }

            }

            Collections.sort(listVideoPaths,new Comparator());

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (videoCursor != null) {

                if (!videoCursor.isClosed()) {

                    videoCursor.close();

                }

            }

        }

    }

}

共有1个答案

申屠森
2023-03-14

我通过替换以下代码成功地解决了这个问题:

    Clip mediaIn = new Clip();

            mediaIn.path = videoInputFile.getAbsolutePath();

            mediaIn.videoFps = "30";

            mediaIn.videoCodec = "mpeg4";

            mediaIn.width = 640;

            mediaIn.height = 352;

            mediaIn.videoBitrate = 1000;

//            "ffmpeg -y -i /sdcard/DCIM/Camera/VID_20150728_150045662.mp4 " +
//                    "-strict experimental -s 640x352 -r 30 -vcodec mpeg4 -ab 48000 " +
//                    "-ac 2 -ar 22050 -b 1000k /sdcard/DCIM/Camera/output2.mp4";

            ffmpegController.convertToMPEG(mediaIn, videoOutputFile.getAbsolutePath(), new ShellUtils.ShellCallback() {

                @Override
                public void shellOut(String shellLine) {
                    Log.e("TEST FFMPEG", "shellOut - " + shellLine);
                }

                @Override
                public void processComplete(int exitValue) {
                    Log.e("TEST FFMPEG", "proccess complete - " + exitValue);
                }
            });

根据此代码:

Clip clipIn = new Clip(videoInputFile.getAbsolutePath());
            Clip clipOut = new Clip(videoOutputFile.getAbsolutePath());
            clipOut.videoCodec = "mpeg4";
            clipOut.videoFps = "30"; // tailor this to your needs
            clipOut.videoBitrate = 512; // 512 kbps - tailor this to your needs
            clipOut.audioChannels = 1;
            clipOut.width = 640;
            clipOut.height = 352;
            clipOut.duration = 2;
            ffmpegController.processVideo(clipIn, clipOut, true, new ShellUtils.ShellCallback() {
                @Override
                public void shellOut(String shellLine) {
                    Log.e("TEST FFMPEG", "shellOut - " + shellLine);
                }

                @Override
                public void processComplete(int exitValue) {
                    Log.e("TEST FFMPEG", "proccess complete - " + exitValue);
                }
            });
 类似资料:
  • 我正在尝试使用ffmpeg和使用以下命令压缩一个视频。 然而,生成的视频的大小大于原始视频的大小。有没有人可以指出为什么会发生这种情况,如果有其他命令我应该使用。

  • 我集成了。视频压缩工作正常,但除了safari浏览器外,其他浏览器不播放视频。上传到服务器后。我使用了以下命令。 请帮帮我。先谢谢你。

  • 我正在建立一个应用程序,我需要压缩视频之前,上传到服务器。未经压缩的视频约为五分钟,60M,Android视频位2x1024x1024,640*480。现在我正在使用FFMPEG库压缩视频http://androidwarzone.blogspot.co.il/2011/12/ffmpeg4android.html。以下是command commandStr=“ffmpeg-y-i”+url+“-

  • 我试着按照ffmpeg4android库,我得到了压缩视频时的问题,如下面的日志图像。 我使用意图转移到压缩媒体类, 03-13 14:49:45.770:I/FFMPEG4Android(6065):WorkingFolderPath://sdcard/videokit/ 03-13 14:49:45.775:d/ffmpeg4android(6065):工作目录存在,不存在(许可证文件和演示视

  • 我使用laravel famework和我使用ffmpeg PHP库。如果没有找到任何好的链接视频压缩使用ffmpeg。压缩有两种情况。 让我分享第一个案例代码:- 现在,第二个案例正在使用表单上传:- 现在当我进入函数:- 注意:-我不想在一些文件夹上传视频,然后获取视频并压缩视频。请帮助我如何解决这个问题。提前感谢:)

  • 问题内容: 因此,目前我正在使用它来压缩视频: 当我在2秒钟内录制视频时,大小为 4.3 MB ,当我在6秒钟内录制视频时,文件的大小为 9.3 MB 。 有任何减小尺寸的提示吗? 问题答案: 此扩展专注于将其导出到较低质量的设置(在本例中为“中”),并使用容器,而不是iOS偏爱的容器。这可能会导致质量下降,但是您可以在尝试微调输出时尝试使用更高的输出设置和不同的格式。