オプション
| 効果 | コマンド | 備考 |
|---|---|---|
| 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- mac 環境なので -c:v h264_videotoolbox をつけている( 違う環境の場合、 h264 などでエンコード )
- -b:v でビットレートを 2MB に指定
- -vf でビデオフィルターを複数指定している scale=1080:-1 と unsharp=3:3:0.5 。設定はカンマで区切る
- -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.txtvi で編集、冒頭に[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を解釈して再生してくれます。こういう発想素敵。