• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Avidemuxで複数ファイルを一括読み込んで処理)

Avidemuxで複数ファイルを一括読み込んで処理する方法

このQ&Aのポイント
  • Avidemuxを使って複数ファイルを一括で処理する方法を知りたいです。
  • また、処理後のファイルを整理する方法も教えてください。
  • Avidemuxのキュー機能とavidemux_jobs.exeファイルを使って一括処理が可能です。また、不要なファイルをゴミ箱に退避しないで削除する方法もあります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.15

動きそうなのは、 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ファイルがあるのは。

NuboChan
質問者

お礼

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 '-----------------------------------

その他の回答 (16)

回答No.17

本当だ。いままで深く考えたこと無かった。 Windowsのdelコマンドでファイルを消すとゴミ箱に入らず、ファイルが消えてしまうのか。 コマンドプロンプトからごみ箱にアクセス http://www.vector.co.jp/soft/win95/util/se327357.html をWindows 10で実験したら、成功した。

NuboChan
質問者

補足

Delコマンドに変わるGBコマンドの紹介感謝します。 >Windows 10で実験したら、成功した。 win10で成功したとの報告が合ったので 私のOS、win11 Pro X64(H22)においてGBを試用してみました。 GB.exe *.ts 結果、tsは消されますが残念ながらゴミ箱には移動していませんでした。 (delコマンドと同じ結果です。) GBは開発時期が古いので諦めます。 代替え案で何とかなりそうなので直接ゴミ箱に削除する事は諦めます。 長々とお付き合い願いありがとうございました。 数々のアドバイス感謝いたします。 すぐには、解決にしないので何か他にアドバイスありましたらお願いします。

回答No.16

del /F /Q *.ts でできなかったらまた考える。

NuboChan
質問者

補足

>del /F/Q *.ts tsファイルは、動画ディレクトリーから消えましたが、 予想はしていましたがゴミ箱に移動されずに完全に削除されました。 delやeraseコマンドは、 GUI上の削除とは異なり、ゴミ箱へは入らずいきなり完全削除されるようです。 そのため、調べたら以下がヒットしたのですが 私の環境では、「アクセスが拒否されました。」となります。 move /y *.ts c:\$Recycled.Bin

回答No.14

結果が C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i abcd.ts -c:v copy -c:a copy abcd.ts.mp4 なら、 これから実行しようとしているコマンドを上手く出せてる。 %%~nf でabcdを表せる。

NuboChan
質問者

補足

アドバイスありがとうございます。 アドバイスを受けてコードを下記のように変更しました。 for %%f in (*.ts) do ( C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %%f -c:v copy -c:a copy %%~nf.mp4 ) pause お陰様で  ファイル名が"aabbccdd.ts"のように  ファイル名内に半角の空白が無い場合は上手く処理されますが  "aa bb cc dd.ts"のように半角の空白がある場合は、以下のように  aa: No such file or directoryが表示されて  最初のaaがディレクトリーの最初と判定されて処理が出来ません。 以下エラーが出る場合の画面表示 '------------------------------ C:\Users\ssd\Desktop\test2(back)>for %f in (*.ts) do (C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %f -c:v copy -c:a copy %~nf.mp4 ) C:\Users\ssd\Desktop\test2(back)>(C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i aa bb cc dd.ts -c:v copy -c:a copy aa bb cc dd.mp4 ) aa: No such file or directory '------------------------------ 動画のファイル名に空白文字がある場合でも  上手く処理されるようにするにはどうコードを変更したら良いでしょうか?

回答No.13

OSはWindows?原因はWindowsのバグなのかなあ。あんなバグがあっても不思議では無い。

回答No.12

表示結果が、 C:\Users\ssd\Desktop\test2(back)>for %f in ((null)) do (echor C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %f -c:v copy -c:a copy %f.mp4" となるのはおかしい。fを展開できていな・・・ いやいや、 echo C:\ffmpeg-2022-12-11\b~ を実行して、 for %f in ((null)) do (echor C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %f -c:v copy -c:a copy %f.mp4" ) は無いでしょ。forなんとかって出ちゃってますよ。

NuboChan
質問者

補足

