2

Я использую эту команду для создания файла с масштабированием и наложением изображения:

ffmpeg 
-i input.* -i overlay.png 
-filter_complex "[0:v]...; ...[1:v]overlay=... ... [resultingvideo]" 
-map "[resultingvideo]" -vcodec libx264 -f mp4 
-acodec libmp3lame -q:a 50 
outputfilename.mov

где "..." представляет некоторую не учтенную фильтрацию.

Проблема в том, что нет звука.

Если я добавлю -map 0:a , то есть звук, если на входе есть звук, и ошибка и нет выходного файла, если на входе нет звука.

Как я могу заставить ffmpeg опционально использовать звук с входа, если он существует, и в противном случае игнорировать звук или производить тишину или что-то еще?

Или мне нужно сначала проанализировать файл с помощью ffprobe, прежде чем я смогу сгенерировать команду сценария?

2 ответа2

3

Последние версии ffmpeg поддерживают опцию условного отображения:

ffmpeg -i input.mp4 -map 0:a? output.mp4

Это будет игнорировать несуществующие аудиопотоки во входном файле.

0

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

Это будет выглядеть примерно так.

ffmpeg -i input.* -i overlay.png -filter_complex "[0:v]...; ...[1:v]overlay=... ... [resultingvideo]" -map "[resultingvideo]" -vcodec libx264 -f mp4 outputfilenameJustVideo.mov

с последующим

ffmpeg -y -i outputfilenameJustVideo.mov -i input.*
-acodec libmp3lame -q:a 50 -c:v copy -map 0:v -map 1:a outputfilename.mov

В моем кратком тестировании ffmpeg не хотел создавать / переопределять что-либо, когда аудио не было, и делал, когда было аудио.

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

Я не знаю простого метода с одной командой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .