FFMPEG extrai o áudio com a duração exata do quadro do vídeo

3

Para um pacote de cinema digital, preciso extrair a faixa de áudio (.wav, 48000 khz, 16 bits) dos filmes Quicktime (neste caso, com codec Prores ou Photo-JPEG). O problema é que a duração do arquivo de áudio deve ter o mesmo tamanho exato em quadros da trilha de vídeo. O arquivo de onda de saída deve ter 48000 khz e 24 bits.

Este é o comando que tentei:

C:\Program Files (x86)\FFMPEG\bin\ffmpeg.exe" -i "input\path\file.mov" -vn -acodec pcm_s24le -ar 48000 "output\path\audio.wav

Eu notei que muitas vezes a faixa de áudio é um par de quadros maior que o filme Quicktime de entrada. Mas quando eu extraio o áudio com o Adobe Media Encoder, ele sempre tem o mesmo tamanho de quadro. Isso pode ser verificado importando áudio e vídeo no After Effects, por exemplo.

Exemplo:

  • input.mov consiste em 1000 quadros,
  • ffmpeg output.wav tem algo como 1003 quadros,
  • AME output.wav tem 1000 quadros

Existe uma maneira de garantir que o ffmpeg não produza faixas de áudio com um tamanho de quadro menor ou maior que o vídeo original?

ffmpeg started on 2015-01-29 at 20:32:44
Report written to "ffmpeg-20150129-203244.log"
Command line:
"C:\Program Files (x86)\FFMPEG\bin\ffmpeg.exe" -report -i "G:\01_dcp_pipeline\02_a_sound_ready\01_WOE_IS_ME_1080P_24FPS.mov" -vn -acodec pcm_s24le -ar 48000 "G:\01_dcp_pipeline\02_a_sound_ready\01_WOE_IS_ME_1080P_24FPS2.wav"
ffmpeg version N-69375-g4155f2d Copyright (c) 2000-2015 the FFmpeg developers
  built on Jan 28 2015 22:14:02 with gcc 4.9.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
  libavutil  54. 18.100 / 54. 18.100
  libavcodec 56. 21.101 / 56. 21.101
  libavformat56. 19.100 / 56. 19.100
  libavdevice56.  4.100 / 56.  4.100
  libavfilter 5.  9.101 /  5.  9.101
  libswscale  3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc53.  3.100 / 53.  3.100
Splitting the commandline.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Reading option '-i' ... matched as input file with argument 'G:_dcp_pipeline_a_sound_ready_WOE_IS_ME_1080P_24FPS.mov'.
Reading option '-vn' ... matched as option 'vn' (disable video) with argument '1'.
Reading option '-acodec' ... matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'pcm_s24le'.
Reading option '-ar' ... matched as option 'ar' (set audio sampling rate (in Hz)) with argument '48000'.
Reading option 'G:_dcp_pipeline_a_sound_ready_WOE_IS_ME_1080P_24FPS2.wav' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file G:_dcp_pipeline_a_sound_ready_WOE_IS_ME_1080P_24FPS.mov.
Successfully parsed a group of options.
Opening an input file: G:_dcp_pipeline_a_sound_ready_WOE_IS_ME_1080P_24FPS.mov.
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000442d7c0] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000442d7c0] ISO: File Type Major Brand: qt  
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000442d7c0] Before avformat_find_stream_info() pos: 890445130 bytes read:186331 seeks:4
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000442d7c0] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000442d7c0] After avformat_find_stream_info() pos: 6279910 bytes read:1510667 seeks:6 frames:26
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'G:_dcp_pipeline_a_sound_ready_WOE_IS_ME_1080P_24FPS.mov':
  Metadata:
major_brand : qt  
minor_version   : 537199360
compatible_brands: qt  
creation_time   : 2014-07-02 14:05:41
  Duration: 00:02:23.00, start: 0.000000, bitrate: 49815 kb/s
Stream #0:0(eng), 25, 1/24: Video: prores (apch / 0x68637061), yuv422p10le(bt709), 1920x1080, 49684 kb/s, SAR 1920:1920 DAR 16:9, 24 fps, 24 tbr, 24 tbn, 24 tbc (default)
Metadata:
  creation_time   : 2014-07-02 14:05:41
  handler_name: Apple Alias Data Handler
  encoder : Apple ProRes 422 (HQ)
  timecode: 00:00:00:00
Stream #0:1(eng), 1, 1/48000: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 120 kb/s (default)
Metadata:
  creation_time   : 2014-07-02 14:05:41
  handler_name: Apple Alias Data Handler
  timecode: 00:00:00:00
Stream #0:2(eng), 0, 1/24: Data: none (tmcd / 0x64636D74) (default)
Metadata:
  creation_time   : 2014-07-02 14:08:05
  handler_name: Apple Alias Data Handler
  timecode: 00:00:00:00
Successfully opened the file.
Parsing a group of options: output file G:_dcp_pipeline_a_sound_ready_WOE_IS_ME_1080P_24FPS2.wav.
Applying option vn (disable video) with argument 1.
Applying option acodec (force audio codec ('copy' to copy stream)) with argument pcm_s24le.
Applying option ar (set audio sampling rate (in Hz)) with argument 48000.
Successfully parsed a group of options.
Opening an output file: G:_dcp_pipeline_a_sound_ready_WOE_IS_ME_1080P_24FPS2.wav.
    
por schmiddl 29.01.2015 / 13:36

2 respostas

2

Eu encontrei a solução para o meu problema. O filtro "apad" junto com a tag "-shortest" estenderá uma trilha sonora para o mesmo comprimento de uma trilha de vídeo no ffmpeg.

Isto é como usar o filtro apad na linha de comando do Windows (os parâmetros de codec de vídeo e áudio são apenas exemplos):

"C:\Program Files (x86)\FFMPEG\bin\ffmpeg.exe" -i PATH/TO/INPUTVIDEO -filter_complex "[0:1]apad" -vcodec prores -profile:v 3 -acodec pcm_s24le -ar 48000 -shortest PATH/TO/OUTPUTVIDEO

Mais sobre o filtro apad na documentação do ffmpeg: link

    
por 11.03.2015 / 13:53
0

Não é indicado qual é o tamanho da imagem do seu MOV e, portanto, se você precisará ou não acelerar o áudio para corresponder a uma aceleração de 23.976 a 24.000 de seu vídeo para corresponder às especificações do DCI DCI. Este link descreve um fluxo de trabalho do DCP que pode ser útil: link (estou ciente de que isso não acontece diretamente abordar a questão do OP, mas pode indiretamente resolver o problema.)

    
por 28.02.2015 / 23:36