使用 ffmpeg 进行视频填充

使用 ffmpeg 进行视频填充

我正在尝试使用 ffmpeg 的填充选项,但出现了错误。

我正在关注本教程。错误如下:

ffmpeg version git-2013-11-13-129af66 Copyright (c) 2000-2013 the FFmpeg developers
built on Nov 13 2013 16:40:26 with gcc 4.4.3 (GCC)
configuration: --arch=arm --target-os=linux --enable-cross-compile --cross-prefix=/Users/sunitha/Downloads/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi- --prefix=../build --sysroot=/Users/sunitha/Downloads/android-ndk/platforms/android-9/arch-arm --extra-cflags=' -I/Users/sunitha/Downloads/android-ndk/platforms/android-9/arch-arm/usr/include -I/Users/sunitha/Downloads/full_ffmpeg/ffmpeg-android/libmp3lame/include -DANDROID -marm -march=armv6 ' --extra-ldflags=' -L/Users/sunitha/Downloads/android-ndk/platforms/android-9/arch-arm/usr/lib -L/Users/sunitha/Downloads/full_ffmpeg/ffmpeg-android/libmp3lame/lib' --disable-debug --enable-libmp3lame --disable-ffplay --disable-ffprobe --disable-ffserver --enable-avfilter --enable-decoders --enable-demuxers --enable-encoders --enable-filters --enable-indevs --enable-network --enable-parsers --enable-protocols --enable-swscale --enable-gpl --enable-nonfree
libavutil      52. 39.100 / 52. 39.100  
libavcodec     55. 18.102 / 55. 18.102  
libavformat    55. 12.102 / 55. 12.102  
libavdevice    55.  3.100 / 55.  3.100  
libavfilter     3. 80.100 /  3. 80.100  
libswscale      2.  3.100 /  2.  3.100  
libswresample   0. 17.102 /  0. 17.102  
libpostproc    52.  3.100 / 52.  3.100
Unrecognized option 'padtop 120'.
Error splitting the argument list: Option not found

答案1

尝试以下方法:

 ffmpeg -i input.avi -vf "pad=width=640:height=480:x=0:y=120:color=black" output.avi  

视频滤镜语法是使用填充的新方法。此处视频输出宽度和高度为 640x480,图像放置在距顶部 120 像素、距左侧 0 像素的位置。要计算出您的确切尺寸,只需应用相同的原则即可。

查看pad视频滤镜文档以了解更多详细信息。

答案2

我很难裁剪和填充视频,而且我找不到适合我的情况的答案,无法用完整而简单的语言解释这一点。下面是我所做的。我有一个 1920(高)x1080(宽)的视频。我想从高度裁剪上方/下方并保持中心 - 从 1920 变为 1080。然后,通过创建填充将裁剪后的视频置于中心,使宽度从 1080 变为 1920。 在此处输入图片描述

完整命令:

ffmpeg -hwaccel vaapi -hwaccel_output_format yuv420p -vaapi_device /dev/dri/renderD128 -i myvid.mp4 -vf "crop=in_w:in_h-840, pad=1920:1080:ow/2:0:color=red, format=nv12, hwupload" -c:v hevc_vaapi -rc_mode CQP -global_quality 18 sample3sec_crop_with_REDpad_1920_1080.mp4

解释:

裁剪=in_w:in_h-840

  • 要从高度裁剪 840 像素,如果未指定 x、y,ffmpeg 会将视频“置于”中心并从视频上方和下方裁剪 420。因此,高度为 1920 的视频将变为高度为 1920-840=1080,裁剪发生在上方/下方。

垫=1920:1080:ow/2:0

  • 然后为视频创建填充,以便宽度达到 1920 像素(从 1080 开始)。最终视频的尺寸将是您在 PAD 中设置的任何尺寸:“1920:1080”= 宽度 x 高度。
  • 然后 ow/2:0 表示“将视频放在输出宽度(ow)的中心(一半距离),然后放在高度的“0”起点(将视频放在顶部 - 天花板)。

“-hwaccel vaapi-hwaccel_output_format yuv420p-vaapi_device /dev/dri/renderD128”

  • 如果存在 GPU,这些选项用于硬件加速

pad=1920:1080:ow/2:0:color=红色

  • 确保 PAD 颜色是一些鲜艳的颜色,以检查结果是否正常。
  • 警告,检查视频播放器的“适合屏幕的视频”选项。
  • 对于我来说,ffplay 在编码之前显示裁剪/填充结果根本不准确。

“-ss 0:00:00-至 00:00:03”

  • 从完整长度的视频中抽取 3 秒样本,看看结果是否满意。在没有快速现代 CPU/GPU 的旧机器上,大型视频可能需要数小时。

相关内容