
ビデオを mov から mp4 に変換しながら (さらに他の調整も行いながら)、大量のビデオ アーカイブ (サブフォルダー内) を並列フォルダー構造にコピーしようとしています。コマンドは次のとおりです。
for f in Users/me/VIDEOARCHIVE/*/*.mov; do ffmpeg -i "$f" "Users/me/CONVERTED/${f%.mov}.mp4"; done
しかし、出力ファイルには「そのようなファイルまたはディレクトリはありません」というメッセージが表示されます。このサイトには同様の質問がたくさんあることは知っていますが、どちらも私のシナリオには役立ちませんでした。
また、.mp4 ファイルのみを作成するように事前に空のフォルダー構造を作成してみましたが、それでも同じエラーが発生します。
事前に (空の) フォルダー構造がすでに作成されている場合は機能します。ただし、フォルダーが見つからないとすぐに、「そのようなファイルまたはディレクトリはありません」というメッセージが表示されます。
必要に応じて親フォルダーを作成し、そこにファイルを配置できるようにする方法はありますか?
答え1
必要に応じて親フォルダーを作成し、そこにファイルを配置できるようにする方法はありますか?
ffmpeg ですか? いいえ。ffmpeg は独自にフォルダーを作成しません。実際、これを実行するプログラムはほとんどありません。
いくつかの提案:
- 事前にフォルダを作成しておく必要があります。
$f
すでに完全なファイル パスが含まれているため、ファイルのベース名を使用する必要があります。**/*
すべてのディレクトリを走査するには、ビデオ アーカイブ ( ) に再帰的なグロビングを使用する必要があります。
まとめると次のようになります。
# enable recursive globbing
shopt -s globstar
# create the directory if necessary
dir="/Users/me/CONVERTED/"
mkdir -p "$dir"
# iterate over all files
for f in /Users/me/VIDEOARCHIVE/**/*.mov; do
# get the file's basename
fname="$(basename "$f")"
# run the command, replacing the file extension
ffmpeg -i "$f" "$dir/${fname%.mov}.mp4"
done