我正在开发一款Android应用,用户可以在其中录制视频,修剪视频,然后将其上传到我的服务器。我使用MediaRecorder类处理录制并使用ffmpeg修剪录制的视频。与ffmpeg有关的问题是视频在剪裁后总是旋转90度或180度。我知道我可以在ffmpeg命令中添加视频过滤器(transpose = 1)来旋转视频。但这需要重新编码视频。就我而言,我不想重新编码视频,因为它需要太长时间。相反,我有" -vcodec:copy"在ffmpeg命令中使用相同的视频编解码器。
因为我正在为媒体记录器设置方向提示,所以媒体记录器总是添加" rotate = 90"或" rotate = 180"到视频元数据。我认为这就是为什么视频总是被ffmpeg旋转。 所以我想知道是否有一种方法可以旋转视频而无需重新编码。或者,如果有一种方法可以修改录制视频的元数据(旋转),然后再使用ffmpeg进行修剪。
请帮忙!这个问题让我发疯了......
提前致谢!
这是ffmpeg命令:
/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
以下是控制台输出:
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