勉強の記録

機械学習、情報処理について勉強した事柄など

VideoContainerChangerがエラーになるのでMTSをMP4に変換するバッチファイルを作成した

VideoContainerChangerというソフトがあり便利に使っていたのだが、久しぶりに使ってみようとダウンロードしてきたらうまく動かなかった。同梱されていたv1.1もv1.3もファイルを変換するとエラー。ffmpegを最新にしてもダメ。

以下のようなエラーがでてしまう。

ffmpeg version N-104423-g682bafdb12-20211024 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10-win32 (GCC) 20210408
  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-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --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=20211024
  libavutil      57.  7.100 / 57.  7.100
  libavcodec     59. 12.100 / 59. 12.100
  libavformat    59.  8.100 / 59.  8.100
  libavdevice    59.  0.101 / 59.  0.101
  libavfilter     8. 15.100 /  8. 15.100
  libswscale      6.  1.100 /  6.  1.100
  libswresample   4.  0.100 /  4.  0.100
  libpostproc    56.  0.100 / 56.  0.100
Input #0, mpegts, from 'C:/xxxx.MTS':
  Duration: 00:05:38.85, start: 1.033367, bitrate: 16626 kb/s
  Program 1 
  Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(top first), 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 59.94 tbr, 90k tbn
  Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
  Stream #0:2[0x1200]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090), 1920x1080
[mp4 @ 000001c7aee4ca00] track 1: codec frame size is not set
[mp4 @ 000001c7aee4ca00] Could not find tag for codec hdmv_pgs_subtitle in stream #2, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:2 -- 
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #0:2 -> #0:2 (copy)
    Last message repeated 1 times

Windowsのフォトを使う方法も簡便で良いが、再エンコードがかかっていそう。そこでffmpegを直接利用するバッチファイルを作成したのでメモしておく。

ffmpegをダウンロードしてきたら、ffmpeg.exeと同じフォルダに以下の内容のバッチファイルを置いて、動画をドラッグアンドドロップするとMP4ファイルに変換される。複数まとめてドラッグアンドドロップしても大丈夫。パスやファイル名に空白があっても大丈夫なはず。出力と同じ名前のファイルがある場合は確認される。

for %%f in (%*) do (
    %~dp0\ffmpeg.exe -i "%%~f" -codec:v copy -codec:a copy "%%~dpnf_REMUX.mp4"
)
pause

ffmpegと違う場所に置きたい場合は「%~dp0\ffmpeg.exe」の部分をffmpegのパスに変更する。ffmpegにパスを通してるなら「ffmpeg」でok。

出力ファイルを変更したければ、「"%%~dpnf_REMUX.mp4"」の「_REMUX.mp4」の部分を変更する。ffmpegは出力ファイルの拡張子で形式を判断しているので拡張子は変更しない方が良い。

「-codec:v copy」と「-codec:a copy」はそれぞれ、動画と音声はコーデックを変換せずに元の形式をコピーするという意味。これで再エンコードせず、containerのみの変換になる。

処理結果が見れた方がうれしいので最後に「pause」を入れているが、終了して欲しい場合は省く。

手元のMTSファイルしか試してないけども、コンテナ変換なので.m2tsとか.tsも行けるはず。

参考: Video Container Changerv1.1 はWin10で使える方法あるのでしょうか -T- 画像編集・動画編集・音楽編集 | 教えて!goo