Faça o formato exato de mp4 (H264) para fazer o upload para o youtube

5

Com ffmpeg eu estou convertendo vídeo de mp3 e imagem para fazer o upload para o youtube. Após o upload, a conversão falha. Razões são desconhecidas. Eu acredito que o problema está no formato. By the way Se eu estou enviando arquivo de 5 minutos, ele falhar se eu carregar 30 segundos deste arquivo é bem-sucedido.

Eu baixei o arquivo mp4 do youtube. Então eu fiz o upload, é feito muito rápido. Então, uma boa solução seria converter vídeos para o mesmo formato que é feito pelo google.

Eu recebi a seguinte saída por mpeg:

ffmpeg version N-44264-g070b0e1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Sep  7 2012 17:38:57 with gcc 4.7.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-pthreads --enable-runt
ime-cpudetect --enable-avisynth --enable-bzlib --enable-frei0r --enable-libass -
-enable-libcelt --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-l
ibfreetype --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopenj
peg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheo
ra --enable-libutvideo --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-li
bvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --ena
ble-zlib
  libavutil      51. 72.100 / 51. 72.100
  libavcodec     54. 55.100 / 54. 55.100
  libavformat    54. 25.105 / 54. 25.105
  libavdevice    54.  2.100 / 54.  2.100
  libavfilter     3. 16.100 /  3. 16.100
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'youtubetrack0.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2012-10-02 22:58:57
  Duration: 00:06:46.66, start: 0.000000, bitrate: 176 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu
v420p, 450x360, 78 kb/s, 6 fps, 6 tbr, 12 tbn, 12 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 95
kb/s
    Metadata:
      creation_time   : 2012-10-02 22:58:57
      handler_name    : IsoMedia File Produced by Google, 5-11-2011

É possível construir parâmetros ffmpeg para que isso forneça o mesmo formato que o google internamente faz? A informação acima é suficiente?

Eu não consegui construir os parâmetros necessários.

Por exemplo, não entendo como definir tbn e o que significa 95 kb / s em "Stream # 0: 1 (und): Audio:".

Agora eu só faço:

Informações que tenho:

ffmpeg version N-44998-gdf82454 Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct  2 2012 23:03:12 with gcc 4.7.1 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3
 --disable-pthreads --enable-runtime-cpudetect --enable-avisynth --enable-bzlib
--enable-frei0r --enable-libass --enable-libcelt --enable-libopencore-amrnb --en
able-libopencore-amrwb --enable-libfreetype --enable-libgsm --enable-libmp3lame
--enable-libnut --enable-libopenjpeg --enable-librtmp --enable-libschroedinger -
-enable-libspeex --enable-libtheora --enable-libutvideo --enable-libvo-aacenc --
enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enab
le-libxavs --enable-libxvid --enable-zlib
  libavutil      51. 73.101 / 51. 73.101
  libavcodec     54. 63.100 / 54. 63.100
  libavformat    54. 29.105 / 54. 29.105
  libavdevice    54.  3.100 / 54.  3.100
  libavfilter     3. 19.102 /  3. 19.102
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 16.100 /  0. 16.100
  libpostproc    52.  1.100 / 52.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf54.25.105
  Duration: 00:06:46.81, start: 0.000000, bitrate: 129 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p, 450x360,
 3392 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 127
 kb/s
    Metadata:
      handler_name    : SoundHandler

Este vídeo falha na conversão no youtube.

Eu também tentei usar outro parmam vcode e extensões do arquivo de saída (mp4, wmv, avi), mas falhei também.

Ficaria muito grato pela ajuda.

    
por WHITECOLOR 04.10.2012 / 08:12

2 respostas

5

O YouTube deve poder usar quase tudo o que você alimenta. Ele sempre transcodificará seu vídeo, independentemente dos formatos exatos que você fornecer, por exemplo, porque ele precisa fornecer resoluções diferentes ou outros contêineres, como FLV ou WebM, para seu vídeo, mesmo que esteja em um contêiner MP4 quando carregado.

Um comando básico para produzir vídeo para o YouTube seria:

ffmpeg -i input.avi -c:v libx264 -c:a aac -strict experimental -b:a 192k out.mp4

Você só precisará alterar a qualidade e, eventualmente, aumentar a taxa de quadros com -r e o tamanho do vídeo com -s:v para corresponder ao especificações de codificação avançadas , para que o seu vídeo não seja pilar ou letterbox (isto é, com bordas pretas).

Para mais opções e uma introdução geral ao FFmpeg, leia nossa entrada no blog: FFmpeg: A melhor ferramenta de manipulação de vídeo e áudio

Mas você está criando um vídeo com uma imagem em loop, então é necessário informar ao FFmpeg para fazer o loop da imagem com -loop 1 pelo tempo especificado por -t , por exemplo, 5 minutos:

ffmpeg -loop 1 -f image2 -i image.jpg -c:v libx264 -t 00:05:00.000 out.mp4

Com um fluxo de áudio, basta adicionar o segundo parâmetro -i :

ffmpeg -loop 1 -f image2 -i image.jpg -i audio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -t 00:05:00.000 out.mp4

O FFmpeg irá então mapear os streams automaticamente, sua imagem para vídeo h.264 e seu áudio para o AAC:

Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)
  Stream #1:0 -> #0:1 (mp3 -> aac)

Este vídeo deve ser compatível com o YouTube, com taxa de quadros de 25. Se você quiser alterar isso, use -r e defina outra taxa de quadros. Carreguei com êxito o vídeo no YouTube com uma taxa de quadros de 1 - porque realmente não importa se você tem apenas uma imagem e uma faixa de áudio no loop de fundo.

    
por 04.10.2012 / 09:40
7

Essas opções funcionam para mim, como em: o vídeo não passa por processamento / recodificação adicional pelo youtube após o upload.

ffmpeg -i SOURCE -c:v libx264 -flags:v "+cgop" -g 15 -bf 1 -coder ac -profile:v high -crf 25 -pix_fmt yuv420p -c:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart OUTPUT.mp4

Você pode querer experimentar -bf 2 em vez de 1, mas isso resultou em recodificação no meu teste. Para obter uma qualidade de vídeo mais alta, diminua a configuração de -crf, geralmente 20 a 28 é o intervalo recomendado com valores mais baixos produzindo maior qualidade. Eu não tentei fazer codificação de duas passagens, cbr ou abr, mas deve funcionar. Você também pode diminuir o áudio para 192k bitrate.

IMPORTANTE : observe que você precisará definir -g X como metade da sua taxa de quadros. Neste exemplo, estou codificando um vídeo de 30fps, então defini o GOP como 15. Se sua fonte for 24fps, defina-a como 12, se for 60fps, defina-a como 30.

Eu sei que essa é uma pergunta antiga, mas é o primeiro resultado no Google quando você pesquisa "opções do ffmpeg para o youtube".

Editar: recebi essas opções do link

    
por 07.08.2016 / 18:10