обрезать последний кадр при преобразовании одного изображения + звуковой дорожки в видео в ffmpeg

268
stefano

Благодаря ответам на этот вопрос суперпользователя Объедините одно изображение + один аудиофайл, чтобы создать одно видео, используя FFmpeg. Мне удалось создать видео из одного изображения и звуковой дорожки.

я использовал код PJ Brunets:

ffmpeg -r 1 -loop 1 -i 00.png -i 00.wav -acodec copy -r 1 -shortest 00.avi 

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

Я думаю, что проблема связана с низкой частотой кадров, поэтому я поднял частоту кадров с 1 до 2 кадров в секунду до 25 кадров в секунду и сравнил результаты: с более высокой частотой кадров вы получаете большую точность по длительности.

Теперь мой вопрос: есть ли способ по-прежнему использовать 1 кадр / с, но обрезать последний кадр, когда аудио заканчивается? таким образом, вы могли бы добиться более быстрого времени кодирования без потери оригинальной длины.

1
AFAIK, не возможно для AVI. AVI не хранит PTS, поэтому длительность каждого кадра является обратной частотой кадров, поэтому ваша длительность квантуется в соответствии с этим значением. Gyan 7 лет назад 0
Есть ли другой контейнер, как AVI, который может хранить без потерь WAV? stefano 7 лет назад 0
MOV, MKV, NUT .. Gyan 7 лет назад 0
MOV & MKV менее точны, чем AVI (40-41 с). гайка 37s, но не принимаются на YouTube. я должен выпустить много длинных треков + 1 ч и других синглов, которые должны следовать друг за другом, как в миксе. я пришел к выводу использовать avi 1fps (с ошибкой + 1,5s) для длинных треков и avi 2fps (+ 1s) для одиночных треков. 10fps (+ 0,2s) или 25 fps (почти точные) были бы лучше для плавного перехода, но изображение становится блочным после 4fps и выше. если я делаю ту же работу с изображениями Сони Вегаса, они не становятся блочными, но для кодирования требуется гораздо больше времени и мин. частота кадров составляет 12 кадров в секунду. stefano 7 лет назад 0
Если вам нужно точно добавить несколько аудио / видео сегментов, используйте фильтр concat. Он должен работать с 1 к / с, но в любом случае с кодеком libx264 и 24 к / с он будет работать. Gyan 7 лет назад 0
Я не заинтересован в объединении видео. я хочу, чтобы они имели ту же длину, что и исходные аудиофайлы, с наименьшей возможной частотой кадров, поскольку они представляют собой видео с одним изображением. в любом случае, спасибо за вашу помощь. stefano 7 лет назад 0
В настоящее время вы кодируете с помощью mpeg4 с битрейтом по умолчанию 200 кбит / с. Вот почему они выглядят блочными выше 4 кадров в секунду. Если вы кодируете с помощью libx264 и частотой кадров 25 кадров в секунду, это не займет намного больше места, поскольку x264 будет хранить дубликаты кадров по 30-50 байт каждый, и ваша продолжительность будет более точной. Gyan 7 лет назад 0
я следовал вашим инструкциям: изображения больше не являются блочными, но x264 медленнее в кодировании и менее точен по длительности, заставляя меня использовать более высокую частоту кадров для достижения той же точности. поэтому я попробовал родной mpeg4 (самая быстрая кодировка) и libxvid (немного медленнее) с разными битрейтами. я заметил, что 1-й кадр всегда блочный (немного более гладкий с xvid), после этого он работает нормально. Какой битрейт вы рекомендуете для видео с одним изображением со скоростью 10fps-20fps? stefano 7 лет назад 0
Не беспокойтесь о частоте кадров. Используйте 25 кадров в секунду или 30 кадров в секунду, если вам нужно. С помощью `libx264` добавьте` -preset veryfast`. С mpeg4 / xvid используйте битрейт 2000kb / s. Не выводите в AVI, который является 25-летним контейнером. Используйте MOV или MKV. Gyan 7 лет назад 0

0 ответов на вопрос

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