Разделение, перекодирование и объединение видеофайлов приводит к щелчку аудио

Мы хотим быстрее кодировать большие видеофайлы. Чтобы ускорить кодирование, мы используем несколько серверов кодирования. Ниже приведен наш процесс кодирования потока

  1. Сначала мы разбиваем видео на маленькие сегменты, используя команду ниже

    ffmpeg -i F:\video_data_set\4k_compressed.mp4 -f segment -segment_time 5 -segment_start_number 1 -codec copy -copyts -avoid_negative_ts 1 F:\video_data_set\test\%d_4k_compressed.mp4

  2. Затем мы разделяем эти сегменты между несколькими серверами кодирования. Каждый сервер кодирования перекодирует сегмент, используя следующую команду

    ffmpeg -hide_banner -i F:\video_data_set\test\1_4k_compressed.mp4 -c:a aac -ar 44100 -b:a 128k -c:v libx264 -x264opts nal-hrd=cbr:force-cfr=1 -pix_fmt yuv420p -profile:v baseline -level 3.0 -vf "scale=1280:-2,setdar=16:9" -b:v 3.9M -minrate 3.9M -maxrate 3.9M -bufsize 7.8M -preset ultrafast -crf 18 -r 30 -g 30 -threads 8 F:\video_data_set\test\1_4k_compressed_1.mp4

  3. Когда все сегменты перекодированы, мы объединяем их в один файл, используя команду ниже

    ffmpeg -hide_banner -f concat -safe 0 -i F:\video_data_set\test\files_2.txt -c copy -threads 8 F:\video_data_set\4k_compressed_1.mp4

Все работает хорошо, но проблема, с которой мы сталкиваемся, заключается в том, что после каждого сегмента в выходном звуке есть звук щелчка.

Например, я закодировал 5 сегментов с длительностью 6,6,3,6 и 6 секунд, когда я присоединился к ним с помощью вышеупомянутой команды, у выходного видео есть звук щелчка при 6,12,15 и 21 секунде видео.

Не могли бы вы помочь мне и сообщить, что является причиной этого щелчка и как исправить и удалить этот звук щелчка из выходного видео.

1 ответ

Это хорошо известный эффект: -segment разделяет видео на допустимую точку входа видео (т.е. I-кадр), но не всегда на действительную точку входа аудио.

Лучший способ обойти это - разделить видео и аудио на первом шаге:

ffmpeg -i F:\video_data_set\4k_compressed.mp4 -f segment -segment_time 5 -segment_start_number 1 -c:v copy -an -copyts -avoid_negative_ts 1 F:\video_data_set\test\%d_4k_compressed.mp4 -vn -c:a aac -ar 44100 -b:a 128k F:\video_data_set\test\audio.m4a

затем перейдите к фрагментам видео, как в текущем рабочем процессе.

Для последнего шага используйте

ffmpeg -hide_banner -f concat -safe 0 -i F:\video_data_set\test\files_2.txt -i F:\video_data_set\test\audio.m4a -map 0:v -map 1:a -c copy -threads 8 F:\video_data_set\4k_compressed_1.mp4

Чтобы заново добавить аудио.

Другие вопросы по тегам