Eu tenho necessidades de edição bastante simples - preciso cortar alguns vídeos, talvez inserir alguns PNGs entre eles e ingressar nesses vídeos (não precisa de transições, efeitos etc.). Basicamente, pitivi
faria o que eu quero - exceto que eu uso AVIs de 640x480 a 30 qps de uma câmera e, assim que coloco mais alguns minutos desse tipo de material, pitivi
começa a congelar na visualização e, assim, fica inutilizável.
Então, comecei a procurar uma ferramenta de linha de comando para Linux; Eu acho que apenas ffmpeg
( linha de comando - Usando ffmpeg para cortar vídeo - Superusuário ) e mplayer
( Sam - Editar arquivo de vídeo com mencoder no linux ) são candidatos até agora, mas não consigo encontrar exemplos do uso que tenho em mente.
Basicamente, eu imagino que haja um codificador e ferramentas de player (como ffmpeg
vs ffplay
; ou mencoder
vs mplayer
) - de modo que, para começar, a sequência de edição possa ser especificada diretamente na linha de comando, preferencialmente com resolução de quadro - um pseudocódigo seria:
videnctool -compose --file=vid1.avi --start=00:00:30:12 --end=00:01:45:00 --file=vid2.avi --start=00:05:00:00 --end=00:07:12:25 --file=mypicture.png --duration=00:00:02:00 --file=vid3.avi --start=00:02:00:00 --end=00:02:45:10 --output=editedvid.avi
... ou poderia ter um arquivo de texto de "lista de reprodução", como:
vid1.avi 00:00:30:12 00:01:45:00
vid2.avi 00:05:00:00 00:07:12:25
mypicture.png - 00:00:02:00
vid3.avi 00:02:00:00 00:02:45:10
... para que pudesse ser chamado com
videnctool -compose --playlist=playlist.txt --output=editedvid.avi
A ideia aqui seria que todos os vídeos estão no mesmo formato - permitindo que a ferramenta de transcodificação de evitar, e apenas fazer uma "cópia crua" em vez (como em mencoder
's copiar codec: " -oac copy -ovc copy
") - ou na falta disso, áudio / vídeo não compactado seria bom (apesar de consumir um pouco de espaço). No caso da imagem estática, a ferramenta usaria a codificação definida pelos arquivos de vídeo.
O problema é que, até agora, vejo isso mencoder
e ffmpeg
posso operar em arquivos individuais; por exemplo, cortar uma única seção de um único arquivo ou ingressar em arquivos ( mencoder
também possui Edit Decision Lists (EDL) , que pode ser usado para fazer o corte exato do quadro - para que você possa definir várias regiões de corte, mas é novamente atribuído a um único arquivo ) O que implica que eu tenho que trabalhar primeiro em cortar pedaços de arquivos individuais (cada um deles exigiria um arquivo temporário em disco) e depois juntá-los em um arquivo de vídeo final.
Imagino então que existe uma ferramenta correspondente, que pode ler o mesmo arquivo de formato / lista de opções da linha de comando da ferramenta de codificação - exceto que não gera um arquivo de saída, mas reproduz o vídeo; por exemplo, no pseudocódigo:
vidplaytool --playlist=playlist.txt --start=00:01:14 --end=00:03:13
... e, se houver memória suficiente, isso geraria uma visualização de vídeo em baixa resolução na RAM e a reproduziria em uma janela, oferecendo uma interação limitada (como mplayer
os atalhos do teclado para reproduzir, pausar, retroceder, passo a passo) ) Claro, eu imaginaria os horários de início e término para se referir a toda a lista de reprodução e incluir qualquer arquivo que possa acabar nessa região na lista de reprodução.
Assim, o resultado final de tudo isso seria: operação da linha de comando; sem arquivos temporários durante a edição - e também sem arquivos temporários (nem transcodificando) ao renderizar a saída final ... o que eu acho que seria legal.
Portanto, embora eu ache que tudo isso possa ser um pouco exagerado - existe algo que se aproxime do fluxo de trabalho descrito acima?
fonte
mkvmerge
antes, vai ter certeza de que eu vou ver .. Felicidades!Respostas:
Sim existe. Tente usar o aplicativo chamado "Melt". Veja a documentação aqui:
https://www.mltframework.org/docs/melt/
Se você usa uma distribuição derivada do Debian:
fonte
brew install mlt
Ok, como não consigo encontrar muito sobre o
melt
uso da linha de comando, aqui estão algumas notas .. (e depois disso, veja esta resposta Usando a substituição de processo para enganar programas que esperam arquivos, com extensões específicas como argumento? - Unix e Linux Stack Exchange para um script exemplo viabash
)Para começar - existe um pacote Ubuntu / Debian para
melt
(eu tenho o Ubuntu 11.04 com MLT melt 0.6.2); o link fornecido por @Ielton é para o Wiki "Media Lovin 'Toolkit" (MLT), quemelt
faz parte (mas tambémopenshot
ekdenlive
). Aqui está o link para os arquivos de texto da documentação em seu git: mltframework.org/mlt.git/tree - docs / ; note que o wiki possui uma página sobre BuildScripts .Por enquanto, o maior (único) problema que tenho com ele é que não consigo encontrar uma maneira de exportar uma composição de vídeo não compactada (como
png
quadros ou algum formato de vídeo não compactado).Primeiro, na linha de comando,
melt
você pode controlar a reprodução através de quadros; por exemplo, para "criar" um espaço em branco branco de 15 quadros e visualizá-lo com omelt
player embutido , useAo visualizar com
melt
, você também receberá informações de linha de comandostderr
para o player incorporado:Uma vez que
melt
é feito jogando para trás, ele não vai sair - assim que você deve digitarq
para sair dela.Devemos observar que existem os chamados "produtores" e "consumidores" em
melt
. Se nada for especificado, o "consumidor" padrão é uma janela SDL (Simple DirectMedia Layer) reproduzindo o vídeo; portanto, o comando acima é o mesmo que:Portanto, se quisermos salvar o que é
melt
exibido, devemos mudar o consumidor para algo que suporte um formato de arquivo. Para obter uma lista de consumidores:O
libdv
consumidor enviará dados formatados em DV diretamente parastdout
, para salvar o vídeo em um.dv
arquivo que você faria:Observe que, dos consumidores listados, o único formato que tentei, que também pode ser aberto em outro aplicativo, é
libdv
(useivlc
como outro aplicativo); no entanto, isso pode falhar para um tipo diferente de transcodificação ( por exemplo, se, em vez de um espaço em branco, eu tentar converter um trecho de.flv
arquivo, o arquivo .dv resultante será aberto e reproduzidovlc
, mas está corrompido ).Agora para a parte de edição ; essencialmente, você pode especificar uma série de estrofes de nome de arquivo / entrada / saída diretamente na linha de comando; digamos que você tenha um arquivo,
video.avi
- então você pode fazer:ou um pouco melhor formatado:
Isto significa que
video.avi
do seu quadro 30 para o seu quadro 79 será reproduzido; então um espaço em branco de 15 quadros; e então avideo.avi
sequência do quadro 30 para o quadro 79 novamente.Para utilizar imagens (por exemplo
.png
) em uma composição de edição de vídeo:Observe que para
test.png
, oin=
parâmetro não precisa ser 0 - no entanto, a imagem será exibida porout
-in
tempo; nesse caso, seria mais fácil simplesmente deixar oin=0
parâmetro totalmente de fora.O bom é que essa sequência de edição pode ser salva - ou como é
melt
chamada, serializada - em um arquivo; observe que existem duas maneiras de tal serialização: "simples" ou XML. Por exemplo, para salvar o comando acima como um arquivo serializado "simples", podemos apenas adicionar a-serialise [filename]
opção ao comando:Agora o
file.melt
contém:Aparentemente, esse formato de arquivo serializado "simples" não contém um caractere "comentando" - se eu tentar adicionar uma
# comment
linha " ",melt
queixa-se de: ' Falha ao carregar "# comment" ' (mas, além disso, parece que uma linha é ignorada e a reprodução continua de qualquer maneira). ".melt
" parece ser uma extensão quemelt
reconhece como um arquivo serializado simples.Agora, para reproduzir novamente esse arquivo serializado, poderíamos, em princípio, apenas chamar
melt file.melt
- no entanto, uma linha de comando mais completa seria:... o que significaria: use o
melt_file
"produtor" para abrirfile.melt
e renderize seus quadros no "consumidor"sdl
(janela).Observe que tenho a experiência de que (digamos) os
.flv
vídeos são reproduzidos sem problemas na linha de comando - no entanto, causam uma falha de segmentação quando são especificados nofile.melt
arquivo serializado!.dv
vídeos produzidos pormelt
si só, parecem funcionar bem emfile.melt
...O tipo XML de serialização pode ser alcançado usando a
-consumer xml:
opção (em vez de-serialise
) - portanto, o exemplo acima seria agora:Para "reproduzir" o
file.mlt
arquivo XML recém-gerado , agora é possível executar diretamentemelt file.mlt
- ou, uma linha de comando mais completa seria:... o que significaria: use o
xml
"produtor" ( observe que anteriormente era consumidor ) para abrirfile.mlt
e renderizar seus quadros no "consumidor"sdl
(janela).Observe que, nesse caso, eu experimentei que os mesmos
.flv
vídeos que causaram segfault com um arquivo de serialização simples - funcionam bem com um arquivo de serialização XML!Nesse caso, o
file.mlt
arquivo XML resultante possui muito mais configurações, como resolução, taxa de quadros, informações de codec etc. - mas também é mais difícil trabalhar diretamente em um editor de texto:fonte
A solução ffmpeg para esse problema é mais ou menos assim:
Ele usa pipes nomeados, portanto, não há como criar arquivos temporários no disco e permite cortar pedaços dos clipes de vídeo e adicionar imagens.
Este exemplo usa o tempo de 30 a 60 da primeira entrada e, em seguida, adiciona o primeiro minuto da segunda entrada, insere um arquivo de imagem e o terceiro vídeo inteiro.
Código retirado de:
Página de concatenação do ffmpeg: https://trac.ffmpeg.org/wiki/Concatenate
página de superusuário Usando ffmpeg para cortar vídeo
página de superusuário https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg
fonte
npm
instalá-lo), então pensei em mencioná-loEu também tenho procurado por essa ferramenta e parece que derreter é a ferramenta para o trabalho, no entanto, a documentação é quase impossível de entender / ausente. Você pode fazer quase qualquer combinação de edição. Eu tinha algumas filmagens de 'câmera de ação' ... o som era inutilizável. Entrei no vídeo (h264), adicionei um fade de 60 quadros e substituí o som por uma trilha sonora usando:
Você pode ler mais sobre isso aqui . O site principal está aqui .
fonte