avconv dá saída vazia


0

Eu tentei converter um arquivo de vídeo para um formato desejado usando o FFmpeg através do WinFF. Eu tenho demandas específicas sobre alguns aspectos do arquivo de saída, enquanto outros aspectos devem ser definidos de uma forma que dará a melhor qualidade na saída. Para esclarecer - eu quero que meu arquivo de saída seja:

  • 1600 × 900
  • em contêiner mkv
  • usando decodificador de vídeo H.264
  • usando um decodificador de áudio aac
  • Proporção de 16: 9 (obviamente ...)
  • mesmo volume de áudio como entrada
  • 60 fps
  • com nada cortado ou imagem perdendo sua proporção original.

Não necessariamente

  • usando todos os 48 canais de áudio.

Qualquer outro aspecto do arquivo que não afete os listados acima deve oferecer a melhor qualidade possível. Bem, não literalmente. Eu não quero um arquivo que levaria metade do meu disco rígido, ou que levaria uma semana para converter.

De qualquer forma, este foi um pouco do que estou fazendo atualmente. Eu tentei descobrir tudo sozinho, mas o que eu fiz me deu um arquivo .mkv vazio junto com um log e um arquivo de 234,5 mb .log. [Alguma coisa]. Mais do que isso - a conversão demorou muito. Eu estava convertendo um Big Buck Bunny de 10 minutos de duração, e levou algo entre 1-2h (provavelmente). Vou converter alguns arquivos longos de 2h, então sim, um dia por arquivo seria demais ...

Aqui vai os parâmetros que usei.

1º passe:

avconv -threads 8  -i bbb_sunflower_native_60fps_normal.mp4 \
-acodec aac -vcodec h264 -b:v 50000k  -r:v 60  -filter:v yadif,scale=1600:900 \
-aspect 16:9 -b:a 320k  -r:a 96000  -ac 48 -vol 256  -f null -an \
-passlogfile "/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.log" \
-pass 1  -y /dev/null

2ª passagem

avconv -threads 8  -y -i bbb_sunflower_native_60fps_normal.mp4 -acodec aac \
-vcodec h264 -b:v 50000k  -r:v 60  -filter:v yadif,scale=1600:900 -aspect 16:9 \
-b:a 320k  -r:a 96000  -ac 48 -vol 256 \
-passlogfile "/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.log" -pass 2 \
"/home/wnerw/Wideo/bbb_sunflower_native_60fps_normal.mkv"

Eu sei, valores como 50000k e 96000 parecem loucos, mas eu só queria testar isso.

Finalmente o que estou procurando!

  1. O que eu fiz de errado na primeira vez?
  2. Quais parâmetros me darão a saída desejada?

Se alguém fosse super legal, eu realmente apreciaria dois conjuntos de parâmetros - um para uma saída melhor, mas não louca, e um para o melhor que eu poderia realmente conseguir. Eu sei que o último pode queimar minha CPU, levar um ano para processar ou ser 10 × maior do que todo o meu disco. É só pela minha curiosidade.

EDIT Aqui vai a saída do terminal do 1º Pass. Na verdade, agora eu lembrei que o segundo passe não aconteceu. Eu não posso recuperar o que estava no terminal onde as coisas falharam ao ir para a segunda passagem. Eu apenas pressionei enter e o terminal inteiro desapareceu. Eu não posso esperar pela primeira passagem para completar agora, leva muito tempo.

Saída terminal:

avconv version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Aug 10 2014 18:16:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
/home/wnerw/Pobrane/bbb_sunflower_native_60fps_normal.mp4':
Metadata:
major_brand     : isom
minor_version   : 1
compatible_brands: isomavc1
creation_time   : 2013-12-24 11:10:47
title           : Big Buck Bunny, Sunflower version
artist          : Blender Foundation 2008, Janus Bager Kristensen 2013
comment         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre           : Animation
composer        : Sacha Goedegebure
Duration: 00:10:34.56, start: 0.000000, bitrate: 10487 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 4000x2250 [PAR 1:1 DAR 16:9], 10002 kb/s,
60 fps, 60 tbr, 60k tbn, 120 tbc
Metadata:
  creation_time   : 2013-12-24 11:10:47
