Я хотів би взяти відео у форматі h.264 у якості вхідного сигналу і обрізати його, щоб почати з затухання від чорного і закінчити з зникненням до чорного з якомога менше кодування. Ці точки зникнення / виходу можуть потрапляти між I кадрами. Неможливо обрізати не-I кадри без повторного кодування.
Я зробив діаграму:
Я хотів би розділити вхідний файл на три частини. Частина A починається з I-Frame до точки 1 і закінчується в точці 1. Частина C починається з I-Frame в точці 2 і закінчується в наступному I-кадрі після вицвітання в чорний колір. Вони будуть повторно закодовані у формат I-Frame. Ці два сегменти будуть відносно короткими 10-30 секунд. Частина B (більшість відео) можна просто перекодувати за допомогою кодека: copy.
Частини A & amp; 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
29.97
з точним30000/1001
.