Eu tenho aproximadamente 3000 clipes de vídeo curtos, cada um com aproximadamente 3 segundos de duração. Eu preciso girar cada um deles 90 graus. Qual é a melhor maneira de fazer isso? Tenho assinatura da Adobe Creative Cloud, além de acesso a máquinas Windows e Mac. Procurando a solução mais fácil para automatizar / processar em lote a rotação de tantos vídeos.
Se você estava se perguntando - os vídeos fazem parte de um curso de e-learning sobre madeira serrada. O aluno vê cada vídeo selecionado aleatoriamente, que é apenas um pequeno clipe de um pedaço de madeira girando. Os vídeos foram filmados para que a madeira (2x4s, etc.) ficasse na horizontal. Mas agora o cliente quer que a madeira seja vertical nos clipes.
Respostas:
Use
ffmpeg
e o filtro "transpose" como sugerido "ruim" . Por exemplo, se seus arquivos são mp4 e estão no diretório atual:O valor da transposição pode ser "1" ou "relógio" para rotação no sentido horário, "2" ou "relógio" para rotação no sentido anti-horário. Existem outros valores que também aplicarão um flip.
O áudio será copiado em fluxo para evitar recodificação desnecessária.
Os metadados de rotação do fluxo de vídeo são limpos neste exemplo. Caso contrário
ffmpeg
, ele será copiado da entrada para a saída, resultando em uma rotação incorreta para os jogadores que prestam atenção a esses metadados (alguns fazem e outros não).Outro exemplo, mais detalhado e flexível, e que mantém o arquivo girado no mesmo diretório com um novo nome:
fonte
Você especificou que está interessado em trabalhar em um grande número de vídeos. Se você possui uma máquina com vários núcleos e usa um
for
loop normal fornecido pelo seu shell, terá um de seus núcleos funcionando a quente, enquanto outros não fazem absolutamente nada. . Isto não é o ideal.O que você deve fazer para esse trabalho está usando
parallel
, uma ferramenta que permite iniciar vários trabalhos ao mesmo tempo e pode fazer tudo o que um loop for pode, mas melhor.Não vou escrever sobre todos os recursos desta ferramenta, mas vou me concentrar na sua tarefa específica.
Uma maneira de iniciar todos esses trabalhos seria:
Aqui
{}
substitui cada nome de arquivo e{.}
substitui o nome do arquivo sem uma extensão.Vou sugerir que você inicie o número de trabalhos que tiver núcleos, tire um. O motivo disso é que seu sistema operacional continuará sendo utilizável, e isso poupará você, caso esteja usando a criptografia de disco rígido (que estará usando o poder de processamento para ler / gravar dados). Para fazer isso, basta adicionar
--jobs -1
à sua linha de comando e você limitará o número de trabalhos.Lembre-se de que nenhuma saída será fornecida até que cada codificação seja concluída. Portanto, você não verá o quanto de cada vídeo é feito.
fonte
Com base nesta resposta, você pode usar ffmpeg com os seguintes comandos para girar um vídeo:
Para processar em lote uma pasta de filmes, você pode usar uma linguagem de programação de sua escolha e percorrer os arquivos. Eu usei linux com python 2.7+ aqui. Você só precisa editar o
folder_movies
caminhopath_to_ffmpeg
e definir seu filmeextension
:Posteriormente, sua pasta de filmes será semelhante a:
A vantagem de usar python é que o código é executado em várias plataformas . A única coisa que você precisa considerar são os caminhos para o diretório e o executável ffmpeg. Para executar isso em uma máquina Windows, você só precisa substituir os caminhos para algo como:
Nota: Não sou especialista em ffmpeg, talvez haja uma maneira de processar em lote diretamente com ele.
fonte
mkdir -p rotated; for f in *.mp4; do ffmpeg -i "$f" -vf transpose=2 rotated/"$f"; done
(supondo que seus arquivos de vídeo sejam .mp4 neste exemplo).