• ベストアンサー

ffmpegでファイルを合成する方法

ffmpegでファイルを合成する方法を行っています。 まずJPGファイルを動画のAVIファイルに変換します。 for %%1 in ("*.jpg") do "ffmpeg.exe" -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%1" "%%~n1.avi" ここまではうまく行きます。 次にMP3ファイルと上記で作ったAVIファイルを結合する書式を教えてください。

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

  • ベストアンサー
  • luka3
  • ベストアンサー率72% (424/583)
回答No.8

>1つだけです。 であれば、こんな感じです。 for %%A in (*.mp3) do set "MP3=%%~A" for %%A in (*.jpg) do ffmpeg.exe -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%~A" -i "%MP3%" -c:a copy "%%~nA.avi"

masterkentaros
質問者

お礼

ありがとうございました。

その他の回答 (7)

  • luka3
  • ベストアンサー率72% (424/583)
回答No.7

mp3のファイルは1つだけですか? これが複数あるのであれば、画像とどのような組み合わせで動画を作るのでしょうか。

masterkentaros
質問者

補足

1つだけです。 画像と組み合わせて画像が流れる動画のBGMとして作成します。

  • luka3
  • ベストアンサー率72% (424/583)
回答No.6

No.2の時に、『jpgファイルと同名の音声ファイルを結合』と書きました。 イラスト.jpg を変換する際は、イラスト.mp3 を用意してもらう、ということです。 mp3がjpgのファイル名と関係なく固定のファイル名であれば "%%~nA.mp3" の部分をそのファイル名に修正してください。 いきなり、バッチファイルで全て変換しようとするのではなく、 ffmpeg.exe -f image2 -r 1 -loop 1 -t 00:01:00 -i "jpgファイル" -i "音声ファイル" -c:a copy "出力動画.avi" で、1つの変換が成功してから次のステップへ進んだ方がよろしいかと思います。

masterkentaros
質問者

補足

イラスト.mp3ではなくてもファイル名を問わず処理するようにはできないでしょうか?

  • luka3
  • ベストアンサー率72% (424/583)
回答No.5

>実行しましたが、何も起きません。 こちらでは avi が作成されることを確認しています。 ffmpeg.exeはカレントディレクトリかパスの通ったフォルダにありますか? バッチファイルの最後に PAUSE を追加して、表示される内容を教えて戴ければと思います。

masterkentaros
質問者

補足

ffmpeg version N-113626-g106527d2e5-20240213 Copyright (c) 2000-2024 the FFmpeg developers built with gcc 13.2.0 (crosstool-NG 1.25.0.232_c175b21) configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg--enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20240213 libavutil 58. 38.100 / 58. 38.100 libavcodec 60. 39.100 / 60. 39.100 libavformat 60. 20.100 / 60. 20.100 libavdevice 60. 4.100 / 60. 4.100 libavfilter 9. 17.100 / 9. 17.100 libswscale 7. 6.100 / 7. 6.100 libswresample 4. 13.100 / 4. 13.100 libpostproc 57. 4.100 / 57. 4.100 Input #0, image2, from 'イラスト.jpg': Duration: 00:00:01.00, start: 0.000000, bitrate: N/A Stream #0:0: Video: mjpeg (Progressive), yuvj444p(pc, bt470bg/unknown/unknown), 256x256 [SAR 1:1 DAR 1:1], 1 fps, 1 tbr, 1 tbn [in#1 @ 0000022645bfce40] Error opening input: Illegal byte sequence Error opening input file イラスト.mp3. Error opening input files: Illegal byte sequence 続行するには何かキーを押してください . . .

  • luka3
  • ベストアンサー率72% (424/583)
回答No.4

1行にまとめた方は試していませんが、きちんとjpgと同名のaviができました。 1行の方は最後がまた間違ってました。すみません。 for %%A in (*.jpg) do ffmpeg.exe -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%~A" -i "%%~nA.mp3" -c:a copy "%%~nA.avi"

masterkentaros
質問者

補足

for %%A in (*.jpg) do ffmpeg.exe -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%~A" -i "%%~nA.mp3" -c:a copy "%%~nA.avi" で実行しましたが、何も起きません。 ファイルはJPGとMP3を配置しています。

  • luka3
  • ベストアンサー率72% (424/583)
回答No.3

すみません、最後の出力で変数名が抜けていました。 for %%A in (*.jpg) do ( ffmpeg.exe -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%~A" tmp.avi ffmpeg.exe -i tmp.avi -i "%%~nA.mp3" -c:v copy -c:a copy "%%~nA.avi" del tmp.avi ) ffmpegは、入力と出力に同じファイルを指定できません。 そのため中間ファイルとしてtmp.aviを使用し、処理後に削除しています。 これがどうしても気に入らないのでしたら、うまくいくかわかりませんが1行にして for %%A in (*.jpg) do ffmpeg.exe -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%~A" -i "%%~nA.mp3" -c:a copy tmp.avi とかでどうでしょうか。

masterkentaros
質問者

補足

動作テストはされてるのでしょうか? まったく何も起きません。 それにtmp.aviが固定です。 変数の方が良いです。

  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

確認ですが、1つのjpgファイルを、1秒ループの動画(avi)ファイルにする、で合ってますか? (複数の連続したjpgファイルを1つの動画(avi)ファイルにする、ではない) それで、FORコマンドは変数として【文字】を指定します(%%Aなど)。 %%1は、バッチコマンドに渡された【引数】として予約されていますので、これを変数とした場合の動作がおかしくなっても不思議ではありません。 jpgファイルと同名の音声ファイルを結合した動画を作成するには以下の様になります。 for %%A in (*.jpg) do ( ffmpeg.exe -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%~A" tmp.avi ffmpeg.exe -i tmp.avi -i "%%~nA.mp3" -c:v copy -c:a copy "%%~n.avi" del tmp.avi )

masterkentaros
質問者

補足

できれば変数を使用したいのです。 これだとtmp.aviが問題になります。

  • NuboChan
  • ベストアンサー率47% (785/1650)
回答No.1

ffmpegを使ってAVIファイルとMP3ファイルを結合する方法 ffmpeg -i input.avi -i audio.mp3 -c:v copy -c:a copy output.mp4 複数のAVIファイルとMP3ファイルを一括で処理する場合は、バッチスクリプトを使用 for %%a in (*.avi) do ( ffmpeg -i "%%a" -i "%%~na.mp3" -c:v copy -c:a copy "%%~na_output.mp4" ) このスクリプトは、同じ名前のAVIファイルとMP3ファイルを結合し、新しいMP4ファイルを作成します。

masterkentaros
質問者

補足

私が書いたものと繋ぐ場合はこれでいいのでしょうか? 以下の内容で実行したのですが、AVIファイルしか作成されませんでした。 for %%1 in ("*.jpg") do "ffmpeg.exe" -f image2 -r 1 -loop 1 -t 00:01:00 -i "%%1" "%%~n1.avi" for %%1 in (*.avi) do ( ffmpeg -i "%%1" -i "%%~n1.mp3" -c:v copy -c:a copy "%%~n1_output.mp4" )

関連するQ&A