1

当用户上传视频时,我会制作 2 种尺寸。早些时候,我分两步执行此操作,如下所示

第一个尺寸:

ffmpeg -i in.mp4 -filter:v "scale=iw*min(1170/iw\,300/ih):ih*min(1170/iw\,300/ih), pad=1170:300:(1170-iw*min(1170/iw\,300/ih))/2:(300-ih*min(1170/iw\,300/ih))/2" out.mp4

第二尺寸:

ffmpeg -i in.mp4 -filter:v "scale=iw*min(365/iw\,172/ih):ih*min(365/iw\,172/ih), pad=365:172:(365-iw*min(365/iw\,172/ih))/2:(172-ih*min(365/iw\,172/ih))/2" out1.mp4

但现在为了减少处理时间,我想将这两个步骤合二为一。我已阅读https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs并执行以下命令

ffmpeg -i in.mp4 -filter:v "scale=iw*min(1170/iw\,300/ih):ih*min(1170/iw\,300/ih), pad=1170:300:(1170-iw*min(1170/iw\,300/ih))/2:(300-ih*min(1170/iw\,300/ih))/2" bigVideo.mp4 \ -filter:v "scale=iw*min(365/iw\,172/ih):ih*min(365/iw\,172/ih), pad=365:172:(365-iw*min(365/iw\,172/ih))/2:(172-ih*min(365/iw\,172/ih))/2" smallVideo.mp4

但它给出了以下错误

[NULL @ 0xaee5440] 无法为“-filter:v”-filter:v 找到合适的输出格式:参数无效

那么谁能建议我如何解决它?

4

1 回答 1

0

我尝试使用以下脚本运行这两个命令:

#!/bin/bash
for cmd in "$@"; do {
echo "Process \"$cmd\" started";
$cmd & pid=$!
  PID_LIST+=" $pid";
  } done
  trap "kill $PID_LIST" SIGINT
  echo "Parallel processes have started";
  wait $PID_LIST
  echo
  echo "All processes have completed";

您可以将其保存为 filename.sh 并使其可执行。之后,您需要将另外两个命令作为参数传递,例如我运行为:

./filename.sh "ffmpeg -i input.mp4  -s 720x480 output1.mp4" "ffmpeg -i input.mp4  -s 1170x480 output2.mp4"

你的命令对我来说有点复杂,所以我尝试使用并行脚本运行简单的命令。

于 2016-07-07T12:21:12.933 回答