Как сократить видео в универсальные части с помощью инструмента командной строки

Я хочу использовать инструмент командной строки, чтобы сократить видео согласно определенному интервалу, сказать 1 секунду. Если у меня будет 60-секундное видео, то я ожидаю, что это будет разделено на 60 универсальных частей. Мое только другое требование то, что там не быть никаким перекодированием.

Я считал два вопроса по этой теме.

1-й поток предложил недоверяемый инструмент, который больше, кажется, не сохраняется. 2-й поток предлагается avconv управлять большими сегментами видео с ручными именами. Поскольку я буду сокращать эти видео в потенциально сотни меньших частей, подход слишком утомителен. Один пользователь предложил сценарий Bash, но признал, что это могло бы "произвести много ошибок и пустых файлов". Я повторно отправлю этот сценарий здесь для ясности и поощрять лучшее решение:

#!/bin/bash

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

FILES=$(ls *.mp4|sort)

let START=0

for FILE in $FILES
do
    echo Processing $FILE
    mkdir "${FILE}-chop"
    for COUNT in {1..59}
    do
        exec avconv -i "${FILE}" -ss $START -t 60 -c:v copy -c:a copy "./${FILE}-chop/${COUNT} - ${FILE}"
        let START=$START+60
    done
done

IFS=$SAVEIFS

Является сценарий Bash как это действительно правильным подходом здесь? Или есть ли более простой, более эффективный, более надежный инструмент, который я могу использовать с этой целью?

2
задан 2 November 2019 в 21:31

1 ответ

Используйте сегмент muxer в ffmpeg:

ffmpeg -i input -map 0 -f segment -segment_time 60 -reset_timestamps 1 -c copy output_%03d.mp4

Используя -c copy включает потоковый режим копии. Сегмент muxer сократит на ключевых кадрах, когда потоковое копирование, таким образом, сегменты не могут иметь точной продолжительности 60 секунд. При необходимости точно в 60 секундах на сегмент затем, необходимо будет повторно закодировать путем удаления -c copy и установка соответствующего размера GOP для установки ограничению времени сегмента. Например, один второй GOP для 25 выводов framerate -g 25 (значение по умолчанию 250).

2
ответ дан 2 December 2019 в 03:29

Другие вопросы по тегам:

Похожие вопросы: