【解決法】DLNAで動画タイトルが正しく表示されないときの対策(ffmpeg+PowerShell)

DLNA対応のテレビやメディアプレイヤーに動画を配信するとき、**「ファイル名」ではなく「MP4ファイル内部のタイトル情報(metadata title)」**が表示されてしまうケースがあります。
その結果、せっかく整理したファイル名が一覧に反映されず、プレイヤー側では謎のタイトルになってしまうことも…。

そこで今回は、ファイル名=タイトルに強制的に揃える方法を紹介します。
PowerShell+ffmpegを使えば、自動で一括修正できます。


なぜ表示されないのか?

  • MP4ファイルには「ファイル名」とは別に「メタデータ(タイトル)」が埋め込まれています。
  • DLNAや一部メディアサーバーは この“メタデータのタイトル”を優先して表示 するため、ファイル名が無視されることがあります。
  • 対策としては、メタデータのタイトルをファイル名と一致させることが必要です。

使用するツール

  • ffmpeg
    → 無再エンコードでメタデータを編集できる万能ツール
  • PowerShell
    → Windowsでのバッチ処理を簡単に記述可能

スクリプトの内容

以下のスクリプトを実行すると、指定フォルダ内のMP4をまとめて処理してくれます。

# ① 編集対象のフォルダパスを指定
$folderPath = "フォルダ"

# ② ffmpeg のパス(環境に合わせて設定)
$ffmpeg = "ffmpeg"  # 例: "C:\tools\ffmpeg.exe"

# ③ MP4ファイルを処理
Get-ChildItem -Path $folderPath -Filter *.mp4 | ForEach-Object {
    $inputPath  = $_.FullName
    $baseName   = $_.BaseName          # 拡張子なし → タイトルに使用
    $outputPath = Join-Path $folderPath ("new_" + $_.Name)

    # タイトルを設定した新ファイルを作成(再エンコードなし)
    & $ffmpeg -i "`"$inputPath`"" -metadata title="`"$baseName`"" -codec copy "`"$outputPath`""
}

# ④ new_*.mp4 を検証&元ファイルと置き換え
Get-ChildItem -Path $folderPath -Filter "new_*.mp4" | ForEach-Object {
    $newFile      = $_.FullName
    $originalName = $_.Name -replace "^new_", ""
    $originalPath = Join-Path $folderPath $originalName
    $title        = $originalName -replace "\.mp4$", ""

    Write-Host "▶ チェック中: $($_.Name)"

    # エラーチェック
    $errorLog = "$($env:TEMP)\ffmpeg_error.log"
    if (Test-Path $errorLog) { Remove-Item $errorLog }
    & $ffmpeg -v error -i "`"$newFile`"" -f null - 2> "$errorLog"

    if ((Get-Content "$errorLog").Length -eq 0) {
        # 問題なければ元ファイル削除 & new_ を本名に戻す
        if (Test-Path $originalPath) { Remove-Item $originalPath -Force }
        Rename-Item -Path $newFile -NewName $originalName

        # 念押しでタイトルを再設定
        $finalFile = Join-Path $folderPath $originalName
        $tempFile  = Join-Path $folderPath "temp_$originalName"
        & $ffmpeg -i "`"$finalFile`"" -metadata title="`"$title`"" -codec copy "`"$tempFile`""
        Move-Item -Force -Path $tempFile -Destination $finalFile

        Write-Host "✅ 完了: $originalName"
    } else {
        Write-Host "❌ エラーあり → $($_.Name)"
    }
}

スクリプトの流れ

  1. フォルダ内のMP4を取得
    → ファイル名をタイトルに設定した new_*.mp4 を作成
  2. ffmpegでデコード検証
    → 破損していないか確認
  3. 元ファイルと入れ替え
    → new_を外してリネーム
  4. 最終確認のため再度タイトルを設定
    → 冗長だが確実に整合が取れる

実行のポイント

  • 日本語ファイル名も対応
    PowerShellのクォートを工夫しているので、空白や日本語でもOK。
  • ffmpegは必須
    インストール後、パスを通すかフルパス指定してください。
  • DLNAサーバ側の更新が必要な場合も
    NASやminidlnaなどは、ライブラリの再スキャンを実行しないと反映されません。

まとめ

  • DLNAでタイトルが崩れる原因は MP4内部のメタデータ
  • PowerShell+ffmpegを使えば、ファイル名=タイトルに一括修正できる。
  • 安全のため、new_ファイル → 検証 → 元ファイルと置換 という二段階方式を採用。

これでメディアプレイヤーでも、意図通りに動画タイトルを表示できるようになります!

コメント

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