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

81

Если у меня есть видео, обычно avi, но может быть любым, и я хочу создать еще одно в том же формате, но только в части, с позицией от i секунд до f секунд в видео, что нужно сделать командой из одной строки это?

Strapakowsky
источник

Ответы:

114

Это можно сделать с помощью mencoderи ffmpeg.

MEncoder

Скажем, вы хотите вырезать часть, начиная с 00:00:30, в исходный файл длительностью 5 секунд и что его не нужно перекодировать (если вы хотите перекодировать его, вам придется заменить его copyна аудио и видеокодеки, для получения списка доступных проблем с аудиокодеками mencoder -oac help, для списка доступных проблем с видеокодеками mencoder -ovc help), затем вы выдаете:

mencoder -ss 00:30:00 -endpos 00:00:05 -oac copy -ovc copy originalfile -o newfile

Вам придется заменить orginalfileи newfileреальными именами файлов, позже будет имя файла, который создается для хранения вырезанной части.

FFmpeg

Скажем, вы хотите вырезать деталь, начиная с 00:00:30, в исходный файл длиной 5 секунд и что его не нужно перекодировать (если вы хотите перекодировать его, вам придется заменить copyс аудио и видео кодеками, для списка доступных проблем кодеков ffmpeg -formats -E), тогда вы выпускаете:

ffmpeg -ss 00:00:30 -i orginalfile -t 00:00:05 -vcodec copy -acodec copy newfile

Вам придется заменить orginalfileи newfileреальными именами файлов, позже будет имя файла, который создается для хранения вырезанной части.


Для справки см. Http://lazyxiong-tech.blogspot.com/2007/05/using-mencoder-to-cut-out-pieces-of.html и «7. Копировать только часть видео» в http: // segfault.in/2010/10/ffmpeg-tricks-you-should-know-about/

Н.Н.
источник
Я попробовал это и потерпел неудачу. Можете ли вы показать мне, какая команда будет для вас с вашими типичными кодеками для avi, flv и mpg? Я перечислил кодеки, но в этом не было особого смысла.
Strapakowsky
@strapakowsky Это зависит от входного файла и от того, какие кодеки вы установили. Возможно, вам следует задать новый вопрос и добавить информацию о том, какой файл у вас есть и какую команду вы пробовали.
NN
@strapakowsky Я также не могу заставить его работать с ffmpeg, но все руководства по вырезанию деталей с помощью ffmpeg предполагают, что это должно работать так или иначе, поэтому я держу это в своем ответе. Тем не менее, я также добавил строку mencoder, которую я получаю на работу.
NN
Просто использовал версию этого. Это не работает для вас , потому что -ss ... -t ...должно быть , прежде чем в -i infileварианте. Смотрите этот ответ для реального однострочника. Вы почти получили это, только не заказ ...
Hendy
1
@Hendy Отредактировано соответственно
NN
25

Вам нужно вырезать видео с перекодированием или без режима перекодирования? Вы можете попробовать следующую команду.

Синопсис: ffmpeg -i [входной_файл] -ss [start_seconds] -t [длительность_секунд] [выходной_файл]

использовать FFmpeg вырезать MP4 видео без перекодирования

Example:
ffmpeg -i source.mp4 -ss 00:00:05 -t 00:00:10 -c copy cut_video.mp4

использовать FFmpeg вырезать MP4 видео с перекодированием

Example:
ffmpeg -i source.mp4 -ss 00:00:05 -t 00:00:10 -async 1 -strict -2 cut_video.mp4

Если вы хотите отрезать раздел с самого начала, просто пропустите -t 00:00:10команду

Бен Вонг
источник
0

medipack - это очень простое приложение командной строки в качестве оболочки ffmpeg.

Вы можете добиться обрезки вашего видео с помощью этих команд:

medipack trim input.mp4 -s 01:04 -e 14:08 -o output.mp4
medipack trim input.mp4 -s 01:04 -t 13:04 -o output.mp4

Вы можете просмотреть параметры подкоманды trim как:

srb@srb-pc:$ medipack trim -h
usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]

positional arguments:
  inp                   input video file ex: input.mp4

optional arguments:
  -h, --help            show this help message and exit
  -s START, --start START
                        start time for cuting in format hh:mm:ss or mm:ss
  -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
  -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
  -o OUTPUT, --output OUTPUT

Вы также можете изучить другие варианты, используя medipack -h

srb@srb-pc:$ medipack --help
usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...

positional arguments:
  {trim,crop,resize,extract}

optional arguments:
  -h, --help            show this help message and exit
  -v, --version         Display version number

Вы можете посетить https://github.com/srbcheema1/medipack и ознакомиться с примерами в README.

srbcheema1
источник
-1

Чтобы быть более точным, вы можете: ВРУЧНУЮ открыть файл в медиапроигрывателе, который будет покадрово перемещаться (проигрыватель мой любимый, но работает MPC-HC) и воспроизводить файл 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)

Затем вырезать с точным форматом времени:

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"

Если вы хотите присоединиться, создайте текстовый файл с видеофайлами с таким содержимым, как:

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, чтобы показать ее, извините

Budman1
источник