Como ler a seguinte instrução ffmpeg?

0

Sou novato em processamento de vídeo.

  1. Eu gostaria de entender como ler as seguintes instruções ffmpeg abaixo

    import subprocess
    L=subprocess.call('ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True)
    
  2. Por meio dessa instrução, como posso adaptá-la para obter todos os quadros de um determinado vídeo?

Obrigado

    
por Joseph 25.10.2017 / 17:45

2 respostas

1
% bl0ck_qu0te%

Seu comando ffmpeg é semi-ofuscado por script, portanto, o comando real não é conhecido, mas aqui está uma explicação de cada opção:

  • -i indica a entrada.
  • -r 1 define a taxa de quadros de saída para 1. Isso não é necessário se você quiser imprimir uma única imagem ou se quiser imprimir todas as imagens. Neste exemplo, ele é usado para gerar um quadro por segundo, o que pularia muitos quadros.
  • -s qvga define a largura de saída x altura como "qvga", que é um alias para 320x240.
  • -t 1 define a duração da saída para 1 segundo. Isso não é necessário se você quiser produzir uma única imagem ou se quiser produzir todas as imagens. Muitas vezes, é adicionado por usuários novatos que tentam gerar uma única imagem, mas -frames:v 1 deve ser usado em seu lugar.
  • -f image2 Uma opção muitas vezes supérflua usada para definir o formato de saída ou muxer. É usado se o seu nome de saída for ambíguo (talvez devido ao script). Caso contrário, ffmpeg escolherá automaticamente o muxer apropriado para saídas de imagens.
% bl0ck_qu0te%

O comando mais simples e não formatado para obter todos os quadros é:

ffmpeg -i input %04d.png

Isso produzirá 0001.png , 0002.png , 0003.png , etc. Se você quiser mais do que uma sequência numérica, pode usar algo como output_%05d.png , o que resultaria em output_00001.png .

Para mais informações, consulte Documentação do FFmpeg: Image Muxer .

    
por LordNeckbeard 25.10.2017 / 18:35
1
import subprocess
L=subprocess.call('ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True)

Informação:

  1. import subprocess : O módulo de subprocesso permite que você inicie novos aplicativos a partir do seu programa em Python.

  2. L=subprocess.call(...) : atribua a saída do método call() à variável L .

  3. ffmpeg -i %s -r 1 -s qvga -t 1 -f image2 %s' % (videoName,frameName), shell=True : Comando para executar aqui ffmpeg

  4. -i %s : nome do arquivo de entrada obtido da variável videoName - > input file url

  5. -r 1 : taxa de quadros.

  6. -s qvga : tamanho do quadro.

  7. -f image2 : forçar o formato de arquivo de entrada ou saída

  8. -t 1 : Quando usado como uma opção de saída (antes de um URL de saída), pare de gravar a saída após a duração atingir        duração.

  9. % (videoName,frameName) : formatação de string do Python que substituirá %s sequências na sequência anterior pelos itens na tupla.

  10. shell=True : use recursos de shell específicos, como divisão de palavras ou expansão de parâmetros

Uso:

#!/usr/bin/env python

import subprocess 
L=subprocess.call('ffmpeg -r 5 -i out.ogv fmprg_%04d.png', shell=True)
L()
  • Tornar executável: chmod u+x filename.sh ,
  • Executar com: ./filename.sh

Informação:

fmprg_%04d.png : cria imagens com 0000, 0001, 0002, 0004, ... entre fmprg_ e .png .

Leia:

man ffmpeg

link

    
por George Udosen 25.10.2017 / 18:41