You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg使用sendcmd滤镜实现动态视频裁剪的正确语法咨询

解决FFmpeg sendcmd滤镜动态裁剪视频参数失效问题

我尝试用FFmpeg的sendcmd滤镜,根据文本文件指定的坐标动态裁剪1920x1080的视频为607x1080的竖屏(仅x坐标随时间变化,w、h、y固定),但裁剪命令未正常生效,以下是两种尝试的情况及最终解决方案:

尝试1:参考官方文档写法(无任何效果)

coordinates.txt内容:

0.05 [enter] crop w=607:h=1080:x=0:y=0;
0.11 [enter] crop w=607:h=1080:x=0:y=0;
...

FFmpeg命令:

ffmpeg -i '10s.mp4' -filter_complex "[0:v]sendcmd=f=coordinates.txt" -c:v libx264 -c:a copy -r 30 output.mp4

执行后视频无任何裁剪效果。

尝试2:参考Stack Overflow回答写法(参数部分失效)

coordinates.txt内容:

0.05    crop w 607, crop h 1080, crop x 0, crop y 0;
0.11    crop w 607, crop h 1080, crop x 0, crop y 0;
...

FFmpeg命令:

ffmpeg -i '10s.mp4' -filter_complex "[0:v]sendcmd=f=coordinates.txt,crop" -c:v libx264 -c:a copy -r 30 output.mp4

执行后仅x坐标生效,w、h、y参数未生效,裁剪区域异常偏右。

补充信息

使用FFmpeg 6.0版本,编译配置如下:

ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --prefix=/home/ffmpeg-builder/release --pkg-config-flags=--static --extra-libs=-lm --disable-doc --disable-debug --disable-shared --disable-ffprobe --enable-static --enable-gpl --enable-version3 --enable-runtime-cpudetect --enable-avfilter --enable-filters --enable-nvenc --enable-nvdec --enable-cuvid --toolchain=hardened --disable-stripping --enable-opengl --pkgconfigdir=/home/ffmpeg-builder/release/lib/pkgconfig --extra-cflags='-I/home/ffmpeg-builder/release/include -static-libstdc++ -static-libgcc ' --extra-ldflags='-L/home/ffmpeg-builder/release/lib -fstack-protector -static-libstdc++ -static-libgcc ' --extra-cxxflags=' -static-libstdc++ -static-libgcc ' --extra-libs='-ldl -lrt -lpthread' --enable-ffnvcodec --enable-gmp --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libkvazaar --enable-libmp3lame --enable-libopus --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libshine --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtheora --enable-libvidstab --ld=g++ --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-openssl --enable-zlib --enable-nonfree --extra-libs=-lpthread --enable-pthreads --extra-libs=-lgomp

正确配置方案

1. 修正coordinates.txt格式

sendcmd控制crop时,采用滤镜名 参数名 参数值的格式,固定参数仅需在初始时间点设置一次,后续仅更新变化的x参数:

# 初始帧设置固定裁剪参数
0.0 crop w 607, crop h 1080, crop y 0;
# 后续时间点仅更新x坐标(替换[新x值]为实际数值)
0.05 crop x 0;
0.11 crop x 100;
0.18 crop x 200;
...

注意:参数间用逗号分隔,行尾加半角分号,时间戳与命令间用制表符或空格分隔。

2. 修正FFmpeg命令

需确保crop滤镜在sendcmd之后,且给crop设置初始占位参数(sendcmd会动态覆盖):

ffmpeg -i '10s.mp4' -filter_complex "[0:v]sendcmd=f=coordinates.txt,crop=w=1:h=1:x=0:y=0" -c:v libx264 -c:a copy -r 30 output.mp4

解释:crop的初始参数仅作为占位,sendcmd的指令会实时替换这些参数,确保crop滤镜正确接收动态配置。

3. 关键注意事项

  • FFmpeg 6.0中sendcmd的命令格式已更新,不再支持旧版的[enter] crop w=xxx写法,需使用crop 参数名 参数值格式。
  • x坐标取值需在有效范围:原视频宽1920,裁剪宽607,所以x最大值为1920-607=1313,超出会导致裁剪区域异常。
  • 固定参数无需重复设置,减少配置冗余的同时避免潜在的参数冲突。

内容的提问来源于stack exchange,提问作者Sulli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:13:13