Stream #0.1(und): Audio: mp3, 48000 Hz, stereo, s16p, 160 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
Stream #0.2(und): Audio: ac3, 48000 Hz, 5.1, fltp, 320 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
[libx264 @ 0x16a36e0] using SAR=1/1
[libx264 @ 0x16a36e0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x16a36e0] profile Main, level 5.0
Output #0, null, to '/dev/null':
Metadata:
major_brand     : isom
minor_version   : 1
compatible_brands: isomavc1
creation_time   : 2013-12-24 11:10:47
title           : Big Buck Bunny, Sunflower version
artist          : Blender Foundation 2008, Janus Bager Kristensen 2013
comment         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre           : Animation
composer        : Sacha Goedegebure
encoder         : Lavf54.20.4
Stream #0.0(und): Video: libx264, yuv420p, 1600x900 [PAR 1:1 DAR 16:9], q=-1--1, pass 1,
50000 kb/s, 90k tbn, 60 tbc
Metadata:
  creation_time   : 2013-12-24 11:10:47
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libx264)
Press ctrl-c to stop encoding
frame=    5 fps=  0 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   13 fps= 13 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   21 fps= 13 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   29 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   37 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   45 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit
frame=   51 fps= 14 q=0.0 size=       0kB time=10000000000.00 bitrate=   0.0kbit

EDIT2 Como sugerido, eu tentei correr com -f matroska parâmetro. Desta vez eu também tentei fazer apenas uma passagem, pois achei que a segunda era muito demorada.

Aqui está um comando que eu usei para converter:

avconv -threads 8  -y -i bbb_sunflower_native_60fps_normal.mp4
-acodec aac -vcodec h264 -f matroska -b:v 10000k  -r:v 60  
-filter:v yadif,scale=1600:900 -aspect 16:9 -b:a 320k r:a 96000
-ac 48 -vol 256  "bbb_sunflower_native_60fps_normal.mkv"

Mas, infelizmente, o terminal fecha assim que eu pressiono enter para confirmar a saída do avconv. Eu tentei o mesmo comando, só sem -f matroskamas eu não ajudei. A mesma coisa aconteceu.

Aqui está o que foi a saída avconv:

avconv version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
built on Aug 10 2014 18:16:02 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Guessed Channel Layout for  Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'bbb_sunflower_native_60fps_normal.mp4':
Metadata:
major_brand     : isom
minor_version   : 1
compatible_brands: isomavc1
creation_time   : 2013-12-24 11:10:47
title           : Big Buck Bunny, Sunflower version
artist          : Blender Foundation 2008, Janus Bager Kristensen 2013
comment         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
genre           : Animation
composer        : Sacha Goedegebure
Duration: 00:10:34.56, start: 0.000000, bitrate: 10487 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 4000x2250 [PAR 1:1 DAR 16:9], 10002 kb/s,
60 fps, 60 tbr, 60k tbn, 120 tbc
Metadata:
  creation_time   : 2013-12-24 11:10:47
Stream #0.1(und): Audio: mp3, 48000 Hz, stereo, s16p, 160 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
Stream #0.2(und): Audio: ac3, 48000 Hz, 5.1, fltp, 320 kb/s
Metadata:
  creation_time   : 2013-12-24 11:10:49
[libx264 @ 0xe96580] using SAR=1/1
[libx264 @ 0xe96580] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0xe96580] profile High, level 4.2
[libx264 @ 0xe96580] 264 - core 142 r2389 956c8d8 - H.264/MPEG-4 AVC codec - Copyleft
2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0
analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16
chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2
threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0
bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1
weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0
rc_lookahead=40 rc=abr mbtree=1 bitrate=10000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69
qpstep=4 ip_ratio=1.25 aq=1:1.00
encoder 'aac' is experimental and might produce bad results.
Add '-strict experimental' if you want to use it.
Press ENTER to continue...

Por favor, mostre a saída de linha de comando completa e não cortada de ambos os comandos. 50 MBit / s é um pouco um pouco demais, mas é 60 fps mais que tudo. Note que você não precisa do filtro yadif, pois sua entrada provavelmente não está entrelaçada. Além disso, -c:a aac necessidades -strict experimental tanto quanto eu sei (pelo menos para ffmpeg faz). Eu provavelmente posso postar uma resposta uma vez que vi a saída. Obrigado.
slhck

@slhck Eu adicionei a saída do terminal da primeira passagem no meu post. Além disso, dei uma pequena explicação sobre o que poderia ter acontecido. Eu acho que as coisas falharam ao passar da 1ª passagem para a 2ª passagem.
wnerw

