FFMPEG concat оставляет звуковые промежутки между клипами - PullRequest
0 голосов
/ 09 апреля 2020

Я пишу сценарий python, который использует подпроцесс для вызова FFMPEG без использования pyffmpeg.

Мой сценарий генерирует переменное число файлов MP4 с использованием аудиокода AA C c, и объединяет их вместе, используя FFMPEG. Вот как я создаю каждый клип:

ffmpeg -loop 1 -i image.jpg -i recording.mp3 -tune stillimage -c:a aac -b:a 256k -shortest clip.mp4

Команда, которую я использую для их объединения:

ffmpeg -f concat -i clip_names.txt -c copy video_raw.mp4

Затем я беру это результирующее видео и смешиваю цикл аудио трек над ним, и отрегулируйте громкость. (Извините за ужасное форматирование)

ffmpeg -i video_raw -filter_complex
                 "amovie=Tracks/Breaktime.mp3:loop=0,
                  volume=0.1,
                  asetpts=N/SR/TB[aud];
                  [0:a][aud]amix[a]"
-map 0:v -map [a] -b:a 256k -shortest final_video.mp4

Эти команды, кажется, работают так, как я намереваюсь. Когда я играю в MP4 с моего локального компьютера, все воспроизводится без проблем.

Однако я загрузил видео на YouTube и столкнулся с проблемами. Когда видео воспроизводится с YouTube, на каждой временной отметке, где два клипа были объединены, перед началом следующего клипа остается около секунды тишины. Я пробовал это из Chrome, IE и Firefox, все с одинаковыми проблемами.

Исходя из того, что я изучил до сих пор, я думаю, что это может быть проблемой с как обрабатываются образцы грунтовки каждого отдельного клипа. Я не обязан продолжать использовать MP4 или AA C, поэтому, если использовать другой аудио / видео код c будет работать лучше, не стесняйтесь предлагать!

Есть ли какой-то тип манипуляции, который я могу делать в FFMPEG избавление от образцов грунтовки или как-то иначе обрабатывать их? В конце я ищу каждый клип для воспроизведения без задержки, которую вставляет операция concat. Спасибо!

1 Ответ

1 голос
/ 09 апреля 2020

Это не из-за образцов грунтовки. -shortest не гарантирует одинаковую длину всех потоков, поскольку в очереди мультиплексирования могут быть буферизованные пакеты, когда мультиплексор получает сигнал для остановки вывода. Для видеопотока 25 кадров в секунду 1 секунда переполнения кажется подходящей. Есть способы уменьшить переполнение длительности, но я бы порекомендовал вам извлечь длительность звука и установить -t X в соответствии с этим и пропустить -shortest.

Кроме того, сохранить в MOV с аудиокодом c -c:a pcm_s16le. Вы избежите смещений образцов при заливке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...