ffmpegバッチ変換.aviを.mp4に - 灰に

ffmpegバッチ変換.aviを.mp4に - 灰に

単にビデオとオーディオストリームをコピーして、ビデオファイルディレクトリ(または複数)を.aviから.mp4コンテナに一括変換したいと思います。私はffmpegこれを行うコマンドを知っており、ファイルを個別に処理するのに問題はありません。

私はシェルスクリプトを書くのを難しくするファイル処理と繰り返しの手順ashに慣れていません。bash(電力が不足しているSynology NASで実行されるため、Ashで実行する必要があります。)

答え1

Bourneシェルの構文に固執するのは大丈夫でしょう。アプリケーションで最も重要なのはforループでなければなりません。

 #/bin/ash

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

答え2

これには、変換にハンドブレーキを使用しますが、ユーザーffmpegで変更できる2つのスクリプトを使用しました(ただし、ffmpegは使用されなくなったことに注意してください)。

process.sh を実行すると、各ファイルに対して encode.sh を実行しながら繰り返されます。

process.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

関連情報