ffmpeg 批量将 .avi 转换为 .mp4 - 在 ash 中

ffmpeg 批量将 .avi 转换为 .mp4 - 在 ash 中

我希望将一个(或多个)视频文件目录从 .avi 批量转换为 .mp4 容器,只需复制视频和音频流即可。我知道ffmpeg执行此操作的命令,并且单独处理文件没有问题。

我不熟悉ash(相对于bash)及其文件处理和循环过程,这使得编写 shell 脚本变得困难。 (它必须在 ash 中运行,因为它运行在动力不足的 Synology NAS 上。)

答案1

如果您坚持使用 Bourne shell 语法,那么应该没问题,对于您的应用程序来说,最重要的应该是 for 循环。

 #/bin/ash

 for filename in *.avi
 do
      ffmeg parameters "$filename"
 done

答案2

我为此使用了两个脚本,它使用 handbreak 进行转换,但可以修改为用户 ffmpeg(但请记住 ffmpeg 已被废弃)。

我运行 process.sh,然后它会循环遍历,为每个文件运行encode.sh。

进程.sh

if [ "$1" != "" ]; then
    dir="$1"
else
    dir="/Data/Movies"
fi

if [ -e /tmp/process.lock ] ; then 
    echo "Process already running"
else
    echo `date` > /tmp/process.lock
    find "$dir" \( -mmin +10 -name "*.avi" -o -name "*.mkv" -o -name "*.mpg" \) -exec echo "{}" \; > /tmp/list
    cat /tmp/list | wc -l
    read -p "Pausing...."
    find "$dir" \( -mmin +10 -name "*.avi" -o -name "*.mkv" -o -name "*.mpg" \) -exec /home/coteyr/encode.sh "{}" \;
    rm /tmp/process.lock
fi

和encode.sh

#!/bin/bash
echo "$1" > /tmp/current_encode.txt
nice -n 19 HandBrakeCLI -T -Z Normal -i "$1" -o "$1.m4v" > /tmp/progress.log
mv "$1" /Data/Temp/
echo "Idle" > /tmp/current_encode.txt
echo "Idle" > /tmp/progress.log

相关内容