52

В настоящее время я конвертирую флэш-файлы .flv в файлы .webm и .mp4 для использования с видеоплеером HTML5.

_

Я использую эту команду ffmpeg для WEBM: ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm которая прекрасно работает, а размер файла остается относительно одинаковым (важно).

_

Для MP4 я использую следующее: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

Он прекрасно конвертируется в .mp4 и предотвращает любую потерю качества, но размер файла почти в три раза больше.

Какую формулу ffmpeg можно использовать для конвертации в MP4, не теряя при этом слишком высокого качества и не допуская гораздо большего размера файла?

6 ответов6

53
ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4

Вы должны указать используемый видеокодек. В вашей команде вы не указываете -vcodec или -c:v поэтому ffmpeg использует кодек по умолчанию для MP4 (mpeg4), у которого не очень хорошая эффективность сжатия. Попробуйте вместо этого использовать libx264 и установить CRF, который является уровнем качества (чем ниже, тем лучше, по умолчанию - 23, а вменяемые значения - между 18 и 28).

Кодирование с использованием libx264 является довольно сложным, поэтому вам следует обратиться к руководству по кодированию H.264.

Вам также нужно указать -strict experimental иначе вы можете получить: « Кодировщик « aac »является экспериментальным, но экспериментальные кодеки не включены, добавьте« -strict -2 », если хотите его использовать».

40

Эта команда изменяет только контейнер без перекодирования

ffmpeg -i input.flv -codec copy output.mp4
3

avconv и ffmpeg - это одно и то же. [что касается ОЧЕНЬ недавно, есть НЕКОТОРЫЕ расхождения, но не очень много, о чем можно рассказать, если вы скомпилируете свой собственный ffmpeg [например, в репозиториях Ubuntu есть OLD и страдает от того, что размер видео не бла-бла-бла-бла пытается сказать вам, что видео имеет неправильные пропорции], но если вам нужно прочитать руководство по компиляции ffmpeg и скомпилировать его из git, у него нет проблем старых версий, которые есть в большинстве ОС. предупреждение об устаревании, относящееся к avconv , говорит о том, что они создали более новую утилиту для попытки заменить ffmpeg , НО она настолько широко используется, что даже если бы они попытались ее отключить, мы все равно будем создавать софт-ссылки из avconv на ffmpeg чтобы они не собираемся останавливать работу и бросать ее.]]

Использование avconv , я только что увидел один ответ, в котором упоминается предупреждение об амортизации, которое, по сути, является пустым сообщением, должно быть более подходящим вариантом для ffpmeg, вы можете попробовать avconv, что более верно в данном случае.

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

действительно то же самое, что

ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis

по существу, в первом случае вы используете более короткие варианты, а во втором - более записанный вариант.

ALSO -map 0 относится к звуковым дорожкам, поэтому если вы используете что-то вроде mp4a которое может прекрасно обрабатывать несколько звуковых дорожек, вы можете оставить это отключенным, чтобы скопировать все аудиопотоки в полученный файл. Это требуется только в том случае, если вы используете кодек, который не поддерживает несколько звуковых дорожек в одном и том же файле, тогда вы захотите отобразить необходимый звук, а не все. Конечно, если вы пытаетесь минимизировать используемое пространство, вы можете указать только один, чтобы попытаться немного поразить размер файла [звук примерно равен 1/3 размера видеодорожки [и это щедро]].

-c:v = codec(video) поэтому: -c:v libx264 аналогично использованию: -vcodec libx264 FYI; то же самое с этим примером: -c:v copy = -vcodec copy

и, кроме того, для FLV будьте осторожны, файл flv такой же, как avi, в том, что он является контейнером, который может содержать любое количество кодеков для видео или аудио. Сначала вы захотите использовать выбранную утилиту проверки медиа, чтобы увидеть, что используется внутри самого файла, прежде чем либо просто скопировать видео и / или аудиопоток, либо если вы захотите преобразовать его из того, что было, во что-то новое. Таким образом, команда, которая работает лучше всего для одного FLV, может не совпадать для другого FLV (конечно, ОБЫЧНО, если при получении нескольких FLV из одного и того же источника они будут кодироваться одинаково, но это никогда не гарантируется).

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

Опять же, поскольку в этом ответе указано, что ответ ниже этого, ДА, запустив ffmpeg, всегда будет публиковать это сообщение, оно по сути пустое, поскольку эти 2 утилиты в действительности все те же, но с очень небольшой разницей. Вы должны почти во всех случаях получать одинаковые результаты, используя любую команду. Это не обязательно приведет к полному перекодированию, почему? A, если это не нужно, это экономит массу времени, а B, если вы перекодируете файл, который уже был сжат в видеокодек, вы, по сути, выполняете процедуру сжатия для чего-то, что уже сжато и всегда приводит к в меньшем качестве, чем источник. Большинство новых кодеков несколько совместимы [не все], как, например, flv может быть технически MP4 в оболочке FLV, так как FLV, такие как AVI, являются просто контейнерами других кодеков. Таким образом, это зависит от того, что источник flv имеет для видео и кодека ausio по сравнению с тем, к чему вы его конвертируете, относительно того, нужно ли его вообще транскодировать. Если бы внутри FLV они использовали видео H264 MP4 и MP4a для аудио, вам не нужно было бы перекодировать то, что вам нужно, только скопировать его и настроить заголовки файлов, чтобы он читался как настоящий MP4 вместо видео MP4 внутри FLV-файла.

3

Согласно этому руководству, правильная команда для преобразования FLV в MP4 без какой-либо AV-записи:

ffmpeg -i input.flv -c copy -copyts output.mp4

Во всех случаях он отлично работал с видео AVC и аудио AAC или MP3.

-1

При использовании ffmpeg я получил предупреждение об устаревании при использовании avconv. Используя avconv, я получил хорошие результаты:

avconv -i inputfile.flv -map 0 -c:v libx264 -c: копия outputfile.mp4

Читайте man avconv для получения дополнительной информации.

-2

Я предлагаю вам создать скрипт для этого видео с именем video_flv_to_mp4 со следующим содержимым:

ffmpeg -i $1 -sameq -ar 22050 -vcodec libx264 $1.mp4 

Затем запустите это так:

$ video_flv_to_mp4 video.flv

Это даст вам файл video.flv.mp4.

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