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)
它只转换第一个。
如果有人能帮助我解决问题,我将非常感激!
您在末尾添加了一个与号(“&”),这意味着:分叉到背景中。这意味着您的所有转换都是同时启动的。这对于慢速服务器来说是一个问题,因为 CPU 必须同时执行x编码。因此,任何一个都需要很长时间才能完成,还不考虑多任务处理需求所涉及的开销。
只需删除末尾的 & 符号,然后重试即可。它应该可以工作,但如果服务器速度较慢,则需要一些时间。
对文件夹中的所有文件进行顺序编码的一种简单方法是使用 bash 循环:
for f in *.MP4 ; do ffmpeg -i "$f" -vf scale=854:480 "small$f" ; done
Run Code Online (Sandbox Code Playgroud)