如何使用 ffmpeg 调整多个视频的大小?

Mat*_*his 3 command-line bash ffmpeg

我尝试在使用 Ubuntu 18 的慢速服务器实例上以不同的方式调整多个视频的大小。

使用以下命令生成批处理脚本文件时:

ffmpeg -i video1.MP4 -vf scale=854:480 smallvideo1.MP4 &
ffmpeg -i video2.MP4 -vf scale=854:480 smallvideo2.MP4 &
ffmpeg -i video3.MP4 -vf scale=854:480 smallvideo3.MP4 &
...
Run Code Online (Sandbox Code Playgroud)

不知何故,它只随机转换两个或三个视频,然后就退出了。每次都smallvideo[i].mp4创建了所有输出文件,但它们不可读。我也尝试过使用-nostdin和不使用&,但仍然无法正常工作。

不,我这样尝试过:

ffmpeg -i video1.MP4 -i video2.MP4 -i video3.MP4 ...
-map 0 -vf scale=854:480 smallvideo1,MP4 & \
-map 1 -vf scale=854:480 smallvideo2.MP4 & \
-map 2 -vf scale=854:480 smallvideo3.MP4 & \
...
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

$ 
./ffmpeg.sh: line 6: -map: command not found
./ffmpeg.sh: line 5: -map: command not found
...
Run Code Online (Sandbox Code Playgroud)

它只转换第一个。

如果有人能帮助我解决问题,我将非常感激!

van*_*ium 7

您在末尾添加了一个与号(“&”),这意味着:分叉到背景中。这意味着您的所有转换都是同时启动的。这对于慢速服务器来说是一个问题,因为 CPU 必须同时执行x编码。因此,任何一个都需要长时间才能完成,还不考虑多任务处理需求所涉及的开销。

只需删除末尾的 & 符号,然后重试即可。它应该可以工作,但如果服务器速度较慢,则需要一些时间。

对文件夹中的所有文件进行顺序编码的一种简单方法是使用 bash 循环:

for f in *.MP4 ; do ffmpeg -i "$f" -vf scale=854:480 "small$f" ;  done
Run Code Online (Sandbox Code Playgroud)