FFMPEG concatir áudio de vídeo saindo de sincronia quando reproduzido

0

Há algum tempo que estou tentando acertar isso, imaginando se alguém já se deparou com algo assim antes.

Estou tentando concatenar uma pasta com vários clipes de vídeo, alguns com som, alguns sem e fotos que foram convertidas em um vídeo de 10 segundos.

Os clipes que não têm áudio e fotos convertidas têm uma faixa mp3 silenciosa adicionada a eles. (Isso também é adicionado aos clipes com som)

O problema aparece quando uma das fotos ou clipes de vídeo convertidos sem áudio está presente e o áudio começa a ficar fora de sincronia levemente, pois você só percebe quando pode ver alguém falando.

O problema também acontece com uma pasta com apenas clipes de vídeo que tenham som se os clipes de vídeo com som não tiverem a faixa silenciosa adicionada também.

O que é estranho é que ao reproduzir o vídeo de saída e o áudio ficar fora de sincronia se você pular para onde ele sai de sincronia ele se consertará, mas ficará fora de sincronia se for reproduzido a partir do começar.

INFORMAÇÕES DA VERSÃO DO FFMPEG:

ffmpeg version 3.3.4-1~16.04.york0 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
configuration: --prefix=/usr --extra-version='1~16.04.york0' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil      55. 58.100 / 55. 58.100
libavcodec     57. 89.100 / 57. 89.100
libavformat    57. 71.100 / 57. 71.100
libavdevice    57.  6.100 / 57.  6.100
libavfilter     6. 82.100 /  6. 82.100
libavresample   3.  5.  0 /  3.  5.  0
libswscale      4.  6.100 /  4.  6.100
libswresample   2.  7.100 /  2.  7.100
libpostproc    54.  5.100 / 54.  5.100

Aqui está o script completo que estou usando abaixo:

cd videoClips

for i in $(ls);do
    if [[ $i =~ .*\.zip ]];then
     echo "ZIP"

     y=${i%.*}
     echo $y

     mkdir tmp_$y
     unzip $i -d tmp_$y

     cd tmp_$y

     for i in $(ls);do
        if [[ $i =~ .*\.jpg$ ]];then
            ffmpeg -loop 1 -i $i -c:v libx264 -c:a aac -vf scale=1280:-2 -r 30 -t 10 -pix_fmt yuv420p $i.mp4
            #Add Silent Audio Track
            ffmpeg -i $i.mp4 -i ../SilentAudio.mp3 -vcodec copy -shortest $i.AUDIO.mp4
            #Remove files
            rm -rf $i.mp4
            rm -rf $i
        fi
    done

    #Add check 
    for F in *.mp4 ; do
        echo "CHECK -> $F"
        result='ffprobe -i $F -show_streams 2>&1 | grep 'Stream #0:1''
        echo "$result"
        #if [[ $result =~ .*aac$ ]];then
    if [[ $result == *"aac"* ]];then
            echo "AUDIO FOUND"
            ffmpeg -i $F -i ../SilentAudio.mp3 -vcodec copy -shortest $F.FIN.mp4
            rm -rf $F
        else
            #echo "AUDIO NOT FOUND"
            ffmpeg -i $F -i ../SilentAudio.mp3 -vcodec copy -shortest $F.FIN.mp4
            rm -rf $F
        fi
    done

    for F in *.mp4 ; do
        ffmpeg -i $F -c copy -bsf:v h264_mp4toannexb -f mpegts $(echo $F | perl -pe 's/mp4$/ts/g');
     done
    ffmpeg -i "concat:$(ls -1v *.ts | perl -0pe 's/\n/|/g;s/\|$//g')" -qscale 0 -c copy -bsf:a aac_adtstoasc $y.mp4
    cd ../
 fi
done    

Eu tenho a sensação de que isso poderia ter algo a ver com a taxa de bits de áudio? Ou possível, os timestamps. Também tentei adicionar o APAD, mas isso pareceu piorar o problema de sincronização.

    
por russell 22.09.2017 / 14:44

0 respostas