Я пытаюсь удлинить первый кадр видео и закодировать его в Ogg Theora, используя ffmpeg и ffmpeg2theora. Вот сценарий, который у меня сейчас работает, большую часть времени:
//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
Проблема в том, что иногда это отсекает последний бит некоторых видео. Я обнаружил, что если я использую qtrle
качестве кодека при создании короткого клипа и когда я объединяю два видео, финальное видео обрывается раньше. Вместо этого он дает очень изменчивое видео.
Я использую ffmpeg2theora
для конвертации в ogv, потому что, похоже, это единственный инструмент, который производит видео, которое нравится моему приложению воспроизведения (Unity3d). Непосредственное использование ffmpeg
приводит к странным проблемам с воспроизведением, например, к абсолютно чёрному видео.
Я ищу какие-либо предложения о том, как я мог бы избежать проблемы отсечения или улучшить этот процесс. Если вам нужны какие-либо подробности об одном из видео, которое выходит из строя, я могу вставить соответствующий вывод из MediaInfo здесь.