- ベストアンサー
Avidemuxで複数ファイルを一括読み込んで処理する方法
- Avidemuxを使って複数ファイルを一括で処理する方法を知りたいです。
- また、処理後のファイルを整理する方法も教えてください。
- Avidemuxのキュー機能とavidemux_jobs.exeファイルを使って一括処理が可能です。また、不要なファイルをゴミ箱に退避しないで削除する方法もあります。
- みんなの回答 (17)
- 専門家の回答
質問者が選んだベストアンサー
動きそうなのは、 for %f in (*.ts) do (C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i "%f" -c:v copy -c:a copy "%~nf.mp4") でしょうね。 うちにtsファイル(なにかのmpeg2動画?)があれば実験できるのだけど、一般的にはDVDの中だろうか?tsファイルがあるのは。
その他の回答 (16)
- m5048172715
- ベストアンサー率16% (860/5261)
ファイル名を環境変数に上手く反映できないとか、文字コードあたりが怪しいというのを私も経験して、最終的に日本語名のファイルをバッチファイルで変換したことはあるのだけど、 その時期と、残ってたバッチファイルのタイムスタンプ(1年ほど古い)が合わない。たぶん以下になにか手を加えたはずである。 @echo off chcp 65001 setlocal enabledelayedexpansion set VIDEOCODEC=Copy set AUDIOCODEC=Copy set RAMDISK=R:\TMP set O=h:\video set D=i:\videos for /r "%D%\" %%F in ("*.mp4") do ( cd "C:\Avidemux" c: echo Y|avidemux_cli.exe --load "%O%\%%~nF.mp4" --output-format MP4 --video-codec %VIDEOCODEC% --audio-codec %AUDIOCODEC% --save "%RAMDISK%\%%~nF.mkv" --quit ) avidemux_cli.exeが何かをして良いか?を尋ねてきてバッチファイルが止まる。ので、それをやってよいというY押下をecho y|がさせてる。これでバッチファイルは止まらなくなる。 それは、途中で作業を中止して最初から実行したときに、ファイルを上書きするかどうかの確認だったかもしれないな。
お礼
m5048172715、 使用されたコードを書き出していただき感謝いたします。 昨日は野暮用で外出したので回答が遅れて失礼しました。 説明を頂いて「echo Y|」の意味が コマンドを実行して良いか?許諾を求める停止コマンドと理解できました。 >たぶん以下になにか手を加えたはずである。 と言う事は、書き出していただいたコードは完成形ではなく これ自体では動画変換ができない(出来なかった)と解釈する事もできますが 実際、このコードで動画変換できるのでしょうか? >setlocal enabledelayedexpansion 上記コードは初めて見るコードでネット情報で調べましたが理解できていません。 下記のtest.batに追加すべきモノなのでしょうか ? '------------------------- 試しに、作業用のディレクトリー(C:\Users\ssd\Desktop\test)に以下のtest.batを日本語シフトJISで作成 set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe" set videocodec=copy set audiocodec=copy for %%f in (*.ts) do %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --load "%%f" --save "%%f.mp4" --quit pause 変換元の動画(abcd.ts)も作業用のディレクトリー(C:\Users\ssd\Desktop\test)に配置して 作業用のディレクトリー(C:\Users\ssd\Desktop\test)をユーザー環境変数のPathに新規登録後に再起動して test.batを管理者権限で起動させて見ましたがbat自体はエラー表示ありませんが 結果として作業用のディレクトリー内には変換された動画(abcd.mp4)は書き出されていませんでした。 現時点では、何も進展が無く手詰まりな状態です。 こうしたら良いなど何かアドバイスあればお願いします。
- m5048172715
- ベストアンサー率16% (860/5261)
何かエラーが出てるはずだから、 set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe" set videocodec=copy set audiocodec=copy for %%f in (*.ts) do %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --load "%%f" --save "%%f.mp4" --quit pause で最後に処理を一時停止してみる。 echoで for %%f in (*.ts) do echo %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --load "%%f" --save "%%f.mp4" --quit pause を確認してもよいかもしれない。 バッチファイルのセーブ形式UTF8とANSIだったかな?によってファイル名が無効になってたときがある。別のバッチファイルだったかもしれないが。 私のは、 echo Y|avidemux_cli.exe --output-format ○○ ・・・ となってた。○○を指定しても変換は速かった。ということは無劣化でフォーマットだけ変えてるっぽい。 https://www.avidemux.org/admWiki/doku.php?id=using:command_line_usage
補足
>pause >で最後に処理を一時停止してみる。 batファイルのSAVE形式がUTF8(ボム付き)では、下記のようなエラーがでますが (ANSI=日本語(シフトJIS)ではエラー表示はでませんでした。) C:\Windows\System32>・ソset avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe" '・ソset' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 以下も試してみましたが同じく出力が何もありません。 (batは、ANSI=日本語(シフトJIS)でSAVE) >echoで >for %%f in (*.ts) do echo %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --load "%%f" --save "%%f.mp4" --quit >pause >を確認してもよいかもしれない。 私が今回参考にしたURLは下記です。 https://www.techwalla.com/articles/how-to-convert-multiple-videos-with-avidemux 下記の参考URLをアドバイスいただきありがとうございます。 >https://www.avidemux.org/admWiki/doku.php?id=using:command_line_usage >私のは、 >echo Y|avidemux_cli.exe --output-format ○○ ・・・ "echo Y|"となっていますがコードは間違いないでしょうか? (m5048172715さんがチェックされたBATコードを完成形で教えてください。) 今思っているのは、 処理用動画ファイル(ts)のあるターゲットフォルダーが 環境変数でSETされていないのでファイル名が上手く読み込まれていない可能性があると言う事です。
- m5048172715
- ベストアンサー率16% (860/5261)
条件は画質を無劣化ということでしたが、たしかtsファイルはMPEG2であり、引数にh264関係を入れると、Avidemux動画をMPEG4に変換してしまいそうだ。 --force-alt-h264無しで実行してみてエラーが無ければ、拡張子とコンテナ変更だけで、ビデオとオーディオをそのままアウトプットする・・・はずだよなあ。
補足
その後のアドバイスで 以下で試してみましたが、mp4(コピー)が出力されませんでした。 やはり何か考え違えしているようです。 (batコードの不具合?) set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe" set videocodec=copy set audiocodec=copy for %%f in (*.ts) do %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --load "%%f" --save "%%f.mp4" --quit
- m5048172715
- ベストアンサー率16% (860/5261)
確認してみたら、 実行ファイル名はavidemux_cli.exeだったね。 --force-alt-h264を使ったことは無いが、 引数はあれで合ってそうに見える。
補足
m5048172715さん、確認いただきありがとうございます。 >実行ファイル名はavidemux_cli.exeだったね。 以下のように修正してbatを処理用動画ファイル(ts)のあるターゲットフォルダーにコピペして 起動させましたが処理済みの動画(mp4)が作成されません。 set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe" 何か間違っている可能性があります。
- m5048172715
- ベストアンサー率16% (860/5261)
たしかコマンドライン使った。Windowsでバッチフィルを書いたことある。 for /D in do とかでそのディレクトリ中のものを片っ端から・・・ 引数は/Rだったかな?
お礼
m5048172715さん、回答ありがとうございます。 バッチファイルのスクリプトで処理する事が出来そうな情報ですが 思い出したら教えてください。
補足
ネット情報を頼りに 動画(ts)を映像出力をコピー,音声出力をCopyで出力形式をmp4(mp4 Muxer)に変換する前提で 以下のBATを想定しましたがどうでしょうか? アドバイスあればお願いします。 事前処理 ファイラーで処理用に新しいフォルダーを作成します。 ファイラーで、処理用のビデオ ファイルを処理用のディレクトリーにD&Dで移動させる。 (変換されるすべてのファイルは同じ形式を想定)。 作成したBATを処理用に新しいフォルダーにコピーして実行 set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux.exe" set videocodec=copy set audiocodec=copy for %%f in (*.ts) do %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --force-alt-h264 --load "%%f" --save "%%f.mp4" --quit
- 4017B
- ベストアンサー率73% (1336/1814)
無くはないですが…元々、AvidemuxてLinux系のソフトなんで、自分でコマンドラインとかをバリバリ書いてスクリプト制御する様な使い方を想定して作られたソフトなんです。ですので内包した動画編集能力はズバ抜けて凄いモノがあるんですが、それをWindows対応のGUI操作のみで引き出すのはかなり難しくて、まあぶちゃけ無理というか。 「キュー」というのも、いわゆる他のWindows系ソフト等にありがちな「バッチファイル」みたいな感じに使う事は出来なくて。先にキューファイルと呼ばれるスクリプトへの指示書みたいな設定ファイルを作り、一旦Avidemuxを閉じてから別途にキューファイルのみを扱うソフトを起動させて~みたいなかなりややこしい手順を取る必要があるので、全く簡単になりません("avidemux_jobs.exe"の事です)。普通に1個1個、手作業で1つずつ処理して行った方が速いと思います。 質問者は Python の知識はありますか?基本、Linux系ソフトはPython制御と極めて親和性が高く、Avidemuxも類に漏れずPython制御する事を前提に色々と内部制御コマンド等が実装されています。逆に言うとPythonの実行環境が無い、一般的なWindows環境では余りその真価をほとんど発揮出来ません。 P.S. Avidemuxは内部的にはMPEG2で動画を描画処理しているので、MP4とかを読み込むと必ずidx2ファイルが生成される仕様になっています(これが無いとAvidemux本体上で動画が再生されない)。 このためidx2ファイルを削除しても、後日また同じファイルを編集しようとすると再び同じidx2ファイルを生成する事になるため、自動削除はしない様になっているのです。 従ってもう同じファイルをAvidemuxで編集作業する事は無いという確信があるのであれば、その都度に応じて使用者が毎回個別に手作業で削除などするしか無いですね。 尚、AVI形式などの汎用基本フォーマット形式であれば、このidx2ファイルは必要ないので生成されません(ただし可逆圧縮AVIとかだと対応して無くて何も表示されなかったりします)。
お礼
4017Bさん、回答ありがとうございます。 >無くはないですが… で何とかなるのかな?と思いましたが >まあぶちゃけ無理というか。 でテンションがダダ下がりしました。 >質問者は Python の知識はありますか? 全くありません。 総合すると、"avidemux_jobs.exe"を利用しても手数が増えるだけで 普通に1個1個、手作業で1つずつ処理して行った方が速いので 「Avidemuxで複数ファイルを一括読み込んで処理」するのは無理なのですね。 「動画を処理後もidx2ファイルと変換前の動画ファイルが残ります」問題も 回答を読む限り自動でゴミ箱へ処理する事も出来そうになさそうなので残念です。
補足
ネット情報を頼りに 動画(ts)を映像出力をコピー,音声出力をCopyで出力形式をmp4(mp4 Muxer)に変換する前提で 以下のBATを想定しましたがどうでしょうか? アドバイスあればお願いします。 事前処理 ファイラーで処理用に新しいフォルダーを作成します。 ファイラーで、処理用のビデオ ファイルを処理用のディレクトリーにD&Dで移動させる。 (変換されるすべてのファイルは同じ形式を想定)。 作成したBATを処理用に新しいフォルダーにコピーして実行 set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux.exe" set videocodec=copy set audiocodec=copy for %%f in (*.ts) do %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --force-alt-h264 --load "%%f" --save "%%f.mp4" --quit
- 1
- 2
お礼
m5048172715さん、何度もアドバイスありがとうございます。 アドバイスを受けてうまく処理出来たので 後は、不要な元動画(*.ts)をゴミ箱に移動させたいのでbat(test.bat)を以下のように修正しましたが for %%f in (*.ts) do ( C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i "%%f" -c:v copy -c:a copy "%%~nf.mp4" ) move /y *.ts c:\$Recycled.Bin pause mp4に変換後にmove処理で アクセスが拒否されました。 0個のファイルを移動しました。 とエラーが出て上手く処理できません。 「アクセス権」の問題なので 試しに、test.batを右クリックして、プロパティのアクセス許可を見てみましたが フルコントロールにチェックが有るのでフルコントロール権限は付与されているようです。 不要な元動画(*.ts)をゴミ箱に移動させたいので 何か方法はありませんか ? '------------------------------ 解決策が見つからないので現在は代替え対策として 以下のようにしてゴミ箱相当のtempフォルダーに移動させるようにしました。 (del/q %C:\Users\ssd\Desktop\temp% するとゴミ箱に入らずに削除される) for %%f in (*.ts) do ( C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i "%%f" -c:v copy -c:a copy "%%~nf.mp4" ) mkdir %C:\Users\ssd_\Desktop\temp% move *.ts %C:\Users\ssd\Desktop\temp% 'del/q %C:\Users\ssd\Desktop\temp% pause '-----------------------------------