Я хотел бы использовать ffmpeg
«s сегмента мультиплексор (прокрутите немного вниз по этой ссылке для некоторых примеров). В принципе:
ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 output%02d.mp4
Это создаст два файла: «output01.mp4» и «output02.mp4». Если бы вы использовали output%03d.mp4
, вы бы вместо этого получили «output001.mp4» и «output002.mp4».
-segment_times
вызывает разделенный запятыми список точек разделения, измеряемых в секундах. Поскольку вы хотите разделить только один раз, в 25 минут, просто используйте 1500 (= 25 * 60). Обратите внимание, что -segment_time
(без 's') - это совершенно отдельный параметр - вы будете использовать его, если хотите разделить файл каждые пять секунд (например), без добавления большого списка каждого определенного времени.
Вы можете обнаружить, что вам нужно использовать -reset_timestamps 1
для правильного воспроизведения файлов:
ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 -reset_timestamps 1 output%02d.mp4
На странице документации намного больше опций. Это должно быть довольно быстро и без потерь (так что вы получите идентичное видео без лишних артефактов видео). Тем не менее, он не будет на 100% точным, поскольку ffmpeg нужно разделить на ключевой кадр, что не может быть гарантировано без перекодирования.
Если вам нужно точное разделение документация рекомендуется повторным кодированием и использование -force_key_frames
и -segment_time_delta
варианты для того , чтобы там будет I-кадры по времени мультиплексора сегмента будет пытаться разделить на (см также libx264 и AAC кодирование руководства по вики ffmpeg):
ffmpeg -i input.mp4 -c:v libx264 -crf 22 -preset veryfast -c:a libfdk_aac -vbr 3 \
-force_key_frames 1500 -f segment -segment_times 1500 -segment_time_delta 0.05 output%02d.mp4
Версия ffmpeg в большинстве репозиториев Linux будет довольно старой, а в случае с Debian и Ubuntu и др. Ситуация еще хуже: они предоставляют не ffmpeg, а скорее форк, avconv, из команды libav (см. также ответ лорда Неккорода здесь). AVconv - отличный инструмент сам по себе, но я не могу гарантировать, что синтаксис ffmpeg будет работать с ним 100% времени, особенно с такими «продвинутыми» вещами, как этот.
Я бы порекомендовал либо взять статическую сборку со страницы загрузок ffmpeg, либо скомпилировать ее самостоятельно. Основным преимуществом его компиляции является то, что вы можете получить доступ к libfdk_aac
, лучшему аудиокодеру AAC, который может использовать ffmpeg - который не может быть легально распределен в скомпилированном двоичном файле ffmpeg из-за конфликтов лицензирования (fdk_aac использует пользовательскую лицензию с авторским левом, которая не совсем совместимо с GPL ffmpeg).