fieldhintフィルタで手動インターレース解除しH.264のハードウェアエンコードする。手動インターレース解除するとぎりぎり1倍速以上出るので縞フレームの場所が分かればライブ配信にも使える。patternオプションは2022年3月15日に追加されたものなのでffmpegはソースコードからビルドする。

手動でフィールド処理を行う fieldhint

日常ものならば-b:v 4M指定でもよいが、動きが多いと-b:v 4Mではノイズが多い。1920×1080も-b:v 6M程度は必要かも。

ffmpeg -analyzeduration 10MB -probesize 10MB -i input.ts \
  -vf "setpts=PTS-STARTPTS,fieldhint=pattern2.txt:pattern,split[1],\
  shuffleframes=0 1 2 -1 -1[0];\
  [1]tblend=all_mode=average,shuffleframes=-1 -1 -1 3 -1,[0]interleave" \
  -r 24000/1001 -c:v h264_v4l2m2m -num_output_buffers 64 -num_capture_buffers 128 \
  -b:v 4M -c:a copy -bsf:a aac_adtstoasc output.mp4

エンコーダでh264_v4l2m2mをつかうと、なぜか1440×1080の解像度で映像が乱れるのでリサイズしなければならないが、リサイズしてもまだ1倍速以上をキープしていた。

ffmpeg -analyzeduration 10MB -probesize 10MB -i input.ts \
  -vf "setpts=PTS-STARTPTS,fieldhint=pattern2.txt:pattern,split[1],\
  shuffleframes=0 1 2 -1 -1[0];\
  [1]tblend=all_mode=average,shuffleframes=-1 -1 -1 3 -1,[0]interleave,scale=1280:720" \
  -r 24000/1001 -c:v h264_v4l2m2m -num_output_buffers 64 -num_capture_buffers 128 \
  -b:v 4M -c:a copy -bsf:a aac_adtstoasc output.mp4

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)