
我下载了一个带有一些黑条(左和右)的视频,因此我在 FFmpeg 中使用以下命令对其进行裁剪,然后调整其大小。我在 10 秒的剪辑上进行了测试,以查看结果会是什么样子。(我使用了一个使用 GUI 的 Android 版 FFmpeg,因此命令中指定输入文件和输出文件的部分与命令分开处理。)
-ss 00:04:44 -to 00:04:54 -vf "crop=1870:20:20:0","scale=640x480:flags=lanczos"
原始视频是 h264 mp4,分辨率为 1920 x 1080。生成的剪辑应该是 h265 mp4,分辨率(裁剪然后调整大小)为 640 x 480。相反,它的最终分辨率到处都是,取决于我用什么来检查它。
- 媒体信息(Android)= 640 x 480(实际高 8,用黑条填充高度至 480)
- VLC(Android)640 x 480(实际高度为 8,用黑条填充高度至 480)
- 照片编辑器(Android)= 44880 x 480
我有一个链接,任何想直接查看的人都可以查看。(它只有 401.61 kb。)
https://www.mediafire.com/file/j45w8527f83yeq9/Barbie_%25280480%252CRESULT%2529.7z/file
我以前尝试过使用 FFmpeg,但它从来没有做过如此疯狂的事情。
这是 FFmpeg 的日志文件。是什么导致了这个糟糕的结果(以便我将来可以避免它)?此外,我如何实现所需的结果(如果可能的话,一次通过,因为我不确定 FFmpeg 的 GUI 版本是否可以执行两次操作)?
ffmpeg -hwaccel auto -y -i "/storage/emulated/0/bluetooth/Barbie (1080,ORIGINAL).mp4" -ss 00:04:44 -to 00:04:54 -vf "crop=1870:20:20:0","scale=640x480:flags=lanczos" "/storage/emulated/0/Movies/Barbie (0480,RESULT).mp4"
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 4.9.x (GCC) 20150123 (prerelease)
configuration: --enable-version3 --enable-gpl --enable-nonfree --disable-indev=v4l2 --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libvpx --enable-libvorbis --enable-libtheora --enable-libopus --enable-libfdk-aac --enable-libfreetype --enable-libass --enable-libfribidi --enable-fontconfig --enable-pthreads --enable-libxvid --enable-filters --enable-openssl --enable-librtmp --disable-protocol='udp,udplite' --enable-libopencore-amrwb --enable-libopencore-amrnb --enable-libvo-amrwbenc --enable-libspeex --enable-libsoxr --enable-libwebp --enable-libxml2 --enable-libopenh264 --enable-jni --prefix=/home/silentlexx/AndroidstudioProjects/ffmpeg/ffmpeg/build/arm-api18-r13b --sysroot=/home/silentlexx/Android/android-ndk-r13b/platforms/android-18/arch-arm --arch=arm --disable-shared --enable-static --enable-pic --enable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffnvcodec --disable-avdevice --disable-debug --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-symver --cross-prefix=/home/silentlexx/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --target-os=android --enable-cross-compile --pkg-config-flags=--static --extra-libs='-lgnustl_static -lm -lpng -l:libz.so -lpthread' --enable-asm --enable-neon --enable-small
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/bluetooth/Barbie (1080,ORIGINAL).mp4':
Metadata:
major_brand : mp42
minor_version : 512
compatible_brands: mp41isomiso2
creation_time : 2024-01-04T01:46:07.000000Z
Duration: 00:45:33.10, start: 0.000000, bitrate: 3404 kb/s
Stream #0:0[0x1](und): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 3272 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
creation_time : 2023-06-25T13:25:03.000000Z
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2023-06-25T13:25:03.000000Z
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 0xf6786180] using SAR=561/8
[libx264 @ 0xf6786180] using cpu capabilities: ARMv6 NEON
[libx264 @ 0xf6786180] profile High, level 3.0, 4:2:0, 8-bit
[libx264 @ 0xf6786180] 264 - core 158 r2984 3759fcb - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/storage/emulated/0/Movies/Barbie (0480,RESULT).mp4':
Metadata:
major_brand : mp42
minor_version : 512
compatible_brands: mp41isomiso2
encoder : Lavf60.3.100
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x480 [SAR 561:8 DAR 187:2], q=2-31, 30 fps, 15360 tbn (default)
Metadata:
creation_time : 2023-06-25T13:25:03.000000Z
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2023-06-25T13:25:03.000000Z
vendor_id : [0][0][0][0]
encoder : Lavc60.3.100 aac
frame= 0 fps=0.0 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s speed=N/A
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.30 bitrate= 1.3kbits/s speed=0.00485x
frame= 0 fps=0.0 q=0.0 size= 0kB time=00:00:00.71 bitrate= 0.5kbits/s speed=0.0115x
frame= 16 fps=0.3 q=29.0 size= 0kB time=00:00:01.60 bitrate= 0.2kbits/s speed=0.0253x
frame= 51 fps=0.8 q=29.0 size= 0kB time=00:00:02.76 bitrate= 0.1kbits/s speed=0.0433x
frame= 89 fps=1.4 q=29.0 size= 0kB time=00:00:04.04 bitrate= 0.1kbits/s speed=0.0628x
frame= 125 fps=1.9 q=29.0 size= 0kB time=00:00:05.22 bitrate= 0.1kbits/s speed=0.0806x
frame= 155 fps=2.4 q=29.0 size= 0kB time=00:00:06.22 bitrate= 0.1kbits/s speed=0.0952x
frame= 188 fps=2.9 q=29.0 size= 0kB time=00:00:07.33 bitrate= 0.1kbits/s speed=0.111x
frame= 219 fps=3.3 q=29.0 size= 256kB time=00:00:08.40 bitrate= 249.5kbits/s speed=0.127x
frame= 244 fps=3.6 q=29.0 size= 256kB time=00:00:09.72 bitrate= 215.6kbits/s speed=0.145x
frame= 300 fps=4.5 q=-1.0 Lsize= 410kB time=00:00:09.98 bitrate= 336.0kbits/s speed=0.148x
video:239kB audio:159kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 2.896691%
[libx264 @ 0xf6786180] frame I:11 Avg QP:18.89 size: 2003
[libx264 @ 0xf6786180] frame P:143 Avg QP:20.31 size: 1034
[libx264 @ 0xf6786180] frame B:146 Avg QP:21.79 size: 509
[libx264 @ 0xf6786180] consecutive B-frames: 24.3% 25.3% 21.0% 29.3%
[libx264 @ 0xf6786180] mb I I16..4: 24.5% 74.7% 0.8%
[libx264 @ 0xf6786180] mb P I16..4: 15.5% 15.1% 0.0% P16..4: 12.3% 2.0% 0.2% 0.0% 0.0% skip:54.9%
[libx264 @ 0xf6786180] mb B I16..4: 2.3% 0.9% 0.0% B16..8: 24.2% 1.4% 0.0% direct: 0.7% skip:70.6% L0:43.8% L1:55.4% BI: 0.8%
[libx264 @ 0xf6786180] 8x8 transform intra:52.4% inter:99.4%
[libx264 @ 0xf6786180] coded y,uvDC,uvAC intra: 6.9% 15.3% 0.8% inter: 1.5% 5.2% 0.0%
[libx264 @ 0xf6786180] i16 v,h,dc,p: 92% 2% 2% 4%
[libx264 @ 0xf6786180] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 78% 1% 21% 0% 0% 0% 0% 0% 0%
[libx264 @ 0xf6786180] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 74% 1% 21% 1% 1% 2% 0% 1% 0%
[libx264 @ 0xf6786180] i8c dc,h,v,p: 45% 2% 52% 1%
[libx264 @ 0xf6786180] Weighted P-Frames: Y:0.7% UV:0.0%
[libx264 @ 0xf6786180] ref P L0: 59.2% 5.3% 25.7% 9.6% 0.2%
[libx264 @ 0xf6786180] ref B L0: 77.2% 19.8% 3.0%
[libx264 @ 0xf6786180] ref B L1: 97.0% 3.0%
[libx264 @ 0xf6786180] kb/s:195.34
[aac @ 0xf6786880] Qavg: 457.489
答案1
最后,成功了。在分析了我尝试裁剪的尝试后,我意识到我的旧裁剪命令正在将其高度裁剪为 20。我犯了这个错误,真令人尴尬,因为我收集了有关如何在 FFmpeg 中执行某些操作的信息的文本文件中对该命令进行了正确的解释。不管怎样。至少用 10 秒的剪辑进行测试为我节省了一些时间。完成我尝试执行的操作的正确命令是这个,它给了我想要的结果。
-ss 00:04:44 -to 00:04:54 -vf "crop=1870:1080:22:0","scale=640x480:flags=lanczos","setsar=1"
感谢所有帮助过我的人(Gyan 和 Rotem)。顺便问一下,我如何将答案/评论标记为首选答案?(我假设左侧的“向上箭头按钮”是可用的,但我对这种事情还不熟悉。)