Hacker News new | ask | show | jobs
by nsajko 1895 days ago
Not an ffmpeg wizard here, but here are my screencasting commands. Probably the most useful knowledge in this snippet is how to use Alsa from ffmpeg; i.e., Alsa devices can be referred to as hw:0, hw:1, etc; and one finds out which device to use from arecord.

  # Example output file.
  f=/tmp/output.mp4

  # Example video resolution.
  g=1920x1080

  # Example capture framerate
  fr=4

  # Example X11 display
  d=$DISPLAY

  # Simple screencast.
  #
  # Try adjusting the libx264 CRF from 15 to some greater number, as long
  # as there is no visible effect on video quality.
  #
  # If increasing the capture framerate, you may also wish to use a
  # faster preset.
  ffmpeg  -probesize 50M  -f x11grab -video_size "$g" -framerate "$fr" -i "$d"    \
         -c:v libx264 -crf 15 -preset veryslow   "$f"

  # Simple screencast without drawing the pointer/cursor.
  ffmpeg  -probesize 50M  -f x11grab -video_size "$g" -framerate "$fr" -draw_mouse 0 -i "$d"      \
         -c:v libx264 -crf 15 -preset veryslow   "$f"

  # See what devices are available for capturing sound.
  arecord -l

  # Select a device.
  audioCaptureDevice=hw:0

  # List some permitted parameters associated with device 0.
  #
  # We are interested in the "FORMAT", "CHANNELS", and "RATE" parameters
  # for use in the ffmpeg command.
  arecord --dump-hw-params -D "$audioCaptureDevice"

  audioSampleFormat=pcm_s32le
  audioNumChannels=2
  audioRate=44100

  f=/tmp/output.mp3

  # Record sound.
  ffmpeg  -thread_queue_size 8192 -f alsa -channels "$audioNumChannels" -sample_rate "$audioRate" \
         -c:a "$audioSampleFormat" -ar "$audioRate" -i "$audioCaptureDevice" "$f"

  f=/tmp/output.mkv

  # Screencast with sound.
  #
  # Note that there seems to be an FFMPEG bug where the audio in the last
  # 15 seconds of the video is cut off. The workaround is to record for
  # 15 exrtra seconds, and then cut the extra video.
  ffmpeg  -probesize 50M  -f x11grab -video_size "$g" -framerate "$fr" -i "$d"                    \
         -thread_queue_size 8192 -f alsa -channels "$audioNumChannels" -sample_rate "$audioRate" \
         -c:a "$audioSampleFormat" -ar "$audioRate" -i "$audioCaptureDevice"                     \
         -c:a flac -c:v libx264 -crf 17          "$f"