teknoraver

videoenc

Feb 21st, 2026 (edited)
11,322
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.73 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. error() {
  4.     echo "$@" >&2
  5.     exit 1
  6. }
  7.  
  8. set_video() {
  9.     local hw
  10.  
  11.     preset='-preset slow'
  12.     case "$1" in
  13.     copy)
  14.         codec=copy
  15.         hw=0
  16.         ;;
  17.     h264_sw)
  18.         codec=libx264
  19.         hw=0
  20.         ;;
  21.     h264_hw)
  22.         codec=h264_qsv
  23.         hw=1
  24.         ;;
  25.     h265_sw)
  26.         codec=libx265
  27.         tag='-tag:v hvc1' # this is needed by broken devices like Apple ones
  28.         hw=0
  29.         ;;
  30.     h265_hw)
  31.         codec=hevc_qsv
  32.         tag='-tag:v hvc1'
  33.         hw=1
  34.         ;;
  35.     av1_sw)
  36.         codec=libsvtav1
  37.         preset='-preset 6'
  38.         hw=0
  39.         ;;
  40.     av1_hw)
  41.         codec=av1_qsv
  42.         hw=1
  43.         ;;
  44.     *)
  45.         error "Invalid video codec '$1'"
  46.         ;;
  47.     esac
  48.  
  49.     if [ $hw -eq 1 ]; then
  50.         hwaccel='-hwaccel qsv -hwaccel_output_format qsv'
  51.         # see https://github.com/intel/media-delivery/blob/master/doc/quality.rst
  52.         quality="
  53.             -global_quality $q
  54.             -g 256
  55.             -bf 7
  56.             -extbrc 1
  57.             -look_ahead_depth 40
  58.             -b_strategy 1
  59.             -refs 5
  60.             -adaptive_i 1
  61.             -adaptive_b 1
  62.             -strict -1
  63.         "
  64.     else
  65.         quality="-crf $q"
  66.     fi
  67. }
  68.  
  69. codec=av1_hw
  70. q=25
  71. getopts=':v:q:h'
  72.  
  73. usage() {
  74.     cat <<- EOF
  75.         Usage: ${0##*/} [-v codec] [-q quality] <input.avi> <output.[mp4|mkv]>
  76.             video codecs: copy, h264_sw, h264_hw, h265_sw, h265_hw, av1_sw, av1_hw. Default av1_hw
  77.             quality: 1-51 (lower is better). Default 25
  78.     EOF
  79.     exit $1
  80. }
  81.  
  82. while getopts $getopts arg; do
  83.     case "$arg" in
  84.     v)
  85.         codec=$OPTARG
  86.         ;;
  87.     h)
  88.         usage 0
  89.         ;;
  90.     q)
  91.         q=$OPTARG
  92.         case "$q" in *[!0-9]*) usage 1 ;; esac
  93.         { [ "$q" -lt 1 ] || [ "$q" -gt 51 ] ; } && usage 1
  94.         ;;
  95.     *)
  96.         usage 1
  97.         ;;
  98.     esac
  99.  
  100. done
  101.  
  102. shift $((OPTIND - 1))
  103.  
  104. in=$1
  105. out=$2
  106.  
  107. [ $# -ne 2 ] && usage 1
  108.  
  109. [ -f "$in" ] || error "file '$in' not found"
  110.  
  111. set_video "$codec"
  112.  
  113. exec ffmpeg -y -loglevel quiet -stats $hwaccel -i "$in" -c:v $codec $preset $quality $tag -c:a copy "$out"
  114.  
Advertisement
Comments
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment