我正在使用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
答案 0 :(得分:2)
一直都在那里,我只需要使用它,
if (out.videoFilter != null)
{
cmd.add("-vf");
cmd.add(out.videoFilter);
}
像这样使用
clip_out.videoFilter = "transpose=1";