ffmpeg объединяет фильтры -af и -filter_complex (использует левую дорожку для создания только монодорожки *и* нормализует звук)

ffmpeg объединяет фильтры -af и -filter_complex (использует левую дорожку для создания только монодорожки *и* нормализует звук)

У меня есть видеозахваты без потерь с видеокассет, которые я собираюсь конвертировать в FFV1 и FLAC. Для нескольких избранных кассет в процессе мне также нужно конвертировать аудио в моно (существует только левая дорожка, так как исходная запись моно, но устройство захвата всегда записывает в стерео)иМне нужно нормализовать звук таким образом, чтобы громкость была просто равномерной (никакой компрессии или чего-либо еще, что могло бы исказить звук сверх необходимого), поскольку видеокамера довольно тихая, а возможности отрегулировать уровни звука на устройствах захвата нет.

На данный момент я определил, что мне нужны следующие два фильтра:

Удалите правый канал, чтобы создать монозапись только с левой дорожкой:

-filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FL[left]" -map "[left]"

Нормализовать звук:

-af loudnorm=I=-16:LRA=11:TP=-1.5

Однако я не могу определить, как объединить эти два фильтра. Я пробовал:

ffmpeg -i "input.avi" -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FL[left]" -map "[left]", loudnorm=I=-16:LRA=11:TP=-1.5" -c:v ffv1 -level 3 -slicecrc 1 -c:a flac -compression_level 12 "output.mkv"

который дает:

loudnorm=I=-16:LRA=11:TP=-1.5 -c:v ffv1 -level 3 -slicecrc 1 -c:a flac -compression_level 12 output.mkv: Invalid argument

Как объединить эти два фильтра?

решение1

При объединении простых фильтров (один вход и один выход) мы можем просто использовать запятую ( ,) между соединенными в цепочку фильтрами.

Синтаксис с запятой означает, что выходные данные первого фильтра являются входными данными следующего фильтра:"[0:a]channelsplit=channel_layout=stereo:channels=FL,loudnorm=I=-16:LRA=11:TP=-1.5[left]"

Нам также необходимо сопоставить видео с помощью -map 0:v.


Полная командная строка:

ffmpeg -i input.avi -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FL,loudnorm=I=-16:LRA=11:TP=-1.5[left]" -map "[left]" -map 0:v -c:v ffv1 -coder 1 -context 1 -g 1 -slices 24 -slicecrc 1 -c:a flac -compression_level 12 output.mkv

Примечание: мой ответ касается правильности синтаксиса, а не правильности аудиофильтров и параметров (мои познания в области аудио весьма ограничены).

Связанный контент