Витягніть частину відеозапису за допомогою однорядкової команди


81

Якщо у мене є відео, як правило, avi, але воно може бути будь-яке, і я хочу створити ще одне в тому ж форматі, але лише частину, положення i секунд до f секунд у відео, що робити однорядковій команді це?

Відповіді:


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 Це залежить від вхідного файла та встановлених кодеків. Можливо, вам слід створити нове запитання для цього і додати інформацію про те, який файл у вас є і яку команду ви спробували.
NN

@strapakowsky Я не можу змусити його працювати з ffmpeg, але всі вказівки щодо вирізання деталей за допомогою ffmpeg підказують, що це має працювати якось, тому я тримаю це у своїй відповіді. Тим не менш, я також додав лінійку mencoder, яку я отримую на роботу.
NN

Щойно використана версія цього. Це не працює для вас , тому що -ss ... -t ...має бути , перш ніж в -i infileваріанті. Дивіться цю відповідь для справжнього однолінійного. Ви майже отримали це, тільки не наказ ...
Хенді

1
@Hendy Відредаговано відповідно
NN

25

Вам потрібно вирізати відео з перекодування або без режиму перекодування? Ви можете спробувати виконати наступну команду.

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

використовувати FFmpeg cut mp4 video без повторного кодування

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

використовувати FFmpeg cut mp4 video з повторним кодуванням

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

Ви можете переглянути параметри обрізки підкоманди як:

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.


-1

Щоб бути більш точним, ви можете: Вручну відкрити файл у медіаплеєрі, який буде кадр за кадром заздалегідь (potplayer мій улюблений, але 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"

Якщо ви хочете приєднатися, створіть 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, щоб її показати, вибачте

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.