Estender o comprimento do primeiro quadro em vídeo com ffmpeg

0

Estou tentando aumentar o primeiro quadro de um vídeo e codificá-lo para Ogg Theora usando ffmpeg e ffmpeg2theora. Aqui está o script que eu tenho atualmente, na maioria das vezes:

//Extract first frame, make short video clip
ffmpeg.exe -i video.mov -c:v copy -c:a pcm_s16le firstFrame.png    
ffmpeg.exe -f lavfi -i aevalsrc=0 -loop 1 -i firstFrame.png -c:v libx264 -preset veryslow -pix_fmt yuv420p -t 00:00:00.500 -c:a pcm_s16le halfSecondFreeze.mov    

//For concatenation to work, I need the same audio format in both videos
//or else ffmpeg2theora will fail
ffmpeg.exe -i video.mov -c:v copy -c:a pcm_s16le fixedAudioVideo.mov    
ffmpeg.exe -i halfSecondFreeze,mov -i fixedAudioVideo.mov -filter_complex \"[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1:unsafe=1 [v] [a]\" -map \"[v]\" -map \"[a]\" -c:v libx264 -preset veryslow -c:a pcm_s16le frameLengthenedVideo.mov

//Encode to theora in ogv container    
ffmpeg2theora.exe frameLengthenedVideo.mov -c 1 -x 800 -y 600 -o finalVid.ogv

O problema é que às vezes isso corta o último bit de alguns vídeos. Descobri que, se eu usar qtrle como meu codec, quando criar o clipe curto e quando concatenar os dois vídeos que o vídeo final corta cedo. Em vez disso, ele gera um vídeo muito instável.

Estou usando ffmpeg2theora para converter em ogv, porque parece ser a única ferramenta que produz vídeo que meu aplicativo de reprodução (Unity3d) gosta. Usar ffmpeg resulta diretamente em problemas de reprodução estranhos, como vídeo completamente preto.

Estou à procura de sugestões sobre como posso evitar o problema de corte ou melhorar este processo. Se pretender algum detalhe sobre um dos vídeos em falta, posso colar a saída relevante do MediaInfo aqui.

    
por Corey Larson 12.06.2014 / 23:52

1 resposta

2

Considere copiar o áudio em sua própria entrada com o mesmo contêiner que o arquivo de entrada original.

Possível solução. Copie o áudio para o arquivo separado. Crie seu png. Mux eles juntos. Então concatie isso com o original.

ffmpeg -i *.mov -c copy -map 0:a audio.mov
ffmpeg -i video.mov -c:v copy -frames:v 1 firstFrame.png 
ffmpeg -loop 1 -i firstFrame.png -i audio.mov -t 0.5 -map 0:v:0 -c:a copy -map 1:a:0 png.mov

Para o concat, eu usaria esta resposta do Stack Overflow .

Eu deixei algumas coisas, mas a ideia básica está lá. Você pode pular a transferência do áudio para um arquivo separado, mas eu queria enfatizar essa etapa. Tente evitar transcodificação, a menos que você tenha que, copiar é seu amigo.

    
por 13.06.2014 / 18:58

Tags