Ffmpeg Video Transcode Faliure [swscaler @ 000000000168ee60] [дубликат]

Короткий ответ: вам нужно выполнить обратный вызов следующим образом:

function callback(response) {
    // Here you can do what ever you want with the response object.
    console.log(response);
}

$.ajax({
    url: "...",
    success: callback
});
119
задан LordNeckbeard 11 April 2015 в 19:48
поделиться

6 ответов

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

-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"

Команда:

ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"

В принципе , .h264 нужны четные размеры, поэтому этот фильтр будет:

  1. Разделить исходную высоту и ширину на 2
  2. Разорвать ее до ближайшего пикселя
  3. Умножьте его на 2, сделав тем самым четное число
184
ответ дан Ani Menon 26 August 2018 в 02:34
поделиться

Вероятно, из-за того, что видео H264 обычно преобразуется из RGB в пространство YUV как 4: 2: 0 перед применением сжатия (хотя само преобразование формата является алгоритмом сжатия с потерями, что дает 50% экономии пространства).

YUV-420 начинается с изображения RGB (красный зеленый синий) и преобразует его в YUV (в основном один канал интенсивности и два канала «оттенка»). Затем каналы Hue подбираются путем создания одного образца оттенка для каждого квадрата 2X2 этого оттенка.

Если у вас есть нечетное количество RGB-пикселей по горизонтали или по вертикали, у вас будут неполные данные для последнего столбца пикселя или строки в подвыборном цветовом пространстве кадра YUV.

18
ответ дан Adisak 26 August 2018 в 02:34
поделиться

Вы можете также использовать функцию bitand вместо trunc:

bitand (x, 65534)

будет делать то же самое, что и trunc(x/2)*2, и это более прозрачно по моему мнению. (Рассмотрим 65534 магическое число здесь;))


. Моя задача заключалась в автоматическом масштабировании большого количества видеофайлов до половины разрешения.

scale=-2,ih/2 приводят к слегка размытым изображениям

Причина:

  • входные видео имеют [fормат отображения g1] формата изображения (DAR)
  • scale масштабирует размеры реального кадра
  • во время предварительного просмотра, размеры новых видео должны быть исправлены с помощью DAR , который в случае довольно низкого разрешения видео (360x288 , DAR 16: 9) может привести к размытию раствора

:

-vf "scale='bitand(oh*dar, 65534)':'bitand(ih/2, 65534)', setsar=1"

:

  • output_height = input_height / 2
  • output_width = output_height * original_display_aspect_ratio
  • как output_width , так и output_height теперь округлены до ближайшего меньшего числа, делящегося на 2
  • setsar=1. output_dimensions теперь окончательны, коррекция соотношения сторон не применяется

Кто-то может найти это lpful.

0
ответ дан endigo 26 August 2018 в 02:34
поделиться

LordNeckbeard имеет правильный ответ очень быстро

-vf scale=1280:-2

Для android, не забудьте добавить

"-preset ultrafast" and|or "-threads n"
2
ответ дан fallouter 26 August 2018 в 02:34
поделиться

Просто используйте -2

Из документации по фильму :

Если одно из значений -n с n > 1, фильтр масштаба также будет использовать значение, которое поддерживает соотношение сторон входного изображения, рассчитанное из другого указанного измерения. После этого, однако, убедитесь, что расчетный размер делится на n и при необходимости отрегулирует значение.

Примеры

Установите ширину до 1280, и высота будет автоматически рассчитываться для сохранения пропорции, а высота будет делиться на 2:

-vf scale=1280:-2

То же, что и выше, но с объявленной высотой; оставляя ширину для обработки фильтром:

-vf scale=-2:720

«делится на 2»

В соответствии с требованиями x264 «делится на 2 по ширине и высоте» необходимо для YUV 4: 2: 0. 4: 2: 2 потребуется «делиться на 2 для ширины», а 4: 4: 4 не имеет этих ограничений. Тем не менее, большинство игроков, не поддерживающих FFmpeg, могут только правильно декодировать 4: 2: 0, поэтому вы часто видите команды ffmpeg с опцией -pix_fmt yuv420p при выводе видео H.264.

Caveat

К сожалению, вы не можете использовать -2 для ширины и высоты, но если вы уже указали один размер, то использование -2 является простым решением.

155
ответ дан LordNeckbeard 26 August 2018 в 02:34
поделиться

Если вы хотите установить некоторую ширину выходного сигнала и иметь выход с тем же соотношением, что и исходный

scale=720:-1 

, а не с этой проблемой, вы можете использовать

scale="720:trunc(ow/a/2)*2"

(Только для людей, которые ищут, как это сделать с масштабированием)

54
ответ дан Zbyszek 26 August 2018 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: