- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-05-14T20:22:24+09:00","","")
#author("2020-05-25T19:46:35+09:00","","")
*ビデオファイルの扱いメモ [#ub893b9c]
[[画像ファイルの扱い>image_files]] にも関連情報(主に imagemagick )あり
#hr
#contents
* ffmpeg を使って、動画にテキスト入れる、複数の動画を並べる 2017年10月11日 [#c4e76e5c]
** 動画を回転させる [#k790b5d0]
[[ffmpeg(avconv) で動画を回転させる>https://mgng.mugbum.info/815]]
に従う
「-vf オプション」を使う
- 左右反転 "hflip"
- 上下反転 "vflip"
- 右に90度回転 "transpose=1"
- 180度回転 "transpose=1,transpose=1"
- 右90度回転させて上下反転 "transpose=1,vflip"
** テキストのオーバーレイ [#weec52c5]
[[ffmpegで動画にテキストをオーバーレイする>http://ja.akionux.net/wiki/index.php/ffmpegで動画にテキストをオーバーレイする]]
や
[[ffmpegで動画上にテキストを描画する>https://qiita.com/niusounds/items/797fe0743a9d59681446]]
に従う
- テキスト「This is a text to be superimposed」
- フォントサイズ「14」
- 位置「x=100」「y=100」
- フォントの色「white」← RGBカラーコードも可
- ビットレート「-b:v 20000k」
ttfファイルが作業ディレクトリの中にないと上手く動かなかったので、ウィンドウズのttfファイルをコピーした。
「-b:v 20000k」としてビットレートを元の動画よりずっと高くして、動画の劣化を防いだ。指定しないとビットレートは低めになる。今回は 17769 kb/s だったので、20000k を指定した。
回転とテキストオーバーレイを一緒に
ffmpeg -i infile.avi -vf "transpose=1,transpose=1,
drawtext=fontfile=DejaVuSans.ttf:
text='This is a text to be superimposed':fontsize=11:x=10:y=10:
fontcolor=white" -b:v 20000k outfile.avi
(適当に改行しています)
**黒枠を付ける [#u08ac0a0]
[[Windows の ffmpeg で生放送する方法>http://looooooooop.blog35.fc2.com/blog-entry-903.html#pad]]
「-vf オプション」を使う
- pad=width:height:x:y:color ← デフォルトは黒~
出力の幅:出力の高さ:余白の幅:余白の高さ
ffmpeg -i infile.avi -vf "pad=(iw+40):(ih+40):20:20"
-b:v 20000k outfile.avi
iw、ih は入力動画の幅、高さ
** ふたつを左右に並べる(hstack) [#e6636573]
[[【ffmpeg】 比較動画の作り方>http://looooooooop.blog35.fc2.com/blog-entry-990.html]]
ffmpeg -i left.avi -i right.mp4 -filter_complex hstack outfile.avi
** 更に上下に並べる(vstack) [#y295b52f]
ここでは、ファイルサイズを少し小さくする。
18MBを下回るように -b:v を調整。
ffmpeg -i upperfile.avi -i lowerfile.avi -b:v 4000k
-filter_complex vstack outfile.avi
*ビデオファイルの扱いメモ 2016年10月20日+随時 [#c433c8bc]
** バッチファイルで処理 [#dbb9c310]
同じフォルダにバッチファイル(○○.bat)を置いておけば、ダブルクリックでOK
***MTSファイルを結合する [#q492b2da]
Windows の copy コマンドを利用
コマンド例
copy /b 00000.MTS+00001.MTS+00002.MTS+00003.MTS+00004.MTS+00005.MTS+00006.MTS+00014.MTS 20161015-1.MTS
オプション
/b
binary でコピーするよう指定(デフォルトは text)
***MTSファイルを mp4ファイルに変更する [#e479e7c5]
ffmpeg を利用(https://ffmpeg.org/)
コマンド例
ffmpeg -i 20161015-1.MTS -codec copy -map 0:0 20161015-1.mp4
オプション
-i (ファイル名)
入力ファイル名を指定
-codec copy
コーデックを変更しない指定~
録画したコーデックやフレームレートを維持したまま動画ファイル形式を変更するために指定する~
録画はAVCHDのカムコーダ(ソニーハンディカム)で行うので、コーデックはH.264、フレームレートは 29.97 fps~
mp4ファイルの再生にはコーデック H.264(または MPEG-4 AVC)に対応したプレーヤが必要
-map 0:0
オプションは映像のみを取り出し mp4ファイルに格納する指定~
音声データは含まれず、その分ファイルサイズも小さくなる
** 一部分のフレームの切り出し 2016年11月1日 [#f88646ca]
2分のところから25分間切り出し
ffmpeg -ss 120 -i infile.mp4 -t 1500 -vcodec copy outfile.mp4
-ss 数値
切り出し始めの時間(秒)
-t 数値
切り出し継続時間(秒)
-vcodec copy
ビデオコーデックを変更しない指定
** 一部分の切り抜き(クロップ) 2016年11月1日 [#o2677246]
コーデック:H.264~
横×縦:1920×1080~
を横3、縦2の6分割した右下を切り抜きする場合
|左上|中上|右上|
|左下|中下|右下|
ffmpeg -i infile.mp4 -vf crop=640:540:1280:540 outfile.mp4
-vf crop=W:H:X:Y
切り抜きサイズと位置の指定~
W:切り抜き後の幅~
H:切り抜き後の高さ~
X:左からの切り抜き位置~
Y:上からの切り抜き位置
|←X→||
|↑||
|Y||
|↓||
||←W→|
||↑|
||H|
||↓|
ビデオコーデックを変更しない指定はできない~
必ずエンコードする必要あり
** サイズ変更 2020年5月14日 [#v452c42c]
結論から言うと、解像度やアスペクト比を変更するときには、
画質をめちゃめちゃ低くしたいのでなければ、-crf オプションや
映像ビットレートを指定せずとも、ffmpeg がいい感じにやってくれる。~
例)4K(3840:2160)のビデオを854:480へ変更したところ、
映像ビットレートは 55187kbps から 529kpbs になった。
たぶん、これは標準的な感じのビットレート。~
つまり、解像度やアスペクト比の変更のコマンドを発行するだけでよさそう。
*** 解像度やアスペクト比の変更 [#ef111b46]
オプション:-vf scale=854:-1 など(-1は元の比を維持する)
$ ffmpeg -i ifile.mp4 -vf scale=854:-1 ofile.mp4
VGA(640 × 480)の 480p の垂直解像度でアスペクト比 16:9なら、
(割り切れないのだけれど)854:480 となる(YouTube などはこれ)。
*** ファイルサイズを小さくする [#g31ba91d]
オプション:-crf 32 など(デフォルトは 23)
$ ffmpeg -i ifile.mp4 -crf 32 ofile.mp4
数字が大きくなるとファイルサイズが小さくなる(画像は荒くなる/画質は低下)
*** ファイルサイズを小さくする(映像ビットレートの変更) [#i37d7114]
オプション:-b:v 400k など(めちゃめちゃ大きな数字にするとほぼ元と同じになる)
$ ffmpeg -i ifile.mp4 -b:v 400k ofile.mp4
数字が小さくなるととファイルサイズが小さくなる(画像は荒くなる/画質は低下)
** 静止画から動画を作成する 2020年5月20日 [#z3b8a9e2]
アニメーションGIFでいいのでは?と思うかもしれませんが、
アニメーションGIFではシークバーないし、256色だし、
色数はアニメーションPNG(APNG)でクリヤできるけど、
どっちにしろシークバーないので使いづらい、
という場合に動画がよいと思うのです。
静止画のピクセル数が縦横ともに、偶数でないといけない。どちらかが奇数だと
height not divisible by 2 (1500x925)
width not divisible by 2 (1257x830)
などとエラーが出る(なぜ幅も偶数の必要があるのかしら???)。
$ ffmpeg -loop 1 -i ifile.png -vcodec libx264 -pix_fmt yuv420p -t 3.0 -r 30 ofile.mp4
これで、静止画が mp4 の動画になる(音声なし)。
パラメタの説明
-loop 1 ← ループさせる: -loop は boolian なので(本家マニュアル)、1 でON
-vcodec libx264 ← 映像コーデック H.264:今はこれ一択ですね
-pix_fmt yuv420p ← 動画フォーマット:mpeg系列なら yuv420p 一択
-t 3.0 ← 継続時間(秒)
-r 30 ← フレーム/秒:デフォルトは 25
参考:~
http://tecsingularity.com/ffmpeg/make-movie/~
https://ffmpeg.org/ffmpeg-filters.html
*** 動画フォーマット [#z425eee0]
$ ffmpeg -pix_fmts
とすると何があるかわかる。~
yuv420p は入出力のフォーマットのフラグが立っていて、
NB_COMPONENTS 3~
BITS_PER_PIXEL 12~
とのこと。~
[[ウィキペディア>https://ja.wikipedia.org/wiki/YUV]]
によると、YUV は輝度信号Yと、2つの色差信号を使って表現される色空間。
現時点では、MPEG圧縮は YUM は 4:2:0 とのこと。
なので、mp4 動画を作るときは yuv420p でよい。
*** フレーム/秒 [#s4ecf149]
アナログカラーテレビ(NTSC規格:米国や日本)では 29.97 fps。~
現在も DVD などのデジタルでもこれのようです。
手元の、ソニーハンディカムも 29.97 fps でした。
後で、普通の動画と合成する予定があるのなら、一致させるべきでしょうけど、
単独で閲覧させる場合は悩ましい……。
参考:http://digitalcamera.support.fujifilm.jp/app/answers/detail/a_id/19371/
参考:https://mossan99.hatenablog.com/entry/2013/03/28/160907
** 動画の明るさの調整 2020年5月25日 [#qdc5b112]
暗く撮影してしまった動画の明さを調整したいときなど
$ ffmpeg -i ifile.mp4 -vf eq=brightness=0.5:saturation=1.5:contrast=1.5 ofile.mp4
- brightness: -1.0 〜 1.0 デフォルトは 0
- saturation: 0.0 〜 3.0 デフォルトは 1
- contrast: -1000.0 〜 1000.0 デフォルトは 1~
ほかガンマも触れる。
参考:~
https://ffmpeg.org/ffmpeg-filters.html~
https://hfuji.hatenablog.jp/entry/2018/02/03/232126~
https://qiita.com/riversun/items/6ff25fe8620457342a5e~
** 動画の音声の変更 [#r62c99c3]
https://ffmpeg.org/ffmpeg-filters.htm
stream のどこに動画(ビデオ)や音声(オーディオ)が入っているかを知ら
ないと触れないことがある。まずは、そこで、ちょいと調べる。
$ ffmpeg -i -ifile.mp4
……
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9] (略)
……
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, (略)
のようになっている。これは、~
- stream 0 に ビデオ:ビデオコーデックが H.264、YUV4:2:0、アスペクト比 1920x1080
- stream 1 に オーディオ:オーディオコーデックが AAC、サンプリング周波数が 48,000 Hz、ステレオ
とわかる。
別な音声だけのファイルの例として
$ ffmpeg -i -ifile.mp3
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 192 kb/s
これは、~
- stream 0 に オーディオ:オーディオコーデックが mp3、サンプリング周波数が 44,100 Hz、ステレオ
とわかる。
AAC: Advanced Audio Coding ← 普通の動画ならこれで(が?)よい~
MP3: MPEG-1 Audio Layer-3~
どちらも PCM(pulse code modulation)ではないので、
音声が圧縮されていること(場合によっては)注意
*** 動画の音源を差し替える 2020年5月25日 [#ua0dbfd2]
ビデオはこっちの stream、
オーディオはあっちの stream
というのを、-map オプションを使って指定する。
例えば
$ ffmpeg -i ifile.mp4 -i ifile.mp3 -c:v copy -c:a aac -strict experimental -ar 48000 -af volume=0.5 -map 0:v -map 1:a ofile.mp4
-c:v copy ← ビデオコーデックは入力のものを使う
-c:a aac -strict experimental ← オーディオコーデックの AAC への変更
-ar 48000 ← サンプリング周波数を 48 kHz へ
-af volume=0.5 ← 音の大きさを 0.5倍に
-map 0:v -map 1:a ofile.mp4 ← ビデオを stream 0、オーディオを stream 1 に
音声の大きさを調整するときは倍数か dB で指定できる
-af volume = 0.5 ← デフォルトは 1
-af volume = 10dB ← 使い途がわからん
結果は
$ ffmpeg -i ofile.mp4
……
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9] (略)
……
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
で音声の変換もできた。
音声ファイルの音声が短いと、終わったあとは無音になる。
*** オーディオコーデックの AAC への変更 2020年5月25日 [#p8a44b24]
aac の指定に加え、オプション-strict experimental が必要
-c:a aac -strict experimental
*** サンプリング周波数の変更 2020年5月25日 [#g9e75fdf]
オプション -ar を使う
$ ffmpeg -i ifile.mp4 -ar 48000 ofile.mp4
48,000 Hz になる ← DVD などの音声は 48000 Hz になる~
パワーポイントから動画を作成すると、入力音声が 44,100 Hz になる ← CD と同じ~
ビデオカメラで撮ったものと同じにしたいときなど変換するといいのかもしれない
音声ファイルだけの変更もできる
$ ffmpeg -i ifile.mp3 -c:a aac -strict experimental -ar 48000 -af volume=0.5 ofile.mp3
https://ffmpeg.org/ffmpeg-filters.htm
** ffmpeg で GPU を使ってみる 2020年5月25日 [#x23cc0ee]
自慢の品というのではない GPU
(ノートに入っているCPUの内蔵GPU、インテル HD グラフィックス)
を使ってみるには……
$ ffmpeg -hwaccel auto 以下略
でよい(単に動かせる、ということかもしれぬ)。
参考:~
https://trac.ffmpeg.org/wiki/HWAccelIntro~
https://stackoverrun.com/ja/q/10007990
試してみたところ
$ ffmpeg -hwaccel auto -i ifile.mp4 -vf "eq=brightness=0.2:saturation=1.5,scale=960:-1" -c:v libx264 -b:v 400k ofileha.mp4 ← オプションあり
$ ffmpeg -i ifile.mp4 -vf "eq=brightness=0.2:saturation=1.5,scale=960:-1" -c:v libx264 -b:v 400k ofile.mp4
オプションありでは、タスクマネジャーを見ると、GPU を使っているのがわかった。
しかし、時間はありが、2倍くらい長く掛ってしまった(2分20秒 vs. 1分10秒)。
だからといって、CPUの使用量(%)が減る訳でもなし。~
自慢の品の GPU がないと、そして、専用オプションを使わないと、
GPU を使ってもあまり得にはならないようです。
|Today:&counter(today); |Yesterday:&counter(yesterday); |Total:&counter(); since 20 October 2016|