Як відключення електрики почали впливати на наш розклад, ми вдалися до завантаження відео матеріалів, коли це можливо, щоб подивитися пізніше, коли зручно. Для цього якнайкраще підходить додаток оглядача Video DownloadHelper. Але виявляється, частота кадрів може бути непередбачуваною у деяких випадках. Число може бути абсурдно великим, наприклад, аж 16 тисяч кадрів за секунду. Моя відповідь — транскодувати файл, записуючи у контейнер бажане значення, яке взагалі-то правильно визначається на сторінці додатком. У нашому випадку це було 30 кадрів за секунду. Ось скрипт оболонки bash, який запускає FFmpeg тричі щоб витягти доріжки аудіо і відео, і мультиплексувати їх знову в контейнер mp4:

#!/bin/bash -e

if [[ $# -lt 1 ]]; then exit 1; fi

fname=$1

extract_video() {
  ffmpeg -loglevel error -i $fname -map 0:v -c:v copy -bsf:v h264_mp4toannexb -f h264 -
}

extract_audio() {
  ffmpeg -loglevel error -i $fname -vn -acodec copy -f adts -
}

ffmpeg -fflags +genpts -r 30 \
  -i <(extract_video) \
  -i <(extract_audio) \
  -map 0:v -c:v copy -map 1:a -movflags faststart $fname-fixed.mp4

Тут для передачі потоків аудіо і відео у команду мультиплексування використано анонімні конвеєри.