Extrair parte de um vídeo com um comando de uma linha

81

Se eu tiver um vídeo, normalmente avi, mas poderia ser qualquer, e eu quero criar um outro no mesmo formato, mas apenas uma parte, a posição i segundos para f segundos de vídeo, o que é o comando de uma linha para fazer esta?

Strapakowsky
fonte

Respostas:

114

Isso pode ser feito usando mencodere ffmpeg.

mencoder

Digamos que você deseja cortar uma parte iniciando às 00:00:30 no arquivo original com uma duração de 5 segundos e que não deve ser recodificada (se você quiser recodificá-la, precisará substituí-la copypor áudio codecs de vídeo e de vídeo, para obter uma lista dos problemas de codecs de áudio disponíveis mencoder -oac help, para obter uma lista dos problemas de codecs de vídeo disponíveis mencoder -ovc help), e emita:

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

Você precisará substituir orginalfilee, newfilecom nomes de arquivos reais, mais tarde será o nome do arquivo criado para reter a parte cortada.

ffmpeg

Digamos que você deseja cortar uma parte iniciada às 00:00:30 no arquivo original com uma duração de 5 segundos e que não deve ser recodificada (se você quiser recodificá-la, precisará substituí-la copycom codecs de áudio e vídeo, para obter uma lista dos problemas de codecs disponíveis ffmpeg -formats -E), você emite:

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

Você precisará substituir orginalfilee, newfilecom nomes de arquivos reais, mais tarde será o nome do arquivo criado para reter a parte cortada.


Para referência, consulte http://lazyxiong-tech.blogspot.com/2007/05/using-mencoder-to-cut-out-pieces-of.html e "7. Copie apenas uma parte do vídeo" em http: // segfault.in/2010/10/ffmpeg-tricks-you-should-know-about/

NN
fonte
Eu tentei e falhei. Você pode me mostrar qual seria o comando para você com seus codecs típicos para usar em avi, flv e mpg? Listei os codecs, mas não consegui entender muito bem.
Strapakowsky
@strapakowsky Depende do arquivo de entrada e dos codecs que você instalou. Talvez você deva fazer uma nova pergunta e adicionar informações sobre o arquivo que você possui e o comando que tentou.
NN
@strapakowsky Também não posso fazê-lo funcionar com o ffmpeg, mas todos os guias sobre como cortar peças com o ffmpeg sugerem que ele funcione de alguma forma, por isso mantenho-o na minha resposta. No entanto, também adicionei uma linha de mencoder que eu começo a trabalhar.
NN
Apenas usei uma versão disso. Não está funcionando para você, porque -ss ... -t ...precisa estar antes da -i infileopção. Veja esta resposta para obter uma lista real. Você quase conseguiu, simplesmente não é o fim ...
Hendy
1
@Hendy Editado em conformidade
NN
25

Você precisa cortar vídeo com recodificação ou sem o modo de recodificação? Você pode tentar seguir o comando abaixo.

Sinopse: ffmpeg -i [arquivo de entrada] -ss [segundos de início] -t [segundos de duração] [arquivo de saída]

use FFmpeg corta vídeo mp4 sem recodificar

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

use FFmpeg corta vídeo mp4 com recodificação

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

Se você deseja cortar a seção desde o início, simplesmente solte -t 00:00:10o comando

Ben Wong
fonte
0

O medipack é um aplicativo de linha de comando muito simples como um invólucro ffmpeg.

você pode cortar o seu vídeo usando estes comandos:

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

você pode visualizar as opções do subcomando trim como:

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

você também pode explorar outras opções usando 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

você pode visitar https://github.com/srbcheema1/medipack e exemplos de checkout no README.

srbcheema1
fonte
-1

Para ser mais preciso, você pode: MANUALMENTE abrir o arquivo em um media player que irá avançar quadro a quadro (o potplayer é o meu favorito, mas o MPC-HC funciona) e reproduzir um arquivo AVISynth com dados como:

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)

Em seguida, corte com o formato de hora EXATO:

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"

e

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"

Se você deseja participar, crie um arquivo txt com os arquivos de vídeo com conteúdos como:

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

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

Execute ffmpeg:

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

PROGRAMÁTICAMENTE, escrevi um programa, mas não tenho o nível 10 para mostrá-lo, desculpe

Budman1
fonte