>は無いでしょ。forなんとかって出ちゃってますよ。 すいません。 私のミスでbatのコードが間違って記入していました。 修正したら以下の結果が表示されました。 これで合っていますか ? C:\Users\ssd\Desktop\test2(back)>for %f in (*.ts) do (echo C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %f -c:v copy -c:a copy %f.mp4 ) C:\Users\ssd\Desktop\test2(back)>(echo C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i abcd.ts -c:v copy -c:a copy abcd.ts.mp4 ) C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i abcd.ts -c:v copy -c:a copy abcd.ts.mp4 C:\Users\ssd\Desktop\test2(back)>pause 続行するには何かキーを押してください . . .

回答No.11

まず、 for %%f in (*.ts) do ( echo C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %%f -c:v copy -c:a copy %%f.mp4 ) pause で、C:\ffmpeg-2022-12-11~を見る。fを%%fで展開できていなかったら問題である。 あるいは、 dir *.ts /b > 1.txt の1.txtをエクセルなどで、 C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i あいう.ts -c:v copy -c:a copy あいう.mp4 C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i エオ.ts -c:v copy -c:a copy エオ.mp4 ・・・ に加工、2.batとして出力、2を実行。 という手はある。

NuboChan
質問者

補足

echorを追加して以下で実行しましたが、 echo C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %%f -c:v copy -c:a copy %%f.mp4  ①batファイルは、tsファイルと同じディレクトリーに作成して   ダブルクリックで実行しました。 結果以下のようにうまく処理出来ませんでした。 C:\Users\ssd\Desktop\test2(back)>for %f in ((null)) do (echor C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %f -c:v copy -c:a copy %f.mp4" ) C:\Users\ssd\Desktop\test2(back)>pause 続行するには何かキーを押してください . . . 考え方として、  ②デスクトップフォルダーにbatファイルを作成して  batファイルに複数の動画ファイルが存在するディレクトリーを  D&Dして処理させる方法も候補に上がっていました。  私としては①又は②のどちらの方法でも   処理できればどちらでもOKです。 >あるいは、   方法として有るのでしょうが   エクセルを利用する加工処理がひと手間必要なので   結果として一つずつavidemuxで処理したほうが早そうです。   

回答No.10

実行環境はWindowsのコマンドラインかバッチファイルだが、 ffmpegでTSファイルをMP4に無劣化で変換 https://qiita.com/mishina2228/items/10fc245078cbcd51e843 というのはある。 まずこれに成功したらゴールに近づきそうな気配はある。

NuboChan
質問者

お礼

m5048172715さん、参考になるURLありがとうございます。 C:ドライブをチェックしたら数か所でffmpeg.exeが存在していました。 微妙にexeのサイズ(容量が)違っていいるので2022_12_12の最新版をネットから入手して 下記のようなコードを試したら問題なく処理できました。 C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i "C:\Users\ssd\Desktop\test\ABC.ts" -c:v copy -c:a copy "C:\Users\ssd\Desktop\test\ABC.mp4 >まずこれに成功したらゴールに近づきそうな気配はある。 うまく処理出来たのでforで複数ファイルを処理するために下記のコードでBATを 動画フォルダーと同じディレクトリーに作成してダブルクリック起動させました上手く処理できません。 どうすれば上手く処理できますか? for %%f in (*.ts) do ( C:\ffmpeg-2022-12-11\bin\ffmpeg.exe -i %%f -c:v copy -c:a copy %%f.mp4 ) pause

回答No.9

PowerShellを使えるならPowerShellを使った方が良いかな。私はPowerShellを知らないのだけど。 で、 set avidemux="C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe" set videocodec=copy set audiocodec=copy cd C:\Users\ssd\Desktop\test c: for %%f in (*.ts) do echo %avidemux% --video-codec %videocodec% --audio-codec %audiocodec% --load "%%f" --save "%%~nf.mp4" --quit pause の表示結果を確認からスタートかな。

NuboChan
質問者

お礼

m5048172715さん、何度もアドバイスありがとうございます。 >PowerShellを使えるならPowerShellを使った方が良いかな。 4017BさんもPowershellでの処理を推薦されています。 Avidemuxでの処理を諦めてPowershellでの解決にシフトする方が良さそうだと感じています。 4017Bへのお礼(12/13 13.52)でffmpegで処理した例を見つけたので 候補に上げていますが、丸投げで申し訳ないのです、こちらについて アドバイスやコメントがあればお願いします。

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.8

>初歩的なミス いやそう言われても「変数代入に引用符は付けてはいけない」というのはバッチの普遍的な仕様なので初歩的なミスですとしか…。 それはさておき、添付画像の方を見させて頂きましたが…これって "test.bat" をダブルクリックか何かして直に実行させた時の結果ですよね?だったら何も間違っていません。バッチファイルは正常に動作してます。バッチファイル内の記述もちゃんと正しく修正されていますので、自分が見た感じでは何も問題ありません。以上、解決!…じゃ無いですよね。 え~っと、ざっとバッチファイルの構文を読んだ限り。コレってこのスクリプトを直に起動させてどうこうするタイプじゃ無くて、「この "test.bat" に動画ファイルをドラッグ&ドロップした時に初めて発火起動して処理を実行するタイプ」のバッチファイルだと思われ…それってちゃんと実験してみました?恐らくDnDしたファイルのファイル名が "*.ts" となっていた時だけ、Avidemuxに渡して処理を実行させる様な感じになってます。念の為、再確認を。 P.S. やっぱりPowerShellでffmpegを動かした方が、結局は巡り巡って簡単かも…?

NuboChan
質問者

お礼

>"test.bat" をダブルクリックか何かして直に実行させた時の結果ですよね? はい、batをダブルクリック実行させています。 >コレってこのスクリプトを直に起動させてどうこうするタイプじゃ無くて、「 >この "test.bat" に動画ファイルをドラッグ&ドロップした時に初めて発火起動して処理を実行するタイプ」 >バッチファイルだと思われ…それってちゃんと実験してみました? その実験は、やってなかったのでやってみましたが処理出来ませんでした。 >やっぱりPowerShellでffmpegを動かした方が、結局は巡り巡って簡単かも…? そうであれば、Powershellでffmpegを利用して処理する方法を教えていただけませんか? 関係ありそうなのですが、その後、ネット情報で以下を見つけました。 回答にも有ったffmpegで処理しているようです。 (原文は英語なので日本語に翻訳済みです) 質問は、mp4をmkvなので  私の希望するtsをmp4とは少し違いますが参考にはなりそうです。 分からないのは、回答の途中にある   directory_name_to_be_processed です。 思うに動画が保存されている作業用のディレクトリー(C:\Users\ssd\Desktop\test)と理解して良いのでしょうか? BATコードの初心者なのでコードが上手く理解できません。 丸投げで申し訳ないのです、作業用のディレクトリー(C:\Users\ssd\Desktop\test)に変換元の複数の動画(ts)が有って これを再エンコードせずにコピー/コピーで.MP4ファイルに変換するようにコードを書き換えて頂けないでしょうか ? (多分、推定が有っているなら作業用のディレクトリーをバッチファイルのショートカットにD&Dするのだと思います) <質問> 再エンコードせずにコピー/コピーで.MP4ファイルのフォルダを.MKVに変換するスクリプトを検索して試しています。 このタスクを達成するバッチファイルのスクリプトを教えていただけませんか? <回答> 以下のバッチファイルは、ビデオとオーディオの両方のストリームをコピーして、  フォルダ内のすべてのMP4(他のファイルタイプではない)をMKVに変換するように設計されています。 コマンドラインから実行したり、ディレクトリ内の特定のファイルにタグを付けたりすることはありません。 使い方は、バッチファイルへのショートカットを作成し、デスクトップに配置します。 そして、このショートカットのアイコンの上に、directory_name_to_be_processedのアイコンをドラッグするのです。  原文(英語)  Then you drag the directory_name_to_be_processed icon onto this shortcut icon   バッチファイルはPAUSEで終了するので、ウィンドウが閉じる前に結果を確認することができます。 '----------------------------------------------------------------- @echo off setlocal EnableDelayedExpansion cls if exist conversion_error.txt del /q conversion_error.txt :FILES_LOOP for %%F in ("%~1\*.mkv") do ( echo Converting "%%~F" to "%%~dpFconverted\%%~nF.mp4" if not exist "%%~dpFconverted\" md "%%~dpFconverted\" ffmpeg.exe -i "%%~fF" -c copy -y -hide_banner -loglevel error -map 0 "%%~dpFconverted\%%~nF.mp4" if errorlevel 1 echo error occurred processing: "%%~F" >> conversion_error.txt rem Next line shows the MP4 after it has been created, so with multiple MP4s it acts as a sort of progress indicator. if exist "%%~dpFconverted\%%~nF.mp4" dir "%%~dpFconverted\%%~nF.mp4" | find "/" rem Remove REM from the start of the next line if you wish to delete the original file if no error occurred in the conversion. rem del "%%~fF" echo. shift ) if not "%1"=="" goto FILES_LOOP goto FINISHED :FINISHED if exist conversion_error.txt start /i conversion_error.txt echo. echo. pause '--------------------------------------------- ffmpeg.exe が Windows 環境変数 PATH リストにあるディレクトリにあるか、バッチファイル内でパス名を完全に指定する必要があります。 "D:\FFMPEG versions\ffmpeg-N-104013-g2ee4077248-win64-gpl\bin\ffmpeg.exe"

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.7

Avidemuxをバッチファイルで制御する手法は、自分も大昔に挑戦してみましたが…挫折してしまいました。幸い、経験者の方が回答してくれている様ですので、詳細はそちらで教授願った方が良いでしょう。自分では力になれず申し訳ないです。 で、おっせかいついでに1つだけアドバイスを… - "Windows標準のバッチファイルでの変数の値を代入(指定)する時には「引用符("")」を付けてはダメ" ~です。バッチファイルの仕様では、set で変数を指定した場合、set my_value=[改行までの全ての文字列] ~と言う風に解釈されます。 ですので… set my_value1="ABCDEFG" set my_value2 = あいうえお set my_value3=これでOKです。 ~上記のセットを行った場合、%my_value3% のみが想定通りの値(文字列)が変数内に格納され、%my_value1% と %my_value2% には想定外の値が代入されており、その様な値を含む変数を用いた場合には当然ながらバッチファイルも期待通りの動作をしません。また set で変数代入を行った場合、往々にしてエラー等は出ずにそのまま処理自体は進む事が多いため、何が間違っているか中々分からなかったりします。 …という訳ですのでとりあえず、 set avidemux=C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe ~と修正してみてください。ある程度のプログラミング知識がある方ですと「PATHの中に空白文字を含む場合は引用符で囲うのが鉄則!」という予備知識が邪魔して、ついつい "" で囲みたくなりますが…前述の通り、Windows標準のバッチファイル内での変数への値の代入の際には、例え空白を含む文字列であっても引用符等は必要ありません。というか = 以降の文字は全て問答無用で変数に代入されてしまいますので、引用符を付けて変数を指定してしまうと… "C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe" ~という本来の正しいPATHの文頭と文末に邪魔な " がくっ着いた変な文字列がPATHとして変数に格納される事になります!一般的なスクリプト言語だと、変数などの指定時に $a = "ABC"; みたいに記述した場合、自動的に = の直後の引用符は文字列には含めず指定された引用符の直後の文字から次に同じ引用符が出て来るまでの文字列をひとまとめにして値として代入するのが一般的な仕様ですが。何故かWindows標準のバッチファイルでは前述の様な意味不明なトンチキな仕様になっているので、初心者キラーというか中級者でも初めて触る場合には大抵、コレでハメられます(笑)。 P.S. 負け惜しみみたいな感じで気が引けますが…今後の事を考えると、いわゆる「バッチファイル」よりも "PowerShell" を利用した方が良い様です。PowerShellでは「引用符問題」は解決されていますので、他言語で培って来たプログラミング知識がすんなりと活かせるかと思います。まあそれでもかなり癖があるスクリプト言語だとは思いますが…。 あとバッチファイルもPowerShellも、記述保存する際の文字コードは「Shift-JIS、改行:CR+LF、BOM無し」で統一して置いてください。一応、UTF8nでも動きますが、コメントアウトした部分以外にマルチバイト文字(日本語など)が含まれるとほぼ100%で文字化けしますので…

NuboChan
質問者

お礼

4017Bさん、アドバイスをいただきありがとうございます。 batは、少し利用しているだけの初心者レベルなので 成功する可能性が低いのですが質問させていただきました。 アドバイス頂いた引用符で囲はない下記で試してみましたが結果は変わらず 何も処理されていません。 set avidemux=C:\Program Files\Avidemux 2.8 VC++ 64bits\avidemux_cli.exe 初歩的なところでミスはないと思いますが以下参考画像を添付します。 https://imgur.com/ROjdM2y [img]https://i.imgur.com/ROjdM2y.jpg[/img]

NuboChan
質問者

補足

なお、参考画像先の画像は小さめなので 改行文字等が見にくい思います。 カーソルを画面上に移動させると虫眼鏡が表示されて 画像上で右クリックすれば拡大表示されます。

関連するQ&A