18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FFmpegを使うメモ

Last updated at Posted at 2015-08-21

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拡張子でそれぞれしてみた結果
動画サイズの違いはあんまりないこともわかりました。

18
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?