FFmpeg(エフエフエムペグ)は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェア(wikipediaより)
参考になるURL
動画処理の定番ツール「FFmpeg」ことはじめ
1 環境構築
2 コマンドを使う
・ ファイルの情報を確認
・ 動画ファイルの拡張子変換
・ 静止画像を動画に変換
・ m3u8拡張子の動画をtsファイルに変換
#macにffmpeg環境をつくる
参考にしたURLは以下
Macでffmpeg(使い方)
環境は上記URLでの手順で非常に簡単に作成できることがわかった。
#ファイルの情報を確認
ffmpeg -i 5gen.ts
#動画ファイルの拡張子変更(Matroskaに変換かける)
ffmpeg -i 001_xylophone_woods.wmv -vcodec copy test_matroska.mkv
無事に変換可能
#適当な動画ファイルから特定の時間帯を切り出す
3分程度の動画から20秒程度の時間を切り出すコマンドは
ffmpeg -i [元動画] -ss [開始位置(秒数)] -t [切り出す秒数] [新しい動画]
にならって
ffmpeg -i "001_xylophone_woods.wmv" -ss 0 -t 20 "test_kirinuki.wmv"
とした
#静止画像を動画に変換してみる
ffmpeg -y -f image2 -r 1 -loop_input -t 10 -vcodec 'copy' -i "スクリーンショット 2015-05-19 16.24.10.png" test_png_matroska.mkv
無事に変換可能
http://d.hatena.ne.jp/witchmakers/20090916/1253113671
#動画に字幕をいれるにはどうしたらいいか。
↑これはかなり大変。
ffmpegを使って実行できるらしいが、
よくネットで提供されているコンパイル済みのffmpegには字幕に変換するオプションはコンパイルされていなことが多い。
コンパイルをしなおす必要があるので、自分でやるのがいいらしいが、何をコンパイルに含めるかをわかってからコンパイルしないと悲しい目にあう。
・・・・残念ながらまだ実現できていない。。
#m3u8拡張子の動画をtsファイルに変換
ストリーミングでよく使われるm3u8拡張子。
このファイルの中身は実行する動画のURLが書かれている。
m3u8ファイルはVLCで実行でき、ストリーミング状態で動画を確認することができる。
ffmpeg -i index_av.m3u -vcodec copy -acodec copy test.ts
これだけで実行したときになぜか音声だけが変換された。
Video: h264の変換がうまくいかず以下のようなエラーが出た場合、「libx264」をつけてみるとエラーは取れるようだ
[h264 @ 0x7fc36a01d200] decode_slice_header error
[h264 @ 0x7fc36a01d200] no frame!
m3u8の実行は実態があるわけではないので、変換スピードについてこず、エラーが起きることがあるようだ。
-analyzeduration / -probesize のオプションをつけ変換タイミングをずらすと成功することも多い。
今回は30秒ずらしてみたが、うまくいかない場合は60Mなどと増やしてみてもいいかもしれない。
以下のようなエラーが出たためオプションをつけた。
[mpegts @ 0x7fc369809400] decoding for stream 0 failed
[mpegts @ 0x7fc369809400] Could not find codec parameters for stream 0 (Video: h264 ([27][0][0][0] / 0x001B), none): unspecified size
Consider increasing the value for the 'analyzeduration' and 'probesize' options
最終的に以下のコマンドでうまく変換ができたようだ
ffmpeg -analyzeduration 30M -probesize 30M -i index_av.m3u -vcodec libx264 -acodec copy test.ts
#m3u8拡張子の動画をmp4ファイルに変換
tsファイルに変換できたので、out.fileの拡張子だけ変えて実行してみた。
ffmpeg -analyzeduration 30M -probesize 30M -i index_av.m3u -vcodec libx264 -acodec copy test.mp4
みごとにエラー
[mp4 @ 0x7ff715813600] Malformed AAC bitstream detected: use the audio bitstream filter 'aac_adtstoasc' to fix it ('-bsf:a aac_adtstoasc' option with ffmpeg)
av_interleaved_write_frame(): Operation not permitted
オプションをつけないとだめみたいだったので、aacのアプションを追加
ffmpeg -analyzeduration 30M -probesize 30M -i index_av.m3u -vcodec libx264 -acodec copy -bsf aac_adtstoasc test.mp4
同じm3u8の内容をts拡張子とmp4拡張子でそれぞれしてみた結果
動画サイズの違いはあんまりないこともわかりました。