Мы выпустили серию видео упражнений с озвученными инструкциями. Аудио (отдельно записанные) и видео были объединены с помощью ffmpeg.
В некоторых случаях голос за кадром длиннее, чем видео упражнения, и в этих случаях используется команда ffmpeg:
ffmpeg -loglevel $FFMPEG_LOG_LEVEL -i $VID_FILE -i $AUD_FILE -filter_complex "aevalsrc=0:d=$AUD_SHIFT[s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map 0:v -map [aout] $FILE_OUT -hide_banner -nostdin
Который отображает последний кадр видео, пока аудио не закончится.
Результирующий mp4 проигрывается приемлемо в различных настройках (QuickTime Player, VLC). Но при загрузке на YouTube эти видео не обрабатываются (те, которые не были расширены - это нормально) - они сохраняют 95% обработки - и поэтому не могут быть доступны через проигрыватель YouTube.
Я попытался перекодировать с помощью:
ffmpeg -i vidfile.mp4 -c:v libx264 -map_metadata -1 -c:a aac -strict experimental -b:a 192k out.mp4
- надеясь, что ответом могут стать метаданные, но без каких-либо изменений в ответе YouTube.
Я заметил, что в проигрывателе VLC индикатор прогресса на временной шкале, отображаемой под видео, перестает двигаться в момент завершения видео, пока звук продолжается. Кроме того, я замечаю, что продолжительность, о которой сообщает YouTube о неудачных видеороликах, короче фактического времени воспроизведения. Эти два факта говорят о том, что YouTube дает сбой, потому что ему отправляется короткое видео с какой-то инструкцией, чтобы удерживать последний кадр во время воспроизведения звуковой дорожки, а не полноформатное видео с повторяющимся видеокадром в конце.
Пожалуйста, предложения - либо для исправления исходной команды, либо для повторной обработки проблемных файлов в ретроспективе.
Если вы хотите посмотреть реальный файл, вот ссылка на Dropbox.