У меня проблемы с поиском приложения cli, которое может взять видеофайл (желательно avi, mkv и mp4) и вырезать очень короткие клипы (2-6 секунд) с точностью до времени. Я пробовал ffmpeg , mencoder , avidemux и mp4box, но все они вырезаны на ключевых кадрах, которые создают более 6 секундных клипов. Есть ли инструмент, который перекодирует входной файл и сокращает точное время или неточно, повторно кодирует, а затем точно вырезает?
command-line
video
video-editing
mp4
curmil
источник
источник
-ss
параметр после-i
), оно должно быть более точным.Ответы:
Резка видео с
ffmpeg
Вы можете точно вырезать видео с FFmpeg. С версии 2.5 это очень просто. Это, например, сократит 10 секунд, начиная с 0 минут, 3 секунд и 123 миллисекунд.
Положение и время могут быть в секундах или в
hh:mm:ss[.xxx]
форме.Обратите внимание, что в этих примерах видео будет перекодировано с использованием кодера x264 ; аудио скопировано.
Вы также можете использовать
-to
вместо,-t
чтобы указать конечную точку вместо продолжительности. В этом случае, однако,-to
это эквивалентно-t
, так как, помещая-ss
перед-i
, ffmpeg сначала будет искать эту точку, а затем начнет выводить.Смотрите также статью в поиске вики.
Точная резка для старых
ffmpeg
версийЕсли у вас более старая версия ffmpeg, то для точного поиска вам нужно разместить
-ss
после-i
, что делает процесс кодирования немного медленнее, потому что сначала нужно декодировать все видео:Здесь
-to
и-t
ведут себя по-другому.-t 10
создаст клип длиной десять секунд, а-to 10
клип длиной семь секунд.источник
-c:v libx264 -c:a libfaac
думать, мы можем использовать-acodec copy -vcodec copy
команду ffmpeg, которая просто обнаруживает и использует те же кодеки, что и исходный файл. Кто-нибудь может подтвердить?-c:a aac -strict experimental
. Это самое простое решение.Единственный инструмент командной строки Linux, который я нашел, который может вырезать с точным кадром (или, с точностью до кадра), это
melt
(sudo apt-get install melt
).Скажем, у вас есть
inputvid.mp4
- сначала проверьте его настройки кодирования с помощью sayffmpeg
(здесь, я просто говорю, что хочу снова закодировать его-f mp4
, но как файл,/dev/null
так что вывод отбрасывается; я перенаправляю stderr, чтобы я мог просмотреть его - обратите внимание на середину , команда запрашивает, и вы должны ответитьy
с помощью ENTER, чтобы процесс продолжил и выгрузил полезную информацию (это с ffmpeg 3.3.3 на Ubuntu 14):Итак, мы можем видеть
ffmpeg
выборlibx264
иaac
кодировщики для этого видео; тогда мы можем ввести это дляmelt
:.... и
melt
будет разрезан на части между кадрами 7235 и 7349 в новый файлcut.mp4
. Затем, чтобы проверитьcut.mp4
правильность циклов, используйтеmelt
снова, чтобы воспроизвести его дважды - и воспроизвести в окне SDL:... и вот что
ffmpeg
видит этот файл:Настройки кодирования видео для,
cut.mp4
кажется, идентичны, заinputvid.mp4
исключением того, что битрейт видео изменен с 389 кбит / с до 526 кбит / с, а также настройки кодирования аудио почти одинаковы, за исключением того, что частота дискретизации изменилась с 44100 до 48000 Гц; хотя это можно регулировать с помощью:... однако, даже с этим, окончательный битрейт видео для меня заканчивается 337 кбит / с. Тем не менее, цикл обрезки прекрасно (и включает в себя аудио) при воспроизведении в цикле, так что я думаю, что это действительно с точностью до кадра ...
источник
melt
перекодирует видео и использует библиотеки FFmpeg внизу. Если вы разрешите перекодирование, ffmpeg может выдать тот же результат.melt
библиотек FFmpeg), приятно знать!Как сказал Баодад в комментариях (я пишу, потому что это не так легко найти, если вы быстро читаете), лучший способ - автоматически определять аудио / видео кодировщики с помощью ffmpeg, поэтому:
источник