ffmpeg
может использоваться для объединения файлов:
Если у вас есть медиа-файлы с одинаковыми параметрами кодека и кодека, вы можете объединить их [...]
(выделение мое) Мое намерение 1 состоит в том, чтобы создавать мультимедийные файлы с тем же кодеком и параметрами, чтобы я мог воспользоваться преимуществами concat, не подвергаясь длительному перекодированию.
Преамбула:
У меня есть файл, который я хотел бы вырезать и сохранить полезные части. Я написал скрипт на python, чтобы найти ближайший ключевой кадр к желаемой точке вырезания и вырезать там, так как при выполнении потоковой копии ffmpeg может использовать только I-кадры:
Использование -ss в качестве параметра ввода вместе с -c:v копирование может быть неточным, поскольку ffmpeg вынужден использовать / разбивать только на i-кадрах.
Как это происходит, расколы не происходят точно в нужный момент, но достаточно близко для того момента, когда я могу сосредоточиться на другую часть уравнения. Если я использую concat
демультиплексора в этой точке, различные части получить сочетал perfectly- до сих пор так хорошо!
Однако я хотел бы, чтобы между этими сегментами были плавные переходы, поэтому я дополнительно разделил эти сегменты, чтобы короткие переходы можно было использовать для создания перехода с плавным переходом без перекодирования всего набора файлов.
Базовая диаграмма, вероятно, поможет проиллюстрировать это:
[111AAAA111BBBBB111111CCCCCCC1111DDDDD111] | (original file)
[AAAA] [BBBBB] [CCCCCCC] [DDDDD] | (desired clips extracted)
[AAA] [A][B] [BBB] [B][C] [CCCCC] [C][D] [DDDD]| (split ends from clips)
[AAA][ab][BBB][bc][CCCCC][cd][DDD] | (transitions between short ends)
[AAAabBBBbcCCCCCcdDDD] | (intended output)
Проблема:
Вот куда я попал. Когда я использовал concat ffmpeg
concat
чтобы присоединиться к вышеупомянутым клипам, я получаю значительные видео и аудио артефакты при воспроизведении. Я предполагаю, что есть несоответствие в параметрах кодека, как отмечено как обязательное условие наверху этого вопроса. Итак, проверка видео с помощью ffprobe
дает:
$ ffprobe -i ab-transition.mkv 2>&1 | grep Stream.*Video ; ffprobe -i B.mkv 2>&1 | grep Stream.*Video
Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709/bt709/iec61966-2-1), 1280x720, SAR 1:1 DAR 16:9, 62.50 fps, 62.50 tbr, 1k tbn, 120 tbc (default)
Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709/bt709/iec61966-2-1), 1280x720 [SAR 1:1 DAR 16:9], 62.50 fps, 62.50 tbr, 1k tbn, 125 tbc (default)
(Я пропустил вывод аудиопотока, так как потоки имеют якобы одинаковые параметры, но звук не соединен правильно)
Есть отличия. Я использовал -show_streams
для получения более подробной информации, которая доступна по адресу http://pastebin.com/4vcnDYtj (одна пустая строка, разделяющая 2 выхода). diff
выходных данных дает:
7c7
< codec_time_base=1/120
---
> codec_time_base=1/125
70,71c70,71
< start_pts=12
< start_time=0.012000
---
> start_pts=11
> start_time=0.011000
Обновить:
Я нашел параметры и подходящие параметры для всего, что я вижу, кроме временной базы кодека (tbc). Есть ли настройка, которая позволит мне установить codec_time_base (tbc)? Установка -r
имеет никакого эффекта.
Обновление 2: опасаясь, что этот вопрос будет слишком нишевым для SU, я задал вопрос о списке рассылки ffmpeg-user. К сожалению, -time_base
не подходит в этом случае:
Это опция для внутренних кодеров FFmpeg, которые вы пытаетесь использовать для внешнего кодера (x264).
И еще, к сожалению, когда я спросил об общей осуществимости, ответ был
Я не думаю, что это возможно.
Я попросил разъяснений и возможностей, связанных с оригинальным программным обеспечением для кодирования - в данном случае OBS
- которое потенциально менее гибко в спецификации опций, чем ffmpeg
из-за необходимости соответствовать спецификациям формата живого потока (Twitch). Я еще не получил ответ из списка рассылки, но спрашивал и на форумах OBS.
Еще более важно, будет контролировать для них позволяет мне использовать concat
демультиплексор в ffmpeg
, чтобы присоединиться к этим вместе без необходимости длительного процесса кодирования? Спасибо заранее.
(Я понимаю, что это текстовая стена, поэтому дополнения, вычитания или уточнения, конечно, приветствуются. Я бы дал ссылку на более официальную информацию, но, будучи <10 представителей, я не могу включать более 2 ссылок!)
1: Для получения дополнительной информации см. Мой связанный вопрос: как эффективно и автоматически объединять видеоклипы с помощью коротких переходов?