Я никогда не смогу заставить работать решение ptQa, главным образом потому, что никогда не мог понять, что означают ошибки из фильтров или как их исправить. Мое решение кажется немного более грубым, потому что оно может оставить беспорядок, но если вы добавляете его в сценарий, очистка может быть автоматизирована. Мне также нравится этот подход, потому что если на шаге 4 что-то пойдет не так, вы закончите с шагами 1-3, поэтому восстановление после ошибок будет немного более эффективным.
Основная стратегия заключается в использовании -t
и -ss
для получения видео каждого сегмента, который вы хотите, а затем объедините все части для вашей окончательной версии.
Скажем, у вас есть 6 сегментов ABCDEF каждые 5 секунд, и вы хотите A (0-5 секунд), C (10-15 секунд) и E (20-25 секунд), и вы сделаете следующее:
ffmpeg -i abcdef.tvshow -t 5 a.tvshow -ss 10 -t 5 c.tvshow -ss 20 -t 5 e.tvshow
или же
ffmpeg -i abcdef.tvshow -t 0:00:05 a.tvshow -ss 0:00:10 -t 0:00:05 c.tvshow -ss 0:00:20 -t 0:00:05 e.tvshow
Это создаст файлы a.tvshow, c.tvshow и e.tvshow. -t
говорит, как долго длится каждый клип, поэтому, если c составляет 30 секунд, вы можете пройти 30 или 0:00:30. Опция -ss
указывает, как далеко пропустить исходное видео, поэтому оно всегда относительно начала файла.
Затем, когда у вас есть куча видеофайлов, я создаю файл ace-files.txt
примерно так:
file 'a.tvshow'
file 'c.tvshow'
file 'e.tvshow'
Обратите внимание на "файл" в начале и имя файла после него.
Тогда команда:
ffmpeg -f concat -i ace-files.txt -c copy ace.tvshow
Это объединяет все файлы в файле abe-files.txt
, копируя их аудио и видео кодеки, и создает файл ace.tvshow
который должен быть просто разделами a, c и e. Тогда просто не забудьте удалить ace-files.txt
, a.tvshow
, c.tvshow
и e.tvshow
.
Отказ от ответственности: я понятия не имею, насколько (не) эффективно это по сравнению с другими подходами с точки зрения ffmpeg
но для моих целей это работает лучше. Надеюсь, это поможет кому-то.