FFmpegの No such file or directory エラーは、ファイルが実際に存在していても表示されることがよくあります。

典型的なエラーメッセージ

[in#0 @ 000001889ddd7a80] Error opening input: No such file or directory
Error opening input file input.mp4.
Error opening input files: No such file or directory

FFmpeg 6.0 以前では、input.mp4: No such file or directory のように、パス付きの1行で表示されます。

原因1: ファイルパスにスペースが含まれている(最多)

症状

# NG — スペースがある場合、シェルが引数を分割してしまう
ffmpeg -i My Video.mp4 output.mp4

このコマンドでは My と Video.mp4 が別々の引数として解釈されます。

解決方法

ダブルクォートで囲む:

ffmpeg -i "My Video.mp4" output.mp4

シングルクォートでも可:

ffmpeg -i 'My Video.mp4' output.mp4

Windowsのコマンドプロンプト(cmd.exe)の場合:

ffmpeg -i "My Video.mp4" output.mp4

ヒント: ファイル名にスペースを含めないことが一番のトラブル回避策です。アンダースコア _ やハイフン - に置き換えることをおすすめします。

原因2: カレントディレクトリが違う

症状

ターミナルの作業ディレクトリとファイルが存在するディレクトリが異なる場合に発生します。

# ファイルは /home/user/videos/ にあるが、作業ディレクトリが違う
ffmpeg -i input.mp4 output.mp4
# → Error opening input: No such file or directory

解決方法

絶対パスで指定する:

ffmpeg -i /home/user/videos/input.mp4 /home/user/videos/output.mp4

cdで移動してから実行する:

cd /home/user/videos/
ffmpeg -i input.mp4 output.mp4

ファイルの場所を確認する:

# macOS / Linux
ls -la *.mp4

# Windows (PowerShell)
Get-ChildItem *.mp4

原因3: 拡張子の大文字・小文字の不一致

症状

ファイル名が INPUT.MP4 なのに input.mp4 と指定している場合、Linux では大文字小文字が区別されるためエラーになります(Windows と、初期設定のディスク形式の macOS では区別されません)。

# NG on Linux(実際のファイルは INPUT.MP4)
ffmpeg -i input.mp4 output.mp4

解決方法

# ファイル名を正確に確認してから指定する
ls -la
ffmpeg -i INPUT.MP4 output.mp4

原因4: 出力先ディレクトリが存在しない

FFmpegは出力ファイルのディレクトリを自動作成しません。

# NG — output/ ディレクトリが存在しない
ffmpeg -i input.mp4 output/result.mp4
# → Error opening output output/result.mp4: No such file or directory

解決方法

# 先にディレクトリを作成してから実行
mkdir -p output
ffmpeg -i input.mp4 output/result.mp4

診断フローチャート

「No such file or directory」が出た場合

1. ファイルが存在するか確認
   → ls -la または dir で確認

2. ファイル名にスペースがあるか
   → あれば "" で囲む

3. 作業ディレクトリを確認
   → pwd (Linux/macOS・PowerShell) / cd (コマンドプロンプト)
   → 絶対パスで指定し直す

4. 大文字・小文字の確認(Linux)
   → ls で正確なファイル名を確認

5. 出力先ディレクトリの確認
   → mkdir -p でディレクトリを作成

補足:Windows パスの注意点

Windowsではバックスラッシュ \ がパス区切り文字ですが、FFmpegはスラッシュ / も受け付けます。

# どちらも使用可能
ffmpeg -i C:\Users\user\video\input.mp4 output.mp4
ffmpeg -i C:/Users/user/video/input.mp4 output.mp4

ネットワークパス(UNCパス)も、\\server\share\input.mp4 と //server/share/input.mp4 のどちらの書き方でも指定できます。

処理時間とサイズの目安

実測値は動画の圧縮などの記事とデータセットで公開しています。

Windowsでデスクトップ上の My Video.mp4 を変換する場合、作業ディレクトリが違うだけで同じエラーになります。PowerShellなら、まず実際の存在確認をします。

Test-Path "C:\Users\user\Desktop\My Video.mp4"

True が返るなら、FFmpegには同じ絶対パスを引用符付きで渡します。

ffmpeg -i "C:\Users\user\Desktop\My Video.mp4" "C:\Users\user\Desktop\out.mp4"

FFmpeg は処理を始める前に、入力と出力の両方を開きます。パスの間違い、出力先フォルダーが無い、権限が無いといった問題は、2分程度の動画でもすぐに失敗します。しばらく動いてから失敗する場合は、ディスクの空き容量や、途中のネットワーク切断を疑ってください。

関連記事

よくある質問

スペース込みで quote 済みなのに失敗する

ドキュメントからコピーした際に「スマートクオート」が混入している可能性があります。普通のクオートに見えますが別の文字です。ターミナルで引用符を打ち直してください。bash や zsh なら、スペースを \ でエスケープする方法もあります。

glob パターンで FFmpeg を回したい

FFmpeg はグロブを自分で展開しません。シェルで事前展開(for f in *.mp4; do ffmpeg -i "$f" ...; done)してください。画像ファイルの集まりなら -pattern_type glob -i "*.png" も使えますが、Windows 版のビルドはたいてい対応していません。

Windows で \ を使った相対パスが失敗する

コマンドプロンプトと PowerShell では、\ は普通のパス区切りです。Git Bash・MSYS2・WSL では \ がエスケープ文字として扱われるため、引用符なしの videos\input.mp4 は videosinput.mp4 になります。この場合は、フォワードスラッシュ(/)を使うか、パスを引用符で囲んでください。

FFmpeg は出力ディレクトリを自動作成する?

しません。先に mkdir -p で出力先のディレクトリを作成してください。mkdir -p "$(dirname "$out")" && ffmpeg ... "$out" のように、作成と変換を続けて実行します。

Windows の UNC パスが失敗する

UNC パスは、\\server\share\file.mp4 と //server/share/file.mp4 のどちらでも使えます。コマンドプロンプトと PowerShell では、バックスラッシュをエスケープする必要はありません。それでも失敗する場合は、共有フォルダーをドライブレターに割り当ててから指定してください。