余白を追加することで、別のアスペクト比の映像に手軽に変換できる。ただし出力解像度が奇数になるとピクセルフォーマット次第で余白がずれたり、エンコードエラーになる。
mp4, mp3, flacにカバーアートを付ける
カバーアートを付けるとエクスプローラにサムネイルが表示、変更できる。
H.264だとサムネイルが表示されるが、H.265だと表示されないのがこれで表示できる。サムネイルはPNG、BMPでも可能。コメントの通りに指定方法が間違っていたので修正。
ffmpeg -i movie.mp4 -i thumb.jpg -map 0:v -map 0:a -map 1:v -c copy -disposition:2 attached_pic movie-with-cover.mp4
MP3の場合。
ffmpeg -i audio.mp3 -i thumb.jpg -map 0:a -map 1:v -c copy -disposition:1 attached_pic -id3v2_version 3 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" audio-with-cover.mp3
mp3のタグ編集を行う際にID3v1とID3v2とAPEがあるんですが、それぞれ何か役割や違いがあるのでしょうか? – Yahoo!知恵袋
アルバム名やアーティスト名はメタデータとして追加できる。
ffmpeg でメタデータを加える
Flacの場合。
ffmpeg -i audio.flac -i thumb.png -map 0:a -map 1:v -c copy -disposition:1 attached_pic audio-with-cover.flac
動画ファイルから時間指定でシーンを選んでカバーアートつきのMP3ファイルを出力することも出来る。以下のコマンド例は開始10秒のシーンをアスペクト比保持して横幅320ピクセルのカバーアートになる。
ffmpeg -i movie.mp4 -vf trim=start='00\:10.000',trim=end_frame=1,setpts=0,scale=320:-1 -map 0:v -map 0:a -c:v:0 mjpeg -disposition:0 attached_pic audio-with-cover.mp3
MKVコンテナにJPGを添付する。
ffmpeg -i "mkv_without_cover.mkv" -attach "art_cover.jpeg" -map 0:a -c copy -metadata:s:t mimetype="image/jpeg" -metadata:s:t:0 filename="cover.jpeg" "mkv_with_cover.mkv"
- ffmpeg Documentation : matroska Metadata
- ffmpeg sets first subtitle track to be default : ffmpeg
- video – ffmpeg set subtitles track as default – Stack Overflow
- albumart – How to add album art with ffmpeg? – Stack Overflow
- ffmpeg – extract mp3 from video file and use specific frame as cover image – Super User
- audio – Cover art of mkv file not being added when converting to mp3 file – Super User
disposition の設定
音声が2つ以上あるときに再生したとき最初に流れる音声を代えられる。ただしMP4コンテナには使えない。
2番目の音声を最初に再生するコマンド例。
ffmpeg -i movie.mp4 -map 0:v -map 0:a -c copy -disposition:a:0 0 -disposition:a:1 default output.mkv
2番目の音声を最初に再生し字幕も同様にするコマンド例。
ffmpeg -i movie.mkv -map 0 -c copy -disposition:a:0 0 -disposition:a:1 default -disposition:s:0 0 -disposition:s:1 default output.mkv
ffmpeg Documentation : Main options
-disposition[:stream_specifier] value (output,per-stream)
具体的にそれぞれにどのような効果があるのか分からない。
- default
- dub
- original
- comment
- lyrics
- karaoke
- forced
- hearing_impaired
- visual_impaired
- clean_effects
- attached_pic
- captions
- descriptions
- dependent
- metadata
ちなみにこちらもMKVコンテナに限るが、追加した字幕ファイルを再生したときに最初から表示することもできる。普通にremuxすると字幕は最初から表示してくれない。
ffmpeg -i movie.mp4 -i sub -c copy -disposition:s:0 default sub-default.mkv
最初の字幕にデフォルトフラグを付けず再生時に字幕を表示させないようにするには-default_mode infer_no_subsをつける。
ffmpeg -i input.mkv -map 0 -default_mode infer_no_subs output.mkv
-default_mode[int]
-dispositionのフラグの制御
- 0, infer:dispositionの既定値の各トラックを既定値としてマークする。1つもないときは最初のトラックを既定値としてマークする
- 1, infer_no_subs:dispositionの既定値の各トラックを既定値としてマークする
- 2, passthrough:dispositionフラグに従う。既定値
- FFmpeg Formats Documentation : matroska
- incorrectly setting default subtitle : ffmpeg
- How do I prevent my scripts adding default flags to tracks? : ffmpeg
- I need to mark subtitles with a language : ffmpeg
- Disposition question about subtitles: how to encode a video with one subtitle track, but make sure it is NOT enabled by default? This works in Handbrake… : ffmpeg
- VorbisComment – XiphWiki
2019年2月のニコ生統計
集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。
全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。
2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。
リサイズする scale
標準で使えるscale
フィルタの使い方。外部ライブラリにzscale
フィルタがありこちらはHDR、高品質リサイズ向けで処理速度はscale
フィルタより速くない。2022年3月4日のコミットで同程度に速くなった。
映像の上に映像をのせる overlay
映像を重ねてワイプを作ったり、重ねた映像を動かしたりできるoverlay
フィルタの使い方。1入力目の映像が背景になり、2入力目の映像が最初に入力された映像の上に表示される。2入力目に透過情報があればその部分に背景にとなる1入力目の映像が映る。
透過部分に関係なく複数の映像を任意の割合で混ぜるならmix
フィルタを使う。
複数の映像を任意の割合でミックスする mix
RGB の色味を手軽に調整できる vibrance
RGB それぞれの色を強く、弱く、反転できるvibrance
フィルタの使い方。他にも似たフィルタがあるが、輝度係数の指定があるのが特徴。
- Windows の ffmpeg で生放送する方法 : colorbalance
- Windows の ffmpeg で生放送する方法 : lutrgb
- RGBA の各値を別のチャンネルに混ぜ合わせる colorchannelmixer の使い方
- RGB レベルで明暗調整できる colorlevels
- RGB, CMYK を個別に調整できる selectivecolor
基本コマンド
intensity を上げて RGB を同じようにコントラストを上げる
ffmpeg -i input -vf vibrance=intensity=0.5:rbal=1:gbal=1:bbal=1 output
ffplay -i input -vf vibrance=0.5:1:1:1
異なる fps を連結して VFR の動画にする
今まで ffmpeg は異なるフレームレートの動画を1つに出力するのはできないと思っていたが、あらかじめ異なるフレームレートにエンコードしておいて、その後に連結すれば VFR の動画になる。
方法は以前書いた demuxer の concat を使えば楽に VFR の動画になる。注意点は映像音声ともに同じコーデックで同じエンコード設定、音声は同じサンプリング数であること。ただし動画によっては「Non-monotonous DTS in output stream 0:0」のエラーが出るが再生して問題なかったら気にしない。エラーが気になるときは入力オプションに-fflags +igndtsをつけてremuxする。
ffmpeg -fflags +igndts -i input.ts -c:v copy tmp.mp4 ffmpeg -i tmp.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts fix.ts
Trim with concat gives issues on the trim point : ffmpeg
または-bsf:a aac_adtstoascをつけてremuxする。
ffmpeg -i input.ts -c:v copy -bsf:a aac_adtstoasc output.mp4
m3u8 – how to fix Non-monotonous DTS in output stream 0:1; when using ffmpeg – Stack Overflow
- concat を使い分ける
- 再エンコードせずに fps を変更する
- ffmpeg で使える映像のテストソース
- ffmpeg でのフレームレート設定の違い
- 【ffmpeg】動画・音声を連結する concat の使い方 其の3
ffmpeg -f concat -safe 0 -i 24-30.txt -c copy vfr.mp4
24-30.txt
file 24p.mp4 file 30p.mp4 file 24p.mp4
ffmpeg でダウンロード速度を制限する
よく使われるのがリアルタイムの-reであるが、それだと1倍速にしかならないので音声の PTS を加工して速度を調整する。
本来のダウンロード速度は制限前より高速であることが前提である。倍速の逆数にasetpts
フィルタで変更しarealtime
フィルタでリアルタイム処理にする。
1.1倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=10*PTS/11,arealtime -vn -f null -
1.5倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=2*PTS/3,arealtime -vn -f null -
2倍速の例
ffmpeg -i "https://example.com/hls/playlist.m3u8" -c copy output.ts -af asetpts=PTS/2,arealtime -vn -f null -
2021年7月17日以降のバージョンでは-readrateが追加され、任意の倍率に制限できるようになった。-readrate 1は-reと同じ効果。
2倍速の例
ffmpeg -readrate 2 -i "https://example.com/hls/playlist.m3u8" -c copy output.ts
映像を任意の角度に回転させる rotate
任意の角度に回転でき、時間経過で回転させたり止めたりできるrotate
フィルタの使い方。似たフィルタにtranspose、hflip、vflip
フィルタがある。
上下左右を入れ換える vflip, hflip
解像度はそのままに上下左右を入れ換えるvflip, hflip
フィルタの使い方。似たフィルタにrotate, transpose
フィルタがある。