Я хотел бы взять живое видео h.264 в качестве входного сигнала и обрезать его, чтобы оно начиналось с постепенного увеличения от черного и заканчивалось постепенным переходом к черному с минимальным кодированием, насколько это возможно. Эти точки входа / выхода могут находиться между I кадрами. Невозможно обрезать кадры не-I без перекодирования.
Я сделал диаграмму:
Я хотел бы разделить входной файл на три части. Часть A должна начинаться с I-кадра до точки 1 и заканчиваться в точке 1. Часть C должна начинаться с I-кадра в точке 2 и заканчиваться на следующем I-кадре после перехода в черный цвет. Они будут перекодированы в формат I-Frame. Эти два сегмента будут относительно короткими 10-30 секунд. Часть B (большая часть видео) может быть просто перекодирована с использованием codec:copy.
Части A & C будут обрезаны (либо автоматически с использованием обнаружения черного, либо вручную), а затем все видео будет объединено с использованием ffmpeg.
Я хотел бы использовать ffmpeg, потому что это то, с чем я больше всего знаком, и остальная часть моего рабочего процесса использует его исключительно. Какие командные строки могли бы достичь этого?
Для любопытных, вот моя рабочая командная строка для захвата живого видео в закодированные сегменты. С этого момента легко удалить ненужное видео и перекодировать сегменты, если это необходимо для обрезки. Последний шаг - объединить сегменты.
ffmpeg -f dshow -rtbufsize 702000k -video_size 1920x1080 -framerate 29.97 -pixel_format uyvy422 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -threads 0 -c:v libx264 -s 1280x720 -crf 18 -profile:v main -level 3.1 -pix_fmt yuv420p -c:a libvo_aacenc -b:a 128k -ac 1 -f segment -segment_time 0.01 -reset_timestamps 1 seg%02d.mp4