windows上で ffmpeg を使って ts を mp4に変換するメモ

はじめに

Windows上でffmpegを使ってtsファイルをmp4に変換するメモです。

今まではPEGASYSのTMPGEncを常用していました。TMPGEncを使っている上で特に問題があるわけではないのですが、最近動画ファイルが入ったHDDがクラッシュしてサルベージした際に、別のPCでも編集できないかと検索しているうちに見つけた情報をまとめてみました。

ffmpeg

ffmpeg はWindows用のバイナリが Zeranoe FFmpeg で配布されています。私は64-bit版を使っています。

ts encoding用preset

ffmpeg で TS をできるだけ高画質な mp4 へ変換してみた (I’m just another TeXnician.)、 TSファイルをffmpegでmp4にエンコード を参考にさせて頂きました。

cmp, deblockalpha, deblockbetaはオプションから無くなっているようですので、削除しています。以下の内容をlibx264.ffpresetとして保存します。

Windowsの場合、ffprestの場所は%HOME%.ffmpegに置くのが良いようです。ここで%HOME%は環境変数です。設定していなければ、好きなフォルダに設定しましょう。また、.ffpmegはピリオドから始まるので、上手くフォルダが作成できない時があるようです。私はCygwinのターミナルから作成しました。私の場合はh:\home\myname\.ffmpeg としています(%HOME%はh:\home\myname)。

level=41
crf=25
coder=1
flags=+loop
partitions=+parti8x8+parti4x4+partp8x8+partb8x8
me_method=umh
subq=7
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qmin=10
rc_eq='blurCplx^(1-qComp)'
bf=16
bidir_refine=1
refs=6

バッチファイル

[2013]新しいFFmpegを使ったらTS→MPEG2変換が高速になってた! (何の変哲もない福岡生活…)のバッチファイルを参考にさせて頂きました。

ffmpeg -y -i %1 -f mp4 -vcodec libx264 -vpre libx264 -r 30000/1001 -aspect 16:9 -s 1440x1080 -bufsize 20000k -maxrate 25000k -vsync 1  -ac 2 -ar 48000 -ab 128k -map 0:0 -map 0:1 %~n1.mp4

この内容をts2mp4.batという名前で保存して使っています。ts2mp4.bat hoge.tsとするとhoge.mp4が生成されます。今のところ、日本語のファイル名は上手く動きません。ffmpegの問題のように思っていますが、深く追求しているわけではありません。

ちなみに私の環境でも、変換していると”PES packet size mismatch”の警告が出ますが、出来上がったmp4は視聴できているようです。

上記のバッチファイルは処理するストリームは#0:0と#0:1の決め打ちです。副音声を使う場合などは、

ffmpeg -y -i hoge.ts

でストリームマップを確認して、mapの番号を変更する必要があります。

まとめ

TMPGEncを使わなくても、murdoc cutterとffmpegで同様のことができます。ffmpegの変換の方が、TMPGEncよりも高速です。murdoc cutterで編集したtsをTMPGEncでmp4にすると上手く行かない場合があります(画像がフリーズする箇所が生成される)。私のところだけかな?。