2014-09-12 3 views
0

J'utilise Android ffmpeg Library, La bibliothèque fonctionne correctement, le seul problème que j'ai est que la vidéo est tournée. La vidéo originale est tournée de 90 degrés, j'ai essayé beaucoup d'options en les ajoutant à la fonction de bibliothèque ci-dessous, le code commenté est un échantillon de ce que j'ai essayé, j'ai essayé beaucoup d'autres options mais aucune ne fonctionne.Rotation vidéo à l'aide de la bibliothèque ffmpeg Android

N'importe qui d'entre vous l'a eu au travail?

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); 

    } 

Voici comment je l'utilise 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() 

Informations sur la compilation,

/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 

Répondre

2

Il a toujours été là, je viens d'avoir à l'utiliser,

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

l'utiliser comme si

clip_out.videoFilter = "transpose=1"; 
Questions connexes