LoginSignup
1
1

More than 5 years have passed since last update.

ffmpegで画質を落としつつ動画の冒頭1分間を切り出し

Last updated at Posted at 2017-03-24

ffmpegとにかく多機能で全部入り感あってすごいなと思いました。(小並感
動画とか音声に関する事なら何でも出来そう。

要件

  1. 売りモノの動画から、サンプル動画として冒頭1分だけ切り出したい。
  2. 転送量やストレージ使用増を考えて、サンプル動画の画質、音質は落とす。
  3. 1分で無理矢理ぶった切るので、少しでも違和感なく再生が終わる感じにフェードアウトしたい。
  4. サンプル動画には、「この動画はサンプルです」、的な注意書きを表示したい。

使いかた

まず今回辿り着いたコマンドはこちら。こんなの絶対覚えてられない。明日には忘れる。
input.mp4から、要件に基づいた処理を行ってoutput.mp4を出力。なおinput.mp4は消えたりしないので安心。

console
ffmpeg -i input.mp4 -t 60 \
-b:v 512k -b:a 32k \
-vf "movie=its_sample.png [watermark];[in][watermark] overlay=main_w-overlay_w-40:main_h-overlay_h-40 [out],[out]fade=out:1740:60" \
-af afade=t=out:st=58:d=2 \
output.mp4
  • -iは元ファイルの指定。
  • -tは切り出したい秒数。今回は開始から60秒。 -ssオプションで、開始位置の指定も可能。-t 60 -ss 30だと開始30秒目から、60秒を切り出す。-ssの指定が無い場合は最初から。
  • -b:vはビデオのビットレート指定。今回は512k。ファイルサイズと質のトレードオフなので、何パターンかやってみて調整。
  • -b:aはオーディオのビットレート指定。今回は32k。こちらも要調整。
  • -vfはビデオフィルタ。ffmpeg激ヤバポイント。サンプルですよテキスト(画像)を埋め込んだ後、開始から1740フレーム目から60フレームかけてフェードアウトしますよ。
  • -afはオーディオフィルタ。開始から58秒目から2秒かけてフェードアウトしますよ。

所感

  • フィルタすごい、やばい。
  • ビデオフィルタもオーディオフィルタみたいに秒で指定できればいいのに。
    ffmpeg -i input.mp4で、フレームレート調べて30fps、60秒だから1800フレーム、最後2秒でフェードアウトしたいから1740:60ね、と計算するのが面倒だった。もしくは、-1:60みたいに指定できればいいのに。

  • オプションの指定順序によって動作が異なる?気をつけよう。

  • フェードアウトするにあたって、もしフレームレートの違う動画が混在してたら困るから固定しといたろ、ついでにフレームレート落として更にファイルサイズ減らそう!と思って安易に-r 10を指定したら、動画と音声がずれてしまった。調べたらwikipediaでこんなの出てきた。

参考

http://takuya-1st.hatenablog.jp/entry/2014/01/14/104752
http://fftest33.blog.fc2.com/blog-entry-80.html
http://d.hatena.ne.jp/zariganitosh/20150619/understand_ffmpeg
http://www.84kure.com/blog/2014/10/14/ffmpeg-%E5%8B%95%E7%94%BB%E3%81%AB%E9%80%8F%E3%81%8B%E3%81%97%E7%94%BB%E5%83%8F%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B%E3%81%AB%E3%81%AF/

1
1
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
1
1