Использование ffmpeg для вырезания видео

Я использую ffmpeg, чтобы вырезать раздел большого файла, например:

ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv 

Часть -ss работает отлично, но -t игнорируется. Он правильно удаляет начальные заданные секунды, заданные с помощью -ss но затем продолжает идти в конец ввода с копией.

  • Программное обеспечение для очистки фотографий досок и документов?
  • Как преобразовать изображение растрового изображения низкого качества в вектор?
  • Как я могу конвертировать SVG-файлы, содержащие текст в файлы PDF (в частности, CentOS 5.3 x86_64)?
  • Есть ли способ использовать ffmpeg, чтобы отрезать конец видео, не перекодируя его?

  • Как использовать командную строку whois для «спам-инфицированных» доменов, таких как apple.com?
  • Преобразование изображения в несжатый PNG из командной строки
  • 0x0000007b vista harddrive swap
  • Как я могу инициировать уведомление, когда заканчивается работа / процесс?
  • Утилита командной строки Windows для управления пропускной способностью сети
  • Как я могу рекурсивно перечислить имена файлов (только) в DOS / Windows?
  • 6 Solutions collect form web for “Использование ffmpeg для вырезания видео”

    Вы можете использовать параметр -ss чтобы указать -ss метку начала, а параметр -t – указать продолжительность кодирования. HH:MM:SS.xxx метки должны быть в формате HH:MM:SS.xxx или в секундах ( s.msec ).

    Следующие будут скопировать первые 30 секунд, а затем скопировать все, что составляет 10 секунд после этого:

     ffmpeg -ss 00:00:30.0 -i input.wmv -c copy -t 00:00:10.0 output.wmv ffmpeg -ss 30 -i input.wmv -c copy -t 10 output.wmv 

    Обратите внимание, что -t является опцией вывода и всегда необходимо указывать после -i .

    Некоторые советы:

    • Для более старых версий ffmpeg, если вы используете -ss после -i , вы получаете более точный поиск за счет более медленного выполнения. См. Также: Поиск с помощью FFmpeg
    • Вы можете использовать -to вместо -t чтобы указать временную метку, которую вы хотите вырезать. Итак, вместо -i <input> -ss 30 -t 10 вы также можете сделать -i <input> -ss 30 -to 40 для достижения того же.

    • Если ваш ffmpeg не поддерживает -c , или -to , он, вероятно, очень устарел. Скомпилируйте новую версию самостоятельно или загрузите статическую сборку со своей домашней страницы. Это действительно не сложно.

    Как -ss другие люди, ставить -ss раньше (намного быстрее) или после (более точно) -i имеет большое значение. Раздел «Быстрый и точный поиск» на странице поиска ffmpeg рассказывает вам, как получить оба, и я использовал его, и это имеет большое значение. В основном вы помещаете -ss до И после -i , просто -ss достаточно времени, прежде чем вы начнете резать, чтобы иметь другой ключевой кадр. Пример. Если вы хотите сделать 1-минутный клип, от 9min0sec до 10min 0sec в Video.mp4, вы можете сделать это как быстро, так и быстро, используя:

     ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4 

    Первый -ss ищет быстрый (приблизительно) 8min0sec, а затем второй -ss ищет точно до 9min0sec, а -t 00:01:00 00:01:00 извлекает клип 1min0sec.

    Также обратите внимание на этот важный момент на этой странице: «Если вы используете -ss с -c:v copy , результирующий поток бит может оказаться прерывистым, не воспроизводиться или не синхронизироваться с аудиопотоком, поскольку ffmpeg вынужден использовать только / Split на i-кадрах. "

    Это означает, что вам нужно перекодировать видео, даже если вы хотите просто скопировать его или рискнуть его прерывистым и несинхронным. Сначала вы можете попробовать только -c copy , но если видео отстой, вам нужно будет это сделать повторно.

    Я обнаружил, что -ss сочетании с -c copy привел к полуторасекундной отбивной в начале.

    Чтобы этого избежать, вам нужно удалить -c copy (которая, по общему признанию, сделает перекод).

    ВРУЧНУЮ

    Откройте файл в медиаплеере, который будет кадр за кадром и воспроизвести файл AVISynth с такими данными, как:

     DirectShowSource(("C:\Downloads\Video\Do you want him.flv"), Pixel_Type="yuy2").Crop(0,0,-0,-0) Subtitle("C:\Downloads\Video\Do you want him.flv", font="Arial", size=24, text_color=$ff0000, align=3) ShowFrameNumber(scroll=true, x=336, y=27, font="Arial", size=24, text_color=$ff0000) ShowTime(x=398, y=44, font="Arial", size=24, text_color=$ff0000) 

    Затем разрезайте формат EXACT:

     ffmpeg -i "Path\do you want him.flv" \ -ss 00:00:05.240 -to 00:00:08.360 \ -vcodec libx264 -acodec libvo_aacenc \ "Path\Do you want him1.flv" 

    а также

     ffmpeg -i "Path\do you want him.flv" \ -ss 00:00:10.240 -to 00:00:14.360 \ -vcodec libx264 -acodec libvo_aacenc \ "Path\Do you want him2.flv" 

    Теперь сделайте txt-файл с видеофайлами с содержимым, например:

     file 'C:\Downloads\Video\Do you want him1.flv' file 'C:\Downloads\Video\Do you want him2.flv' 

    Запустить ffmpeg:

     ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv" 

    Программный способ

    Я написал программу, но мне нужно иметь 10 репутации, чтобы показать ее.

    Для меня опция -t не работала, но работали -vframes . Я предпочитаю использовать #frames , так как я предпочел бы обрезать I-Frames, и я узнал GOP для видео, используя ffprobe .

    Командная строка, которая работала для меня:

     ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv 

    Кстати, положить -ss перед -i делает большую разницу во времени выполнения.

    Как и в случае с user225366, опция -t не работает для коротких видеороликов, но для более длинных видео. Для коротких видео кажется, что -frames: v лучше. Это то, что сработало для меня.

     ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4 

    -какодная копия должна быть добавлена, если у видео есть звук, как показывают другие ответы.

    Давайте будем гением компьютера.