Linux-ffmpegでフォルダ内ファイル一括変換するコマンド

LinuxLogo ffmpeg

Linuxでffmpegを実行する-オプションの説明-のつづき
Linuxでffmpegを使ってフォルダ内ファイルを一括変換するコマンドです

今回作成したコマンドは前提条件として、ディレクトリ名内・ファイル名内に半角スペースがないことです

ディレクトリ名のスペースを置換する

まずはディレクトリ名のスペースを置換します

for f in *\ *; do mv "$f" "${f// /_}"; done

カレントディレクトリ内のディレクトリに半角スペースが含まれるもの分繰り返します
mvに渡してディレクトリ名を変更します

ファイル名のスペースを置換する

つぎにファイル名のスペースを置換します

find ./ | grep " " | sed -e 's/.*/"&"/; p; s/ //g' | xargs -n2 mv

まず、findでカレントディレクトリ内のディレクトリを抽出します
半角スペースが含まれるものをgrepします
sedで半角スペースを置換します
xargsで結果をmvに渡してディレクトリ名を変更します

ファイル名の()半角カッコを置換する

つぎにファイル名の()半角カッコを置換します

IFS=$'\n'; for f in *\(*; do mv "$f" `echo $f|sed -e 's/[ (]/_/g'`; done
IFS=$'\n'; for f in *\)*; do mv "$f" `echo $f|sed -e 's/[ )]//g'`; done

まず、forで括弧付きファイルだけを対象とします
sedでは文字を置換します
前者は(前カッコを_アンダーバーに置換、後者は)後ろカッコを削除します

フォルダ内ファイル一括変換する

Linuxでffmpegを実行する-オプションの説明-で組んだコマンドをカレントディレクトリ以下すべて対象動画ファイルを繰り返し変換できるようにします

find ./ -name \*.m2ts  -print0 | perl -pe 's/\.m2ts\0/\0/g' | xargs -0 -I% sh -c -t 'ffmpeg -fflags +discardcorrupt -i %.m2ts -async 1 -s 1440x1080 -aspect 16:9 -vcodec h264_nvenc -bf 4 -b_strategy 4 -profile:v high -g 150 -b:v 0 -cq 25 -tune animation,zerolatency -c:a copy -bsf:a aac_adtstoasc %.mp4 && rm -f %.m2ts'

まず、findでカレントディレクトリ内の対象動画ファイルの拡張子を含むファイルを抽出します
perlでファイル名の拡張子を含まない部分を抽出します
xargsで結果をffmpegコマンドのInput/Outputに引き渡します

なお、このコマンドは一部アニメ用のコマンドとなってます
実写用のコマンドは以下です

find ./ -name \*.m2ts  -print0 | perl -pe 's/\.m2ts\0/\0/g' | xargs -0 -I% sh -c -t 'ffmpeg -fflags +discardcorrupt -i %.m2ts -async 1 -s 1440x1080 -aspect 16:9 -vcodec h264_nvenc -bf 4 -b_strategy 4 -profile:v high -g 150 -b:v 0 -cq 28 -tune film,zerolatency -c:a copy -bsf:a aac_adtstoasc %.mp4 && rm -f %.m2ts'

コメント

タイトルとURLをコピーしました