avconv em vários threads

9

É possível executar trabalhos em vários processadores ou threads para acelerar o avconv?
Existe algum recurso em andamento, se não me pergunto por quê?

Shubham Chaudhary
fonte

Respostas:

11

Você está após o -threads opção de avconv. A configuração mais segura seria:

 -threads auto

mas você também pode definir um número inteiro lá se quiser experimentar um pouco. Um FFmpeg moderno (agora o padrão no Ubuntu) define isso auto por padrão, como visto nesta seção das páginas de manual 'ffmpeg-all':

threads integer (decoding/encoding,video)

Set the number of threads to be used, in case the selected
codec implementation supports multi-threading.

  Possible values:

     auto, 0
     automatically select the number of threads to set

 Default value is auto.

Nota 2 pontos importantes:

  1. Essa configuração só terá efeito se o codec escolhido suportar multi-threading
  2. É possível definir a contagem de threads para fluxos individuais em vez de simplesmente tentar uma configuração global de threads
andrew.46
fonte
11
Corrija-me se você tiver uma fonte em contrário, mas tenho a impressão de que o Avconv e o avplay ainda usam -threads auto como padrão, se não houver outra especificação. O monitor do sistema parece fazer backup disso.
Elder Geek
11
Eu acredito que depende do codec usado para transcodificação. Isso poderia ser formalmente testado, o que certamente tornaria um teste interessante. As informações que eu pude encontrar sobre o problema online não são particularmente úteis. Outra questão seria a versão do FFmpeg usada, as opções de threads foram usadas de maneira diferente em versões mais antigas ...
andrew
11
Sim. FFmpeg e avconv foram em direções um pouco diferentes desde o garfo. Pesquisas adicionais indicam que -threads auto é o padrão no avconv se você usar uma das predefinições na linha de comando.
Elder Geek
3

Se você estiver fazendo transcodificação de áudio de muitos arquivos, consulte o GNU Parallel. Ele receberá uma lista de arquivos como entrada e os processará em paralelo, com base no número de núcleos em seu sistema. Por exemplo, aqui está um exemplo do bash que converterá música no formato opus audio em paralelo usando ffmpeg.

find ./* -depth -type f -name \*.ogg -o -name \*.flac -o -name \*.m4a -o -name \*.mp3 -o -name \*.ogg | parallel -j+0 --gnu nice -n 19 ffmpeg -i "{}" -acodec libopus "{.}.opus" -loglevel quiet
mmstick
fonte