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 o meu arquivo de saída seja:

  • 1600 × 900
  • no contêiner mkv
  • usando o decodificador de vídeo H.264
  • usando o decodificador de áudio aac
  • proporção de 16: 9 (obviamente ...)
  • mesmo volume de áudio como entrada
  • 60 fps
  • com nada recortado 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). Eu vou converter alguns arquivos longos de 2h, então sim, um dia por arquivo seria demais ...

Aqui vão os parâmetros que eu 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º passe

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.

Por fim, 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º Passe. 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 1ª passagem para completar agora, leva muito tempo.

Saída do 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, tentei executar com o parâmetro -f matroska . Desta vez eu também tentei fazer apenas uma passagem, pois achei que a segunda consumia muito tempo.

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, apenas sem -f matroska , mas não ajudei. A mesma coisa aconteceu.

Aqui está o que foi a saída do 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 wnerw 15.11.2014 / 01:54

1 resposta

1

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

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, para obter qualquer saída:

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

  • Altere -acodec aac para -acodec aac -strict experimental , pois o codificador AAC interno é 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ê mencionou que a taxa de bits não é constante em todo o vídeo. Isso é esperado, já que seria muito dispendioso gastar x bits em todos os quadros. Você deseja salvar a taxa de bits onde puder e gastá-la em quadros que precisam dela. Se você quer um bitrate restrito, você precisa de 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 o bitrate (indiretamente) seria usar o modo CRF . Você configura trocando -b:v para -crf e então definindo 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 o 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ê pode 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.

Frame- / samplerate and filtering

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 filtro yadif , pois é para o desentrelaçamento. Como o Big Buck Bunny obviamente não está entrelaçado, remova o filtro.

Velocidade

A predefinição de codificação tem o maior impacto na velocidade. Consulte o Guia de codificação H.264 para obter 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.

    
por 17.11.2014 / 07:35