使用Android ffmpeg Library进行视频旋转

时间:2014-09-12 03:26:22

标签: android ffmpeg

我正在使用Android ffmpeg Library,图书馆工作正常,我唯一的问题是视频是旋转的。原始视频旋转了90度,我尝试了很多选项,将它们添加到下面的库函数中,注释代码是我尝试的样本,我尝试了很多其他选项,但没有一个是有效的。

你们中的任何人都让它上班了吗?

    public void processVideo(Clip in, Clip out, boolean enableExperimental, ShellCallback sc) throws Exception {

        ArrayList<String> cmd = new ArrayList<String>();

        cmd.add(mFfmpegBin);
//      cmd.add("-vf \"transpose=1\"");Not working
//      cmd.add(" -vfilters \"rotate=90\"");Not working
        cmd.add("-y");

        if (in.format != null)
        {
            cmd.add(Argument.FORMAT);
            cmd.add(in.format);
        }

        if (in.videoCodec != null)
        {
            cmd.add(Argument.VIDEOCODEC);
            cmd.add(in.videoCodec);
        }

        if (in.audioCodec != null)
        {
            cmd.add(Argument.AUDIOCODEC);
            cmd.add(in.audioCodec);
        }

        cmd.add("-i");
        cmd.add(new File(in.path).getCanonicalPath());

        if (out.videoBitrate > 0)
        {
            cmd.add(Argument.BITRATE_VIDEO);
            cmd.add(out.videoBitrate + "k");
        }

        if (out.width > 0)
        {
            cmd.add(Argument.SIZE);
            cmd.add(out.width + "x" + out.height);

        }
        if (out.videoFps != null)
        {
            cmd.add(Argument.FRAMERATE);
            cmd.add(out.videoFps);
        }

        if (out.videoCodec != null)
        {
            cmd.add(Argument.VIDEOCODEC);
            cmd.add(out.videoCodec);
        }

        if (out.videoBitStreamFilter != null)
        {
            cmd.add(Argument.VIDEOBITSTREAMFILTER);
            cmd.add(out.videoBitStreamFilter);
        }


        if (out.videoFilter != null)
        {
            cmd.add("-vf");
            cmd.add(out.videoFilter);
        }

        if (out.audioCodec != null)
        {
            cmd.add(Argument.AUDIOCODEC);
            cmd.add(out.audioCodec);
        }

        if (out.audioBitStreamFilter != null)
        {
            cmd.add(Argument.AUDIOBITSTREAMFILTER);
            cmd.add(out.audioBitStreamFilter);
        }
        if (out.audioChannels > 0)
        {
            cmd.add(Argument.CHANNELS_AUDIO);
            cmd.add(out.audioChannels+"");
        }

        if (out.audioBitrate > 0)
        {
            cmd.add(Argument.BITRATE_AUDIO);
            cmd.add(out.audioBitrate + "k");
        }

        if (out.format != null)
        {
            cmd.add("-f");
            cmd.add(out.format);
        }

        if (enableExperimental)
        {
            cmd.add("-strict");
            cmd.add("-2");//experimental
        }
//      cmd.add("-metadata:s:v rotate=\"0\"");Not working
//      cmd.add("rotate=\"0\""); Not working

        cmd.add(new File(out.path).getCanonicalPath());

        execFFMPEG(cmd, sc);

    }

我正在使用它btw,

FfmpegController fc = new FfmpegController(this, fileTmp);

clip_out.videoFps = "30";
clip_out.width = 480;
clip_out.height = 320;
clip_out.videoCodec = "mpeg4";
clip_out.audioCodec = "copy";
clip_out.videoBitrate = 450;

     fc.processVideo(clip_in, clip_out, false, new ShellUtils.ShellCallback()  

有关编译的信息,

/data/data/com.example.testffmpeg/app_bin/ffmpeg -filters 
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
 built on Nov 15 2013 00:50:10 with gcc 4.6 20120106 (prerelease)
configuration: --arch=arm --cpu=cortex-a8 --target-os=linux --enable-runtime-cpudetect --enable-small --prefix=/data/data/info.guardianproject.ffmpeg/app_opt --enable-pic --disable-shared --enable-static --cross-prefix=/home/n8fr8/dev/android/ndk//toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --sysroot=/home/n8fr8/dev/android/ndk//platforms/android-3/arch-arm --extra-cflags='-I../x264 -mfloat-abi=softfp -mfpu=neon' --extra-ldflags=-L../x264 --enable-version3 --enable-gpl --disable-doc --enable-yasm --enable-decoders --enable-encoders --enable-muxers --enable-demuxers --enable-parsers --enable-protocols --enable-filters --enable-avresample --enable-libfreetype --disable-indevs --enable-indev=lavfi --disable-outdevs --enable-hwaccels --enable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-network --enable-libx264 --enable-zlib --enable-muxer=md5

1 个答案:

答案 0 :(得分:2)

一直都在那里,我只需要使用它,

if (out.videoFilter != null)
{
    cmd.add("-vf");
    cmd.add(out.videoFilter);
}

像这样使用

clip_out.videoFilter = "transpose=1";