Você está usando -f null, o que basicamente significa "saída nada". Experimentar -f mp4 em vez de. De onde você tirou o primeiro comando?
slhck

Eu usei o WinFF, como dito no começo. Eu fiz um preset com apenas aac e h264, e depois apliquei todas as outras coisas através da GUI. O programa apenas me deu um comando pronto ... Não posso simplesmente fazer algo como -f mkv? Eu quero meu vídeo para usar o contêiner mkv ...
wnerw

Sim, você pode usar -f matroska para saída MKV. Meu entendimento é que -f null diz ao ffmpeg / avconv para não gerar nada, o que explicaria o problema. Você pode tentar com um comando atualizado?
slhck

Respostas:


1

TL; DR: Eu usaria isso para alta qualidade e lenta codificação de uma passagem:

avconv -threads 8 -i bbb_sunflower_native_60fps_normal.mp4 \
-c:a aac -strict experimental -c:v h264 -crf 16 -preset veryslow \
-filter:v scale=1600:900 -aspect 16:9 -b:a 192k -ac 48 -vol 256 output.mp4

Primeiro de tudo, para obter qualquer resultado:

  • mudança -f null para -f mp4 ou -f matroska, dependendo se você quer MP4 ou MKV como saída. Se você fizer uma codificação de uma passagem, não precisará disso, pois o nome do arquivo de saída também definirá o formato automaticamente.

  • mudança -acodec aac para -acodec aac -strict experimental, já que o codificador interno AAC é considerado instável e precisa desse sinalizador extra

Então, vamos ao comando. Algumas coisas para ajustar aqui:

Controle de taxa de bits e taxa

A taxa de bits é extremamente alta. Você não precisa tanto de vídeo HD de 1600 × 900, mesmo a 60fps. Metade do que seria absolutamente suficiente para a qualidade intocada.

Você menciona que a taxa de bits não é constante durante todo o vídeo. Isso é esperado, já que seria muito dispendioso gastar x bits em cada quadro. Você deseja salvar a taxa de bits onde puder e gastá-la em quadros que precisam dela. Se você quer uma taxa de bits restrita, você precisa Codificação VBV (por exemplo, para um DVD ou streaming), mas é bastante complicado e normalmente não é necessário na prática. Uma codificação CBR de duas passagens forneceria resultados muito bons.

Outra sugestão para definir a taxa de bits (indiretamente) seria usar o Modo CRF . Você configura trocando -b:v para -crf e, em seguida, definir o Fator de Taxa Constante entre 0 e 51. 0 significa sem perdas, 15–18 é de excelente qualidade e 23 é o padrão. Qualquer coisa maior lhe dará degradações de qualidade visíveis. Usar CRF significa que você não pode determinar a taxa de bits antecipadamente, mas fornecerá a melhor qualidade possível.

A taxa de bits de áudio de 320k já é um pouco "demais", mesmo para o AAC-LC e até mesmo para o codificador interno. 192k deve ser o suficiente. Você poderia escolher outro codificador como libfdk-aac, que oferece melhores resultados com taxas de bits menores. Seu ffmpeg precisa ser compilado com suporte para isso, no entanto.

Quadro / samplerate e filtragem

Você não precisa definir a taxa de quadros explicitamente. O framerate de entrada será mantido como está. Você também não precisa necessariamente definir uma taxa de amostragem de 96 kHz para o áudio - depende de quanto de audiófilo você é.

Você não precisa do yadif filtro, como é para desentrelaçamento. Como Big Buck Bunny obviamente não está entrelaçado, remova o filtro.

Rapidez

A predefinição de codificação tem o maior impacto na velocidade. Veja o Guia de codificação H.264 para uma lista de predefinições. Mais lento significa melhor eficiência de compactação (ou seja, tamanho de arquivo menor para a mesma qualidade ao usar CRF ou melhor qualidade ao usar CBR), então escolha a predefinição mais lenta que você pode esperar.


Obrigado novamente! Mantive 320 kbps para áudio, pois posso adicionar trilha sonora aos meus vídeos a partir de mp3s de alta qualidade ou até mesmo alguns formatos sem áudio. Informações sobre presets eram extremamente valiosas! Ele permite que eu converta quando quiser, seja até 15 minutos para um vídeo de 2 horas. Links adicionados às abas para mais pesquisas, obrigado novamente!
wnerw
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.