cheetsheet/ffmpeg

September 23, 2021

オプション

効果 コマンド 備考
RTMP 送信 ffmpeg -re -i hoge.mp4 -vcodec h264 -ar 44100 -f flv “rtmp://エンドポイント”
ts ファイルを結合 ffmpeg -f concat -safe 0 -i live_1080p.txt -vsync 1 -c copy ../live_1080p.mp4
シャープネスを強く -vf “unsharp=3:3:0.3” 0.3〜0.5
CPU スレッドを有効に使う -threads 9
アスペクト比を維持した状態でサイズ変更 -vf scale=1280:-1 参考
音質を良くする -b:a 192k -aac_coder twoloop 参考
フレーム補間 -vf “minterpolate=60” 参考
Intel QSV でエンコード -c:v h264_videotoolbox -b:v 2m 参考
Linux でエンコード -vcodec h264_vaapi
ビデオビットレート -b:v 2m
品質 -crf 28 0(ロスレス) 51(最低)

QSV でエンコードする場合、 -b:v で十分なビットレートを指定する必要がある。

mkv を mp4 に一気に変える

非常に昔の DVD で素直に拡大するとブロックノイズがひどかったので、オプションで調整してみた。

for file in *.mkv ; do
  ffmpeg -i ${file}  -c:v h264_videotoolbox -b:v 2m -vf "scale=1080:-1,unsharp=3:3:0.5" -b:a 192k -aac_coder twoloop  -crf 0 ${file%mkv}mp4
done
  1. mac 環境なので -c:v h264_videotoolbox をつけている( 違う環境の場合、 h264 などでエンコード )
  2. -b:v でビットレートを 2MB に指定
  3. -vf でビデオフィルターを複数指定している scale=1080:-1 と unsharp=3:3:0.5 。設定はカンマで区切る
  4. -crf でロスレスにしている

ts ファイル結合

MediaLive + MediaStore + CloudFront でライブ配信した際に、普段は WindowsPC で録画もしているが、たまに失敗することがあり、 CloudFront 上に TTL が切れない限りは存在する、ts ファイルから mp4 が作れないか考えていた。

ts ファイルは連番なので、wget でダウンロードする。

for num in (seq -w 1 26114) ;  wget https://hoge.hoge.com/a/live_1080p30_$num.ts ; end

そのファイルリストを txt ファイルにまとめ

ls live_1080p* > live_1080p.txt

vi で編集、冒頭に[file ]を付与する。例えば

file live_1080p_00001.ts
file live_1080p_00002.ts
file live_1080p_00003.ts
file live_1080p_00004.ts

のように。それを concat で結合する。

参考

[Linux/mac OS]mkv 形式の動画を、無劣化で mp4 形式に変換する方法

mkvをmp4に変換する一番簡単な方法は、拡張子をmkvからmp4に変換することです。
そうすると、再生ソフトが勝手にmkvを解釈して再生してくれます。

こういう発想素敵。


Profile picture

Written by tin-machine 技術関連のメモ Twitter