0

I'm developing an android app, in which users can record a video, trim it, and then upload it to my server. I'm using the MediaRecorder class to handle the recording and using ffmpeg to trim the recorded video. The problem I'm having with ffmpeg is that the video is always getting rotated either 90 or 180 degrees after being trimmed. I know I can add a video filter (transpose=1) within the ffmpeg command to rotate the video. But that will require re-encoding the video. In my case, I don't want to re-encode the video,as it takes too long. Instead, I'm having "-vcodec:copy" within ffmpeg command to use the same video codec.

Because I'm setting an orientation hint to the media recorder, the media recorder always adds "rotate=90" or "rotate=180" to the video metadata. I think that's why the video is always getting rotated by ffmpeg. So I was wondering if there is a way to rotate the video without re-encoding it. Or if there is a way to modify the metadata(rotate) of a recorded video before trimming it with ffmpeg.

Please help! The problem has been driving me crazy...

Thanks in advance!

Here is the ffmpeg command:

/data/data/com.xxx.xxx/app_bin/ffmpeg -y -ss 00:00:00 -t 4.000000 -i    file:/storage/sdcard0/Movies/xxx/vid.mp4 -vcodec copy -acodec copy -metadata:s:v:0 rotate=0 -  strict -2 file:/storage/sdcard0/Movies/xxx/vid_new.mp4

Below is the console output:

I/ShellCallback : shellOut()(9781): ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
I/ShellCallback : shellOut()(9781):   built on Nov 15 2013 00:50:10 with gcc 4.6 20120106 (prerelease)
I/ShellCallback : shellOut()(9781):   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
I/ShellCallback : shellOut()(9781):   libavutil      51. 54.100 / 51. 54.100
I/ShellCallback : shellOut()(9781):   libavcodec     54. 23.100 / 54. 23.100
I/ShellCallback : shellOut()(9781):   libavformat    54.  6.100 / 54.  6.100
I/ShellCallback : shellOut()(9781):   libavdevice    54.  0.100 / 54.  0.100
I/ShellCallback : shellOut()(9781):   libavfilter     2. 77.100 /  2. 77.100
I/ShellCallback : shellOut()(9781):   libswscale      2.  1.100 /  2.  1.100
I/ShellCallback : shellOut()(9781):   libswresample   0. 15.100 /  0. 15.100
I/ShellCallback : shellOut()(9781):   libpostproc    52.  0.100 / 52.  0.100
I/ShellCallback : shellOut()(9781): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file:/storage/sdcard0/Movies/xxx/vid.mp4':
I/ShellCallback : shellOut()(9781):   Metadata:
I/ShellCallback : shellOut()(9781):     major_brand     : isom
I/ShellCallback : shellOut()(9781):     minor_version   : 0
I/ShellCallback : shellOut()(9781):     compatible_brands: isom3gp4
I/ShellCallback : shellOut()(9781):     creation_time   : 2014-09-17 17:25:50
I/ShellCallback : shellOut()(9781):   Duration: 00:00:04.69, start: 0.000000, bitrate: 2969 kb/s
I/ShellCallback : shellOut()(9781):     Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p, 720x480, 2989 kb/s, 29.89 fps, 30 tbr, 90k tbn, 180k tbc
I/ShellCallback : shellOut()(9781):     Metadata:
I/ShellCallback : shellOut()(9781):       rotate          : 90
I/ShellCallback : shellOut()(9781):       creation_time   : 2014-09-17 17:25:50
I/ShellCallback : shellOut()(9781):       handler_name    : VideoHandle
I/ShellCallback : shellOut()(9781):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, s16, 128 kb/s
I/ShellCallback : shellOut()(9781):     Metadata:
I/ShellCallback : shellOut()(9781):       creation_time   : 2014-09-17 17:25:50
I/ShellCallback : shellOut()(9781):       handler_name    : SoundHandle
I/ShellCallback : shellOut()(9781): Output #0, mp4, to 'file:/storage/sdcard0/Movies/xxx/vid_new.mp4':
I/ShellCallback : shellOut()(9781):   Metadata:
I/ShellCallback : shellOut()(9781):     major_brand     : isom
I/ShellCallback : shellOut()(9781):     minor_version   : 0
I/ShellCallback : shellOut()(9781):     compatible_brands: isom3gp4
I/ShellCallback : shellOut()(9781):     creation_time   : 2014-09-17 17:25:50
I/ShellCallback : shellOut()(9781):     encoder         : Lavf54.6.100
I/ShellCallback : shellOut()(9781):     Stream #0:0(eng): Video: h264 (![0][0][0] / 0x0021), yuv420p, 720x480, q=2-31, 2989 kb/s, 29.89 fps, 90k tbn, 90k tbc
I/ShellCallback : shellOut()(9781):     Metadata:
I/ShellCallback : shellOut()(9781):       handler_name    : VideoHandle
I/ShellCallback : shellOut()(9781):       creation_time   : 2014-09-17 17:25:50
I/ShellCallback : shellOut()(9781):       rotate          : 0
I/ShellCallback : shellOut()(9781):     Stream #0:1(eng): Audio: aac (@[0][0][0] / 0x0040), 44100 Hz, mono, 128 kb/s
I/ShellCallback : shellOut()(9781):     Metadata:
I/ShellCallback : shellOut()(9781):       creation_time   : 2014-09-17 17:25:50
I/ShellCallback : shellOut()(9781):       handler_name    : SoundHandle
I/ShellCallback : shellOut()(9781): Stream mapping:
I/ShellCallback : shellOut()(9781):   Stream #0:0 -> #0:0 (copy)
I/ShellCallback : shellOut()(9781):   Stream #0:1 -> #0:1 (copy)
I/ShellCallback : shellOut()(9781): Press [q] to stop, [?] for help
I/ShellCallback : shellOut()(9781): frame=  120 fps=0.0 q=-1.0 Lsize=    1530kB time=00:00:03.98 bitrate=3147.1kbits/s    
I/ShellCallback : shellOut()(9781): video:1462kB audio:62kB global headers:0kB muxing overhead 0.329934%
I/ShellCallback : shellOut()(9781): ret 0, stream_spec v:0
Vaeianor
  • 161
  • 1
  • 4
  • 15
  • possible duplicate of _[Can I set rotation field for a video stream with FFmpeg?](http://stackoverflow.com/questions/15335073/can-i-set-rotation-field-for-a-video-stream-with-ffmpeg)_ – Alex Cohn Sep 17 '14 at 16:38
  • I wasn't be able to use the latest ffmpeg, as it always gave me some errors : ...app_bin/ffmpeg[1]:syntax error: "(" unexpected . The version that I'm using is 0.11.1 – Vaeianor Sep 17 '14 at 16:48
  • You would have to provide the actual `ffmpeg` command and the complete console output for any of us to try to figure out the issue. – llogan Sep 17 '14 at 18:22

0 Answers0