Reutilize as saídas de transcodificação para gerar vários arquivos com AvConv

1

Estou tentando encontrar informações sobre como transcodificar um arquivo em várias saídas em uma foto , mas parece que não consigo. A maioria dos resultados encontrados descreve o oposto: mesclar vários arquivos em um.

Aqui está a situação:

Eu tenho uma webcam IP que faz um "dump" ou captura bruta (embora eu não goste de dizer "raw" porque pode ser confundido com o formato .raw) que consiste em dois streams: Um vídeo H264 e um áudio PCM.

Eu preciso transcodificar essa captura "raw / dump" em três arquivos MP4, dois deles com áudio e vídeo (H264 + AAC) e o terceiro com apenas o áudio AAC; mais especificamente:

  1. Um arquivo com a mesma resolução que o original, garantindo que ele seja executado em 30 fps, tem um áudio aac a 128kbps e o formato de pixel é yuv420p (o formato de pixel do stream de vídeo "despejado" é yuvj420p, o que torna o stream no unplayable diretamente no Chrome ... pelo menos por enquanto).

  2. Um arquivo com os mesmos recursos acima, mas metade da resolução.

  3. Um arquivo contendo apenas o áudio AAC.

Eu tenho o comando para fazer com que o primeiro arquivo funcione muito bem (embora eu tenha algum comentário sobre esse arquivo, ele será muito apreciado também):

    /usr/bin/avconv "/home/borrajax/Videos/original.dump" \
    -acodec libvo_aacenc -ac 1 -ab 128k -ar 44100 \
    -vcodec libx264 -preset fast -r 30 -pix_fmt yuv420p \
    "/home/borrajax/Videos/transcoded.mp4"

Provavelmente eu poderia salvar algumas das opções, mas a questão é que a configuração da câmera pode ser modificada, então eu preciso ter certeza de que o arquivo .mp4 resultante tem o formato que eu preciso (é por isso que eu especifiquei tantos)

Meu palpite é que provavelmente é uma boa idéia (eu digo "provavelmente" porque eu não sei muito sobre codificação de vídeo) tentando transcodificar os três arquivos de uma só vez, reutilizando dados transcodificados para economizar tempo.

Por exemplo: o vídeo com metade da resolução do original terá exatamente o mesmo áudio que o "grande", então não há necessidade de transcodificá-lo novamente. Obviamente, a mesma coisa vale para o arquivo de áudio. Não deve haver necessidade de transcodificar três vezes. Além disso, talvez (e aqui, não sei o que será melhor) também posso reutilizar o fluxo de vídeo. Como eu preciso de dois vídeos com um formato de pixel e fps diferente do original talvez seja digno transcodificar apenas uma vez (como eu já estou fazendo no comando acima) e então pegar aquele stream de vídeo que já tem 30fps e formato de pixel yuv420p e só fazer sua resolução meio.

Eu acho que será uma boa idéia resumir ... como eu posso encadear (pipe?) múltiplas saídas com o avconv, aplicando diferentes opções para cada uma delas?

Usando:

  • Ubuntu 12.04 LTS
  • avconv versão 0.8.5-4: 0.8.5-0ubuntu0.12.04.1
por BorrajaX 05.03.2013 / 17:54

1 resposta

1

Provavelmente, a maneira mais eficiente de fazer isso sem duplicar o esforço seria com um script que faz várias coisas e depois multiplica os resultados para criar os arquivos finais.

Por exemplo:

  1. transcreva o áudio do original para o resultado AAC em audio.aac

    avconv -i <input> -c:a libfaac -vn audio.aac
    
  2. transcodifique o vídeo do original para a resolução completa em temp-full-vid.mp4

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -an temp-full-vid.mp4
    
  3. transcodifique o vídeo do original para a metade da resolução em temp-half-vid.mp4

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -filter:v scale=-1:ih/2 -an temp-half-vid.mp4
    
  4. mux temp-full-vid.mp4 e audio.aac em full.mp4

    avconv -i temp-full-vid.mp4 -i audio.aac -c copy -map 0 -map 1 full.mp4
    
  5. mux temp-half-vid.mp4 e audio.aac na metade.mp4

    avconv -i temp-half-vid.mp4 -i audio.aac -c copy -map 0 -map 1 half.mp4
    
  6. exclua temp-full-vid.mp4 e temp-half-vid.mp4

Isso deixa você com os 3 arquivos full.mp4, half.mp4 e audio.aac que você está procurando, sem nenhum processo desnecessário de transcodificação.

    
por 05.03.2013 / 18:25