android - 用于裁剪和转置视频的 FFMPEG 命令放大后质量不佳

标签 android video ffmpeg crop

我正在尝试将尺寸通常为 960x720 的 mp4 视频转换为 sqaure 480:480 视频,但它通常看起来被压扁了,命令是

"-y -i %s -vf crop=480:480,transpose=%d -threads 5 -metadata:s:v rotate=0 -c:v libx264 -crf 27 -preset ultrafast -c:a copy -bsf:a aac_adtstoasc %s";

我是不是遗漏了什么,我需要先缩小比例还是什么?

**编辑添加完整的控制台输出。 ffmpeg 命令已更新,但目标仍然相同,拍摄任意视频并对其进行方形裁剪

07-14 22:30:32.813: D/ffmpeg(30354): -y -i /data/data/com.myapp.app/cache:temp/i7h4ajm0nim1mbcnrqotvrhhsc.mp4 -vf scale=iw*sar:ih,transpose=1 -threads 5 -metadata:s:v rotate=0 -c:v libx264 -crf 27 -preset ultrafast -c:a copy -bsf:a aac_adtstoasc -aspect 1:1 /data/data/com.myapp.app/cache:temp/p1t3bhs0oa3lpqa67g5i9ninm9.ts
07-14 22:30:32.903: D/ffmpeg(30354): new time reamining 9283
07-14 22:30:32.913: D/FFmpeg(30354): Running publishing updates method
07-14 22:30:35.963: D/ffmpeg(30354): WARNING: linker: /data/data/com.myapp.app/files/ffmpeg has text relocations. This is wasting memory and prevents security hardening. Please fix.
07-14 22:30:35.963: D/ffmpeg(30354): ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
07-14 22:30:35.963: D/ffmpeg(30354):   built on Jun  3 2015 21:56:01 with gcc 4.8 (GCC)
07-14 22:30:35.963: D/ffmpeg(30354):   configuration: --target-os=linux --cross-prefix=/Users/Brian1/development/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/Users/Brian1/development/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-small --enable-libx264 --enable-pthreads --disable-muxers --enable-muxer=mpegts --enable-muxer=mp4 --disable-demuxers --enable-demuxer=mpegts --enable-demuxer=mov --enable-demuxer=mpeg --enable-demuxer=mp4 --disable-debug --disable-decoders --enable-decoder=h264 --enable-decoder=aac --disable-devices --disable-encoders --enable-encoder=libx264 --disable-network --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/Users/Brian1/development/ffmpeg-android/ffmpeg-pkg-config --prefix=/Users/Brian1/development/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/Users/Brian1/development/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/Users/Brian1/development/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs=-lm --extra-cxxflags=
07-14 22:30:35.963: D/ffmpeg(30354):   libavutil      54.  7.100 / 54.  7.100
07-14 22:30:35.963: D/ffmpeg(30354):   libavcodec     56.  1.100 / 56.  1.100
07-14 22:30:35.963: D/ffmpeg(30354):   libavformat    56.  4.101 / 56.  4.101
07-14 22:30:35.963: D/ffmpeg(30354):   libavdevice    56.  0.100 / 56.  0.100
07-14 22:30:35.963: D/ffmpeg(30354):   libavfilter     5.  1.100 /  5.  1.100
07-14 22:30:35.963: D/ffmpeg(30354):   libswscale      3.  0.100 /  3.  0.100
07-14 22:30:35.963: D/ffmpeg(30354):   libswresample   1.  1.100 /  1.  1.100
07-14 22:30:35.963: D/ffmpeg(30354):   libpostproc    53.  0.100 / 53.  0.100
07-14 22:30:35.963: D/ffmpeg(30354): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/data/data/com.myapp.app/cache:temp/i7h4ajm0nim1mbcnrqotvrhhsc.mp4':
07-14 22:30:35.963: D/ffmpeg(30354):   Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):     major_brand     : mp42
07-14 22:30:35.963: D/ffmpeg(30354):     minor_version   : 0
07-14 22:30:35.963: D/ffmpeg(30354):     compatible_brands: isommp42
07-14 22:30:35.963: D/ffmpeg(30354):     creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):   Duration: 00:00:02.75, start: 0.000000, bitrate: 9315 kb/s
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p, 960x720, 10062 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       rotate          : 90
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : VideoHandle
07-14 22:30:35.963: D/ffmpeg(30354):     Side data:
07-14 22:30:35.963: D/ffmpeg(30354):       displaymatrix: rotation of -90.00 degrees
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 151 kb/s (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : SoundHandle
07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] using SAR=4/3
07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] using cpu capabilities: none!
07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] profile Constrained Baseline, level 3.1
07-14 22:30:35.963: D/ffmpeg(30354): [adts @ 0xb685b000] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
07-14 22:30:35.963: D/ffmpeg(30354): Output #0, mpegts, to '/data/data/com.myapp.app/cache:temp/p1t3bhs0oa3lpqa67g5i9ninm9.ts':
07-14 22:30:35.963: D/ffmpeg(30354):   Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):     major_brand     : mp42
07-14 22:30:35.963: D/ffmpeg(30354):     minor_version   : 0
07-14 22:30:35.963: D/ffmpeg(30354):     compatible_brands: isommp42
07-14 22:30:35.963: D/ffmpeg(30354):     encoder         : Lavf56.4.101
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:0(eng): Video: h264 (libx264), yuv420p, 720x960 [SAR 4:3 DAR 1:1], q=-1--1, 29.97 fps, 90k tbn, 29.97 tbc (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : VideoHandle
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       rotate          : 0
07-14 22:30:35.963: D/ffmpeg(30354):       encoder         : Lavc56.1.100 libx264
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, 151 kb/s (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : SoundHandle
07-14 22:30:35.963: D/ffmpeg(30354): Stream mapping:
07-14 22:30:35.963: D/ffmpeg(30354):   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
07-14 22:30:35.963: D/ffmpeg(30354):   Stream #0:1 -> #0:1 (copy)
07-14 22:30:35.963: D/ffmpeg(30354): Press [q] to stop, [?] for help
07-14 22:30:35.963: D/ffmpeg(30354): frame=   17 fps=0.0 q=27.0 size=       0kB time=00:00:00.36 bitrate=   0.0kbits/s    
07-14 22:30:35.963: D/ffmpeg(30354): frame=   33 fps= 32 q=27.0 size=     164kB time=00:00:01.15 bitrate=1163.1kbits/s    
07-14 22:30:35.963: D/ffmpeg(30354): frame=   46 fps= 30 q=29.0 size=     213kB time=00:00:01.33 b

最佳答案

您可以试试这个(负责裁剪和缩小尺寸)...

ffmpeg -i input.file -s 480x480 -vf crop=480:480,setdar=1:1,setsar=1:1 output.mp4

-s 将设置比例(视频 Canvas 区域)
crop=480:480 将从中心裁剪.. 如果您需要特定用途:crop=480:480:pos-X:pos-Y
setdar 将设置显示宽高比
setsar 将设置样本纵横比

结果:(屏幕通过 MPC-Home Cinema 抓取MP4剧照)

enter image description here

关于android - 用于裁剪和转置视频的 FFMPEG 命令放大后质量不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042852/

相关文章:

java - fragment 内单选按钮 OnCheckedChangeListener 错误

android - Android 虚拟显示的帧监听器(NDK 内部构建)

java - 在 ISO-8559-1 和 cp1251 之间转换

android - 如何检测android中录制视频的方向

c# - 在 Windows Phone 7 上创建视频文件

ffmpeg - ffmpeg 不支持 icod 吗?我应该从哪里开始挖掘问题?

android - HTML5 视频 - 在 Android 设备上精确寻找帧?

java - 安卓开发 : Navigation View vs App Bar

css - 如何从 HTML 播放 Facebook 视频?

ffmpeg - 使用 ffserver 通过 RTSP 传输 MP4 文件