「2020-02-24-16-13.h264」のように日付名を付けたファイルで作業しています。 MP4Boxがbashスクリプトでこれらのすべてのファイルを処理しようとしていますが、出力ファイルの名前を正しく指定する方法がわかりません。
デフォルトでは、スクリプトは自動的に.h264ファイルの名前を取得し、同じ名前の.mp4として出力したいと思います。
この操作を手動で実行するために使用するコマンドは次のとおりです。
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Converted/2020-02-24-16-13.mp4
私の場合、ffmpeg
回避策に切り替えることはできません。
これが簡単なコマンド調整だったらよかったのに、どんな意見でも送って頂ければとても感謝します!
答え1
このような。
for f in /mnt/usb/Convert/2020-02-24-16-13.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
出力
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Convert/2020-02-24-16-13.mp4
次に終わるファイルが多い場合*.h264
for f in /mnt/usb/Convert/*.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
これを内部で使用する場合/mnt/usb/Convert
。
for f in *.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
変換されたファイルをOPの元の質問だったConvertedディレクトリに出力します(この点に気付かず申し訳ありません)。
for f in /mnt/usb/Convert/2020-02-24-16-13.h264; do
n=${f/Convert/Converted}
echo MP4Box -add "$f" "${n%.*}.mp4"
done
出力。
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Converted/2020-02-24-16-13.mp4
すべてのファイルをバッチ処理します。
for f in /mnt/usb/Convert/*.h264; do
n=${f/Convert/Converted}
echo MP4Box -add "$f" "${n%.*}.mp4"
done
${string/search/replace}
bash PE関連の代替
for f in /mnt/usb/Convert/*.h264; do
n=${f##*Convert}
m=${f%Convert*}
echo MP4Box -add "$f" "${m}Converted${n%.*}.mp4";
done
上記(最後の例)はbash構文に限定されず、すべてのPOSIX互換シェルで動作します。
echo
出力が満足な場合は削除してください。パラメータ拡張ビュー
PAGER='less +/^[[:space:]]*parameter\ expansion' man bash