FFMPEG конвертувати flv в mp4 без втрати якості [дублікат]


55

Наразі я перетворюю .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, не втрачаючи занадто багато якості та запобігаючи набагато більший розмір файлу?

Відповіді:


57
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 ", якщо ви хочете використовувати його."


1
Це займає стільки часу, і отриманий mp4 дуже спотворений, пікселі втрачені тощо. Будь-які ідеї, чому це може бути так? : /
trainoasis

Відео кодек за формою mp4 за замовчуванням не обов'язково mpeg4. Відповідно до результатів роботи ffmpeg --help muxer=mp4на моїй машині, ffmpeg використовує h264 як відеокодек за замовчуванням mp4.
подвійнеDown

1
@doubleDown Моя відповідь стара - з 2011 року. Вони, мабуть, змінили типові настройки за якийсь момент.
sashoalm

43

Ця команда змінює контейнер лише без перекодування

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

Чи знаєте ви спосіб зробити сценарій для пакетного перетворення багатьох відео в одній папці?
ttoine

так, у Windows створюють файл convert.bat і вкладають у нього цей код:, for %%a in ("*.flv") do ffmpeg -i "%%a" -codec copy "%%~na.mp4"тоді виконують convert.bat у папці з файлами * .flv
c97

1
Для мене це кидає Не вдалося записати заголовок для вихідного файлу № 0 (неправильні параметри кодека?): Неправильний аргумент. Будь-які ідеї? : /
trainoasis

2
@trainoasis ваш .flv не містить відео H.264 та аудіо AAC. Копіювання аудіо / відео даних, які не -codec copyстосуються файлу .mp4, працює лише у дуже рідкісному випадку, коли аудіо та відео вже закодовані H.264 та AAC. Див superuser.com/a/1009539/390946 і addpipe.com/blog/flv-to-mp4 .
Октавіан Наїку

3

avconvі ffmpegє по суті одне і те ж. [наскільки ДУЖЕ останнім часом є ДЕЯКІ розбіжності, але не дуже багато про що писати вдома, якщо ви збираєте свій власний ffmpeg[той, який, наприклад, представлений в репортах Ubuntu, є СТАРИМ і страждає від того, що розмір відео не є бла-бла-бла-ділом [в основному намагається щоб сказати вам, що відео має неправильні пропорції], але якщо ви не хочете читати ffmpegпосібник з компіляції та компілювати його з git, це не має жодних питань старіших версій, які є в більшості ОС. попередження амортизаційного зі посиланням на avconvкажуть вам , що вони створили нову Util , щоб спробувати замінити ffmpeg, але це ТАК широко використовується , що навіть якщо вони намагалися відрізати його , ми все було б створити softlinks від 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

по суті, в першому ви використовуєте коротші варіанти, а в другому - більш розписане різноманіття.

ТАКОЖ -map 0посилається на аудіозаписи, тому якщо ви використовуєте щось подібне, mp4aяке може обробляти кілька аудіозаписів, ви можете залишити це, щоб скопіювати всі аудіо потоки в отриманий файл. Це потрібно лише в тому випадку, якщо ви використовуєте кодек, який не підтримує кілька аудіозаписів в одному файлі, тоді ви хочете зіставити потрібний аудіозапис і не весь. Звичайно, якщо ви намагаєтеся мінімізувати використаний простір, ви можете вказати лише один, щоб спробувати збити файл з невеликого розміру [аудіо - це як на 1/3 розмір відеодоріжки [і це щедро]].

-c:v = codec(video)так: те -c:v libx264саме, що використовувати: -vcodec libx264FYI; те саме з цим прикладом:-c:v copy = -vcodec copy

і крім того, для FLV слід бути обережним, що файл flv такий же, як avi, оскільки це контейнер, який може містити будь-яку кількість кодеків для відео чи аудіо. Ви хочете спочатку використовувати утиліту для перевірки медіа на вибір, щоб побачити, що використовується у самому файлі, перш ніж ви вирішите просто скопіювати відео та / або аудіопотік, або якщо ви хочете перетворити його з будь-якого, на щось нове. Таким чином, команда, яка найкраще працює для одного FLV, може бути не однаковою для іншого FLV [звичайно, НА ЗВ'ЯЗКУ, якщо отримувати кілька FLV з одного джерела, вони будуть кодуватися однаково, але це ніколи не є гарантією].

Не намагаючись вибирати ніт, я просто натрапив на це в веб-пошуку і хотів спробувати трохи допомогти з’ясувати речі для людей.

Знову ж таки, як ця відповідь зазначає відповідь нижче цього ДА, що працює під ffmpeg, завжди розміщуватиме це повідомлення, воно по суті порожнисте, оскільки ці 2 утиліти дійсно все одно такі самі утиліти з дуже невеликою різницею. Майже у всіх випадках ви повинні отримувати абсолютно однакові результати, використовуючи будь-яку команду. Це не обов'язково призведе до повного перекодування, чому? A, якщо вона не потрібна, це економить тону часу, і B, якщо ви повторно перекодуєте файл, він уже був стиснутий у відеокодек, ви, по суті, виконуєте процедуру стиснення проти чогось, що вже стиснене і завжди призведе до меншою якістю, ніж джерело. Більшість новіших кодеків дещо сумісні між собою [не всі], наприклад, наприклад, flv технічно може бути MP4 в FLV обгортці, оскільки FLV, такі як AVI, є лише контейнерами інших кодеків. Тому, це залежить від того, що має джерело flv для відео та кодек аусіо порівняно з тим, що ви його перетворюєте, чи потрібно його взагалі перекодувати. Якщо в 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для отримання додаткової інформації.


1
ffmpegсама себе не застаріла . Причина, як це виглядає добре, полягає в тому, що ви вказуєте кодер x264, який має гарні настройки за замовчуванням для якості.
slhck

-2

Я пропоную вам створити сценарій оболонки для виклику video_flv_to_mp4із таким вмістом:

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

Потім запустіть його так:

$ video_flv_to_mp4 video.flv

Це дасть вам файл video.flv.mp4.


4
-sameqбільше не є дійсним варіантом для ffmpeg. Це також не означає "однакової якості". Дивіться також цей пост .
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.