0,6
рейтинг
1 марта 2013 в 13:05

Дизайн → 19 команд ffmpeg для любых нужд перевод tutorial

От переводчика:
Многие знают, что ffmpeg — это сила, но не все знают, какая именно. Он многогранен и безграничен, а его man объёмен и местами малопонятен, лишь немногие постигли дао профессиональной работы с ним. И тем не менее, этот инструмент может быть полезен почти всем, кто хоть иногда работает с видео и звуком, даже на бытовом уровне. О некоторых полезных консольных командах ffmpeg и пойдёт речь в статье. В некоторых местах я взял на себя смелость вставить ссылки на поясняющие статьи.


ffmpeg — это кроссплатформенная open-source библиотека для обработки видео- и аудиофайлов. Я собрал 19 полезных и удивительных команд, покрывающих почти все нужды: конвертация видео, извлечение звуковой дорожки, конвертирование для iPod или PSP, и многое другое.

1. Получение информации о видеофайле

ffmpeg -i video.avi

2. Превратить набор картинок в видео

ffmpeg -f image2 -i image%d.jpg video.mpg

Эта команда преобразует все картинки из текущей директории (названные image1.jpg, image2.jpg и т.д.) в видеофайл video.mpg

(примечание переводчика: мне больше нравится такой формат:
ffmpeg -r 12 -y -i "image_%010d.png" output.mpg

здесь задаётся frame rate (12) для видео, формат «image_%010d.png» означает, что картинки будут искаться в виде image_0000000001.png, image_0000000002.png и тд, то есть, в формате printf)

3. Порезать видео на картинки

ffmpeg -i video.mpg image%d.jpg

Эта команда создаст файлы image1.jpg, image2.jpg и т.д., поддерживаются так же форматы PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.

4. Конвертировать видео в формат iPod/iPhone

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

Пояснения:

  • Источник: source_video.avi
  • Аудио кодек: aac
  • Битрейт аудио: 128kb/s
  • Видео кодек: mpeg4
  • Битрейт видео: 1200kb/s
  • Размер видео: 320 на 180 пикселей
  • Полученное видео: final_video.mp4

5. Конвертировать видео в формат PSP

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

Пояснения:

  • Источник: source_video.avi
  • Аудио кодек: aac
  • Битрейт аудио: 32kb/s
  • Видео кодек: xvid
  • Битрейт видео: 1200kb/s
  • Размер видео: 320 на 180 пикселей
  • Полученное видео: final_video.mp4

6. Извлечь звуковую дорожку из видео и сохранить в mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

Пояснения:

  • Источник: source_video.avi
  • Битрейт аудио: 192kb/s
  • Выходной формат: mp3
  • Полученный аудиофайл: sound.mp3

7. Конвертировать wav в mp3

ffmpeg -i son_origine.wav -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

8. Конвертировать .avi в .mpg

ffmpeg -i video_origine.avi video_finale.mpg

9. Конвертировать .mpg в .avi

ffmpeg -i video_origine.mpg video_finale.avi

10. Конвертировать .avi в .gif (без сжатия)

ffmpeg -i video_origine.avi gif_anime.gif

11. Добавить звук к видео

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12. Конвертировать .avi в .flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

13. Конвертировать .avi в .dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

или

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14. Конвертировать .avi в mpeg для DVD-плееров

ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg

Пояснения:

  • Выходной формат: pal-dvd
  • Максимальный размер для выходного файла: 2000000000 (2 Gb)
  • Широкоэкранный формат: 16:9

15. Сжать .avi в DivX

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

16. Сжать OGG Theora в mpeg DVD

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_termin.mpg

17. Сжать .avi в SVCD mpeg2

Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

Формат PAL:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

18. Сжать .avi в VCD mpeg2

Формат NTSC:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

Формат PAL:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

19. Многопроходное кодирование с помощью ffmpeg

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

Примечание переводчика:
Предлагаю в комментариях привести и другие полезные команды ffmpeg, их ведь гораздо больше, чем 19. ;)
Перевод: Jean-Baptiste Jung
Валентин @silvansky
карма
109,5
рейтинг 0,6
Developer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Дизайн

Комментарии (105)

  • 0
    Команды, конечно, интересные, но скажите, пожалуйста, как, например, при перекодировании видео задавать параметры кодека для итогового результата.
    • +1
      В указанном в начале статьи мануале имеется перечисление всех доступных опций, Вам нужны секции Video Options и Advanced Video Options.
      • 0
        Да, гораздо интереснее было бы почитать про тонкие опции, как из приведенных примеров и пропущенные в пояснениях, так и из указанных секций.
  • +3
    спасибо за статью, теперь я знаю как без всяких утилит перекодировать видео для iPad со своими кастомные настройками. Скачал несколько бесплатных, а там презаданные параметры и приходилось пользоваться ими
    • 0
      Без всяких утилит? :/
      • 0
        я имел ввиду GUI-утилит, где жесткие ограничения. У меня 16 гб, после прог, игр и музыки осталось мало места, а иногда в дорогу охото побольше фильмов закачать. Теперь же смогу сам варьировать размером видео файла
  • +1
    Ребят, а как с помощью нее в видео файле переконвертировать формат аудио из ac3 в mp3?
    Стоит дома Т2 декодер и есть функция чтения фильмов с USB, но бида в том, что он не хочет воспринимать аудио ac3.

    Сейчас юзаю HandBrake, но он нереально все долго делает (близко 40 минут, на фильм в 1.5 гб).
    • +1
      В принципе, должно сработать что-то типа этого:

      ffmpeg -i source_video.avi -acodec mp3 output_video.avi
      
      • +6
        ffmpeg -i source_video.avi -acodec libmp3lame -vcodec copy output_video.avi
  • +1
    ffmpeg deprecated. Следует перейти на avconv.
    • 0
      Перешли.

      Различия есть, но несущественные.
      • 0
        В любом случае я не зря обновил скрипты.

        function avconv () {
            [ -n "$1" ] && echo `which $1` && exit
            [ -n "`which avconv`" ] && echo `which avconv` || echo `which ffmpeg`
        }
        
        • 0
          Конструкция
          echo `команда`
          

          внушает. Вы ее сознательно применили — у вас там что-то хитрое с путями?
          • 0
            У меня небольшая резервация в ~/.local/bin и .bashrc на стеройдах. Эта конструкция, возможно, однажды пригодится и не обременяет.

            Хотя после ознакомления с происходящим вообще не вижу смысла в этом коде. Ничто не мешает использовать ffmpeg.
            • +3
              Ну, сама по себе конструкция echo `команда` ничего осознанно хорошего не делает. В 99% случаев, это ровно то же, что написать просто команда, но:
              • вариант с echo умеет падать, если команда выдаст слишком много данных
              • вариант с echo преобразует все whitespace, по которым shell разделяет аргументы командной строки в одинарные пробелы
              • вариант с echo умеет работать не так, как хочется, если shell не умеет backticks
              • вариант с echo скрывая exit status команды, всегда возвращая exit status самого echo
              • 0
                Здесь echo выступает в роли return (ну или пытается).

                #!/usr/bin/env bash
                
                function sum () {
                    echo $(( $1 + $2 ))
                }
                
                sum 1 2 # 3
                
                var1=$(sum 3 4)
                echo $var1 # 7
                
                
    • +6
      Эти проекты развиваются паралленьно. Недавно наткнулись на ошибку при обработке файлов, что повторялась и в ffmpeg и в avconf из дистрибутива Убунты 12.10. Установка версии ffmpeg из git проблему решила. Лично для меня, разница между этими проектами неочевидна.
    • +1
      Например habrahabr.ru/post/171225/
    • +12
      Это чёрный пиар команды libav, которые форкнули ffmpeg, стали делать свою libav, поломали совместимость и написали, что ffmpeg deprecated — авось кто-нибудь и поверит. На самом деле ffmpeg продолжает жить своей жизнью, команды перекидыватся тухлыми помидорами, а у пользователей прибавилось проблем в связи с разрастанием зоопарка… :(
      • +1
        Расскажите это тем, кто говорит что делать форки это круто: habrahabr.ru/post/169339/#comment_5870879
        • +2
          Обычно, вилку (fork!) используют для еды. Но граф Орлов, как говорят злые языки, заколол ею Петра III. Означает ли это, что форки (вилки!) — это не круто? :)
          • +1
            Так может и тут сделали для «еды»
            • 0
              Вполне возможно. Но на данный момент бардак разросся, появились несовместимости, а команды, помимо кидания друг в другм гнилыми помидорами, вводят в заблуждение пользователей (см сообщение про ffmpeg deprecated).
              Как обычно, убивает не оружие…
        • –1
          Вы так говорите, будто код ffmpeg — не полное говно, и ему совсем не нужно немного конкуренции, чтобы привести все в порядок.
          • 0
            Код ffmpeg божественен, особенно dsputils
      • +2
        blog.pkh.me/p/13-the-ffmpeg-libav-situation.html — вот тут ситуация хорошо описана.
    • +3
      Эта информация не верна. нужно понимать что произошел внутренний конфликт в команде.
      Подробнее читать например здесь.
      blog.pkh.me/p/13-the-ffmpeg-libav-situation.html
      Обычно не комментирую подобные вещи, но в данной ситуации это плохая практика выдавать желаемое (личные побуждения) за действительное.
      Это большая тема для обсуждения, и увы этот конфликт ни к чему хорошему пока не привел. Форкнув ffmpeg, avconv не создали лучший продукт.
  • –2
    ну и ссылку на оригинал www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs
    • +8
      Пост оформлен как перевод, ссылка на оригинал внизу поста.
      • +7
        Прошу прощения, Вы правы
  • +5
    3. Порезать видео на картинки

    Существует гораздо более частый кейс — вырезать один кадр из видео для создания, например, превью на сайте или в админке.
    На последнем проекте использовал такую команду:

    ffmpeg -i "file.flv" -f image2 -vframes 1 -ss 00:00:02 "file_out.jpg"


    Вырезает первый кадр второй секунды из файла file.flv и сохранить её в файле file_out.jpg.
    • +1
      Как раз вырезать используя ffmpeg не рекомендую. Что бы вырезать кадр на определенной минуте/секунде он не может перейти только на этот кадр и обрабатывает кадры пока не дойдет до нужного "-ss 00:00:02". Если брать первые секунды то это не критично, но все равно лишнее ожидание/нагрузка/использование памяти.
      • +2
        А чем лучше резать?
        • +3
          mencoder
          Я например из видео делаю анимацию на 5 кадров. Мне нужно делать 5 кадров из разных частей видео. Раньше это делал ffmpeg. Создание такой анимации из фильма занимало более 30ти минут.
          • 0
            А ему можно указать заодно и качество JPEG? А то этот параметр в ffmpeg похоже захардкожен и явно не на высоте. :(
    • 0
      Это будет работать намного быстрее, если -ss переставить в начало:

      ffmpeg -ss 00:00:02 -i "file.flv" -f image2 -vframes 1 "file_out.jpg"
      • 0
        Спасибо тебе добрый человек! Ты просто не представляешь как ты меня выручил. Как же я намучался не понимая почему одна картинка может генерироваться иногда целую минуту…
  • 0
    А можно с помощью этой утилиты перекодировать .wmv с кодеком g2m во что-нибудь более распространенное?
    • +1
      Тут надо попробовать, готового ответа у меня нет.
    • 0
      Тут ситуция интересная, ffmpeg -codecs|grep -i g2m выдает этот кодек с пометкой "..V...". Это означает, что мы видим видеокодек без поддержки encoding/decoding (что довольно странно). Более того, это единственный кодек в ffmpeg с подобной пометкой! Надо изучать вопрос отдельно.
      • 0
        ffmpeg 2.7.2
        ffmpeg -codecs | grep g2m
        D.V.L. g2m                  Go2Meeting
        

        G2M4 поддерживается, я проверял.
        Для конвертации можно например написать ffmpeg -i input_g2m.wmv output.avi
        Если файл «проблемный», можно попробовать конвертировать по частям что получится с помощью -ss 00:01:25 (начало) -t 00:00:40 (продолжительность), а потом с помощью того же ffmpeg слить в один файл.
  • +5
    Повернуть видео на 90°
    ffmpeg -vf transpose=1 -i file.avi file1.avi
    • 0
      По или против часовой?
      • +2
        Опции transpose:
        0 — против часовой стрелки и зеркально;
        1 — по часовой стрелке;
        2 — против часовой стрелки;
        3 — по часовой стрелке и зеркально
      • 0
        в положительном направлении, скорей всего
    • 0
      Это, я так понимаю, не особо поможет с «синдромом вертикального видео», да?
      • +2
        Очень даже поможет :)
        • +3
          Ну поможет-то поможет, но видео может остаться вытянутым, так что смотря в каких случаях :)
  • 0
    Подскажите пожалуйста насчет конвертации нескольких картинок в видео.

    Как составить команду для создания слайдшоу, чтобы картинки сменяли друг друга через каждые n секунд. А то когда я разбирался, так и не понял как это сделать (уже не помню в чем проблема была).
    • +2
      ffmpeg -r 1 -y -i "image_%010d.png" output.mpg
      

      И будет кадр в секунду. Параметр -r указывает нужный frame rate.
      • 0
        А меньше 1 можно? Чтобы допустим одна картинка на 10 секунд.

        И еще вопрос: каким получится видео, если картинки имеют разный размер?
        • +2
          Можно ставить дробное: -r 0.1 даст кадр в 10 секунд.
          Если размер разный, ffmpeg будет ругаться. Поэтому сначала надо все картинки привести к одному размеру.
          • 0
            А еще вопрос: можно ли можно ли вместо «image_%010d.png» указывать просто несколько картинок?
            Просто я сейчас указываю абсолютный путь в таком формате, а у меня ffmpeg пишет ошибку Invalid Argument. И такое впечатление что эта ошибка из-за пробела в абсолютном пути.
            • –1
              Чтобы заставить консольную программу понимать пути с пробелами, можно сделать так:

              FILES_PATH=My\ path\ with\ whitespaces
              ffmpeg -r 1 -y -i "${FILES_PATH}/image_%010d.png" output.mpg
              
  • +4
    Вместо флага -b (битрейта) следует использовать: -b:v и -b:a — для видео и аудио соответственно.
  • 0
    а можно с помощью ffmpeg сконверитровать DVD диск в один mpeg файл без пережатия?
    • 0
      avidemux склеит вам vob файлы.
  • 0
    А есть ли у кого готовые опции для windows phone?
  • +2
    Дополню ваш пост ссылкой на предыдущий аналогичный FFmpeg на каждый день
    • +2
      Хм, а статья то изначально та же, только 14 пунктов расширили до 19.
  • +1
    только вот -acodec aac не будет работать в большинстве билдов… На данный момент лучше говорить -acodec libvo_aacenc
  • +2
    Склейка 2х и более видео в один.
    Если ролики в одинаковых форматах с одинаковыми параметрами:
    ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
    

    Если разные:
    ffmpeg -i input1.mp4 -i input2.webm \
    -filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]' \
    -map '[v]' -map '[a]' <encoding options> output.mkv
    
  • +3
    Ещё команды?

    Вот вам захват видео с экрана:

    ffmpeg -f x11grab -s cif -r 25 -i :0.0+10,20 /tmp/out.mpg

    здесь -s cif — размер, 0.0 — экран, 10,20 — это смещение относительно верхнего левого угла экрана

    при желании можно и звук, например, с alsa или jack присобачить
  • +3
    Ватермарк:
    ffmpeg -i in.mp4 -vfilters "movie=0:gif:logo.gif [logo]; [in][logo] overlay=10:mainH-overlayH-10:1 [out]" out.mp4
    

    Но тут все довольно сложно. Старые версии делали ватермарки через vhook, новые делают через libavfilter. Насколько помню за последний год его то включают то выключают из-за разных багов.
  • +3
    Эх, кто бы подсказал команду:
    Перепаковать .mkv в .mp4, причем:
    — видео не переконвертировать, только перепаковать
    — несколько аудио-дорожек из AC3 5.1 конвертировать в AAC 2.0
    — по возможности добавить отдельно лежащий файл субтитров в .srt
    • +1
      Я ниже такой же вопрос написал, не увидел вашего :) Присоединяюсь.

      UPD: еще кстати было бы неплохо метаданные вперед помещать, чтобы можно было просматривать недоконверченный файл.
    • +2
      Насчет конвертации без перекодирования видео было же буквально позавчера
      habrahabr.ru/post/170557/#comment_5931101

      Насчет звука печальнее — 5.1 в 2.0 ffmзeg не умеет пока. Но можно взять только 2 первые дорожки из 5.1 звука с помощью опции
      -ac 2
      в некоторых билдах ее указывать нужно только после битрейта. Но лучше использовать для этого AviSynth и wavi. Там для доунмикса есть стандартная функция

      Предположим у нас есть mkv файл c видео дорожкой и DTS звуком 5.1:
      В папкy с mkv копируем wavi.exe, создаем там же файл audio-from-mkv.avs и вписываем в него:
      DirectShowSource("file.mkv", video=false)
      multi_ch=ConvertAudioToFloat(last)
      
      function stereo_ch(clip a) {
      	flr = GetChannel(a, 1, 2)
      	fcc = GetChannel(a, 3)
      	lfe = GetChannel(a, 4)
      	lfc = MixAudio(fcc, lfe, 0.2071, 0.2071)
      	mix = MergeChannels(lfc, lfc)
      	lrc = MixAudio(flr, mix, 0.2929, 1.0)
      	blr = GetChannel(a, 5, 6)
      	return MixAudio(lrc, blr, 1.0, 0.2929)
      }
      
      stereo_ch(multi_ch)
      

      после этого говорим

      wavi "audio-from-mkv.avs" - | "d:\path\ffmpeg.exe" -y -i "file.mkv" -i pipe:0 -map 0:0 -map 1:0 -acodec libvo_aacenc -ab 192000 -vcodec copy -f mp4 result.mp4
      

      в результате в файл result.mp4 запишется первый трек из файла file.mkv (первым треком должно идти видео) и стерео звук сконвертированный из исходного 5.1 и закодированный в mp4 с битрейтом 192к

      PS А вообще есть же GUI для ffmpeg? :)
      • 0
        но гуи только под мак…
      • 0
        2 первые дорожки из 5.1 на мой взгляд фигня получится.
        Я сейчас для этой задачи использую GUI Mkvtoolnix, Subler, Handbrake, возможно ещё что-то, — я в зоопарке инструментов немного путаюсь. Кто-то криво 5.1 в 2.0 перегоняет, кто-то не умеет mkv читать, вот и хочется один волшебный скрипт.
        P.S. Мак — не проблема, у меня это дефолтная система.
        • 0
          но через вави и ависинх как раз правильно же получается, а не первые 2 дорожки :)
          • 0
            Да, но это же Windows… :)
            Вообще, есть ещё вопросы с несколькими аудио-дорожками и субтитрами, но наверняка они решаемы. Может и заставлю себя для этих целей виртуалку запускать, спасибо.
    • 0
      Я делал так:
      1) Извлекаем все дорожки из .mkv
      2) Создаем .mp4 из .h264 который мы вытащили из .mkv
      3) AC3/DTS/FLAC > pcm -> aac (через fifo), тут зависит от формата, надо каналы мапить правильно итд
      4) Все субтитры вытаскиваем, перегоняем в .srt (ибо они в ass/ssa), потом запечатываем в .mp4
      5) Накладываем хинт дорожки на звук и видео, чтобы стримить проще было.

      Для всего этого у меня был большой perl скрипт который из одного файла делал сразу 3: iPad версия, AppleTV версия и «оригинал» в .mp4.
      • 0
        Я пятый пункт не понял. Это какая-то метаинформация в mp4 для эффективного беспроводного проигрывания видео, например из iTunes на iPad?
        Если у вас всю эту магию выполнял всего один скрипт, то это очень интересно. Я в идеале и хочу: сложил файлы в папку, запустил скрипт, через час готовые файлики .mp4.
        • 0
          Да это помогает лучше проигрывать файлы по сети.

          Проигрывает один фаил, но надо указывать какая дорожка за, что отвечает и какой кодек используется. И надо следить за процессом, а то бывает все ломается. По какой-то причине, если 3 пунк делать в один проход то получается рассинхрон.
  • +1
    Может пригодится кому. Есть скрипт, который конвертирует звуковую дорожку из формата DTS (который часто присутствует в фильмах, но не может прочитаться современными телевизорами) в АС3 (который скушают телевизоры) — mkvdts2ac3, взять можно по этой ссылке:
    github.com/JakeWharton/mkvdts2ac3

    Перепаковывется быстро, около 5 минут, телевизоры воспроизводят такой звук без проблем.

  • +1
    4. Конвертировать видео в формат iPod/iPhone

    Кто-нибудь может подсказать строчку для конвертации вместе со всеми звуковыми дорогами и субтитрами (по-моему видел такие видеофайлы для iDevice с вшитыми сабами)?
  • +2
    Небольшое уточнение в п.1.
    Для получения информации следует использовать
    ffprobe video.avi

    Так же ffprobe поддерживает несколько форматов для вывода информации ini, json, xml
    ffprobe -v 0 video.avi -print_format json -show_format
    ffprobe -v 0 video.avi -print_format xml -show_format
    ffprobe -v 0 video.avi -print_format ini -show_format
  • 0
    А вот подскажите как конвертировать MPEG 720x576 в AVI DV/PAL? Я даже строчку могу придумать, и даже пытался, но на выходе получил нечто совершенно неудобоваримое, особенно на быстром перемещении.

    Почему тот же Canopus Procoder на ура перекодирует на Windows, а вот на Linux какая-то хрень получается?
  • +1
    Если кому-то нужно будет к существующему видеофайлу прицепить дополнительную аудиодорожку (и, возможно выкинуть часть существующих аудиодорожек), то я тут всё расписал (на английском правда): zoid.cc/ffmpeg-audio-video/
  • +2
    Выдираем звук из видео в формате MP4 и сжимаем его в MP3:
    $ cat mp4tomp3.sh
    #!/bin/sh
    for file in "$@" ; do
    name=`echo "$file" | sed -e "s/.mp4$//g"`
    ffmpeg -i "$file" -ac 2 -f wav - | lame --preset standard - "$name.mp3"
    done
    

    Cкрипту года полтора; надо было быстро вынуть звук из видеозаписи мероприятия, сделанной на портативную видеокамеру, раздать его в виде файликов через болванки CD или флешки, в формате, который все могут прослушать, и вот: этот алгоритм спас. Похоже, был единичный случай его применения, но он был весьма полезный и своевременный. Взял вот отсюда, пост от January 26th, 2009, 11:26 PM.
    • +2
      Спасибо, добрый человек! Очень выручил.
      Специально залогинился, чтобы сказать это (сорри, кармы не хватает отблагодарить по-другому).

      Остаётся добавить, что в официальных репозиториях Ubuntu LTS 14.04 (например), пакет FFmpeg отсутствует. Чтобы установить его (и обновлять в дальнейшем), можно подключить репозиторий, созданный разработчиком Jon Severinsson:

      sudo apt-add-repository ppa:jon-severinsson/ffmpeg
      sudo apt-get update
      sudo apt-get install ffmpeg
      


      Теперь можно запустить наш скрипт:

      mp4tomp3.sh *.mp4
      
      • +1
        Пожалуйста; рад, что мой перепост решает чьи-то проблемы.
        По поводу FFmpeg была новость, что оригинальный пакет вернётся в Ubuntu 15.04; но ведь можно (хотя бы ради спортивного интереса)) попробовать его имеющийся в основных репозиториях форк, т.е. libav.
  • –1
    Подскажите, можно ли используя ffmpeg сжать уже готовый gif-анимацию?
  • 0
    Интересно, зачем на последнем пункте стоит ссылка на абсолютно бесполезную страницу? Более того — на ней иногда срабатывает «ахтунг, на Вашем компьютере обнаружены вирусы. Произвожу сканирование...».
  • 0
    Гуру, подскажите пожалуйста.
    ffmpeg.exe -f dshow -i video=«Philips SPC 1030NC Webcam» -s 1280x1024 out.mp4
    Делает захват в разрешении 640*480 растянутом до 1280*1024, а вот
    ffplay.exe -f dshow -i video=«Philips SPC 1030NC Webcam» -s 1280x1024
    Захватывает в честном 1280*1024.

    От чего так?
    • 0
      Проблема достаточно странная, но обсуждаемая на зарубежных форумах у ffmpeg'а есть конкретное представление о входных параметрах и о параметрах того что должно получиться на выходе. Так, если Вы укажете -s 1280x1024 до -i — тоже получите желаемый результат захвата без растягивания.

      т.е.
      ffmpeg.exe -f dshow -s 1280x1024 -i video=«Philips SPC 1030NC Webcam» out.mp4
      ffmpeg -f video4linux2 -s 1280x1024 -i /dev/video0 out.mp4
  • 0
    Всё бы хорошо, но есть такая плохая тенденция — смена формата параметров командной строки от версии к версии (свободное ПО, что вы хотите), т.о. новичок, желая приобщиться к утилитам такого рода должен мучаться, гугля желаемые параметры, а потом выясняя — чего же этому долбаному ffmpeg-у надо (ведь вывод об ошибках далеко не информативный)…

    Своим не-IT-шным друзьям ставлю бесплатный freemake video converter. Жуёт всё во всё. И друзья по пустякам не звонят.
  • 0
    Спасибо за статью, как раз нужны некоторые вещи. Да и в коментах полно полезного материала :)
    А вот видел формата 320 на 180 для айдевайсов и псп это как-то сурово. Это даже не 2007 год :)
  • 0
    pastebin.com/ZMXQwAQj — отказывается хабр размечать в сырец, вот так приятнее
  • 0
    Скринкаст:
    alias recdesktop='ffmpeg -f x11grab -s 1920x1080 -r 8 -i :0.0 -sameq  -f alsa -i hw:1,0 '
    
  • 0
    Захват одного кадра из rtsp потока
    ./ffmpeg -threads 1 -i rtsp://1.1.1.1:554 -vframes 1 /var/www/test.com/blah.jpg
    
  • 0
    Гуглил дико пару недель назад: искал, как добавить новую звуковую дорожку к уже существующему ролику, причем сделать это со сдвигом по времени (чуть позже) и понизив громкость оригинальной дорожки. Не раскопал. Подскажите, кто-нибудь? Было бы круто научиться озвучивать ролики без перекодирования.

    Ну и сразу вопрос, вот оригинальная дорожка выведена почти в 0dB, новый звук в тоже. Что случится при смешении, звук будет искажен (будет клипиться как в последнем альбоме металлики) или «давайте жить дружно и тише» — сведен и деамплифицирован?
  • +1
    Правильное превращение набора картинок в видео c аудио.

    ffmpeg -r a -i "image_%<b>%</b>03d.jpg" -t b -i "audio.mp3" -y -r c "output.mp4"

    a — frame rate, количество изображений в секунду. Если это значение < 1, то нужно обязательно указывать -r c, чтобы выходное видео получилось корректным и воспринималось всеми стандартными плеерами.
    b — продолжительность звучания аудио. В моем случае указывается продолжительность видео, чтобы аудио не вылезло за границы. Узнать продолжительность можно с помощью ffprobe, а в данном случае она равна n / a, где n — количество входных изображений.
    c — frame rate результирующего видео.

    Обратите внимание, что в Win системах во всяком случае, входные изображения нужно указывать с двойным процентом. Если аудио не нужно, то соответственно уберите -t b -i «audio.mp3».
    • +1
      Извиняюсь, в теге source по ошибке применено форматирование текста.
      Правильная команда выглядит так:

      ffmpeg -r a -i "image_%%03d.jpg" -t b -i "audio.mp3" -y -r c "output.mp4"
    • 0
      Также забыл добавить, что frame rate результирующего видео обычно равен 30.

      И если нужно сгенерировать таким способом видео из 3 картинок например, то входных картинок должно быть на самом деле 4, где первая и вторая будут повторяться (не знаю почему так, но именно так работает правильно).
    • +2
      А кто знает почему виндовая версия не поддерживает -pattern_type glob (и далее например -i IMG*.jpg)? Каких там библиотек не хватает сигвиновских и компилировал кто-то с поддержкой всего этого?

      Кстати добавлю от себя особенность, с которой промучился несколько часов — последовательность файлов должна быть непрерывной, иначе ffmpeg прекращает их добавлять. И еще пару ключиков, которые очень полезные:

      -start_number 3378 -i IMG_%d.jpg

      -start_number_range 9999 -i IMG_%d.jpg
      • 0
        После долгого копания нашелся способ передать ffmpeg набор файлов с разными именами и за компанию выяснилось что вот такая комбинация НЕ работает — ffmpeg хавает файлы, но на выходе получается только один фрейм с первым, не знаю почему:

        ffmpeg -r 1 -i IMG_3378.jpg -i IMG_3380.jpg -i IMG_3382.jpg -c:v mpeg4 -vtag xvid -f avi -y out.avi

        а вот такая (конвеер) работает:

        type IMG_3378.jpg IMG_3380.jpg IMG_3382.jpg | ffmpeg -r 3 -f image2pipe -r 1 -y -vcodec mjpeg -i — out.avi

        и да, файлы должны быть кажется одинаковые по ширине и высоте, т.е. вертикальные и горизонтальные картинки нужно сделать одного размера (напр. 800х800). Я использовал irfan batch converter -> canvas size для пакетной обработки файлов. Хотя, если обработки в bat файле не нужно, можно использовать например ImagesToVideo — обертка вокруг ffmpeg для создания слайдшоу.
  • +1
    Также, хотя и не совсем в тему, хотелось бы упомянуть как зациклить аудио (это может понадобиться для цели, упомянутой в комментарии выше). Это делается с помощью утилиты sox:

    sox -e ima-adpcm "input.mp3" "output.mp3" repeat n

    n — количество повторов — 1.

    А вот так сделать fade аудио:

    sox "input.mp3" "output.mp3" fade t a b

    a — продолжительность fade in / fade out.
    b — секунда, в которой громкость должна уменьшиться до 0. Обычно это конец аудио
    Параметр t означает линейную форму затухания. Также есть логарифмическая и другие (можно почитать в доках).
  • 0
    Кстати, может кто-нибудь знает возможно ли с помощью ffmpeg добавить эффекты перехода при генерации видео из набора картинок (fade, pixelate). И если возможно, то как?
  • 0
    >Конвертировать видео в формат iPod/iPhone
    >Конвертировать видео в формат PSP

    не работают «из коробки»…
  • 0
    Имеется дома камера Canon 1100D, которая пишет видео в формате .MOV с такими параметрами.

    video :: MPEG-4 | QuickTime | Advanced Video Codec | Baseline@L5.0 | 26,3 Мбит/сек | 1280x720
    audio :: PCM | 768 Кбит/сек | mono | 48,0 КГц | 16 бит

    В таком виде хранить домашнее видео накладно, хотелось бы перекодировать покомпактней. Имеется Windows 7, жать собрался в 2 прохода.

    ffmpeg -y -i in.mov -c:v libx264 -preset medium -b:v 4500k -pix_fmt yuvj420p -pass 1 -an -f mp4 nul
    ffmpeg -y -i in.mov -c:v libx264 -preset medium -b:v 4500k -pix_fmt yuvj420p -pass 2 -c:a libfaac -b:a 256k -f mp4 out.mp4

    Хотелось бы спросить советов у сообщества. Обеспечит ли такой подход качественное пережатие или есть более лучшие варианты?
    Чем лучше из libfaac, libvo_aacenc, NeroAACCodec жать аудиодорогу? Смотреть ли на альтернативы: avconv, mencoder?
    Благодарю за ответы.
    • 0
      лучше всего использовать crf для видео. profile ставьте high. Но надо другие параметры вбить.
      aac лучший все же от гугла. Использовать vbr опять же лучше. Если интересно, то пишите в личку, научу.
  • 0
    Я сделяль скрипт!
    any2mp3.sh
    #!/bin/bash
    if [ "$#" -ne 6 ]; then
    	echo "Usage: any2mp3.sh [-i|--input] [INPUTPATH] [-e|--ext] [EXTENSION] [-o|--output] [OUTPUTPATH]"
    	exit -1
    fi
    while [[ $# > 1 ]]
    do
    key="$1"
    case $key in
    	-i|--input)
    	INPUTPATH="$2"
    	shift # past argument
    	;;
    	-e|--ext)
    	EXTENSION="$2"
    	shift # past argument
    	;;
    	-o|--output)
    	OUTPUTPATH="$2"
    	shift # past argument
    	;;
    	*)
    	# unknown option
    	;;
    esac
    shift # past argument or value
    done
    echo -------------------------------------------------------
    echo INPUTPATH  = "${INPUTPATH}"
    echo EXTENSION  = "${EXTENSION}"
    echo OUTPUTPATH = "${OUTPUTPATH}"
    echo -------------------------------------------------------
    echo "Number files in INPUTPATH with EXTENSION:" $(ls -1 "${INPUTPATH}"/*."${EXTENSION}" | wc -l)
    echo "ffmpeg -i " *.${EXTENSION} "-ar 44100 -ac 2 -aq 0 -f mp3 *.mp3"
    echo -------------------------------------------------------
    for a in "${INPUTPATH}"/*."${EXTENSION}"; do
    	MP3INFULL="${a[@]/%${EXTENSION}/mp3}"
    	MP3NAME="$(basename "${MP3INFULL}")"
    	MP3OUTFULL="${OUTPUTPATH}"/"${MP3NAME}"
    	echo "${a}" "==>" "${MP3OUTFULL}"
    done
    echo -------------------------------------------------------
    read -p "Press any key to continue. Ctrl-C to break... " -n1 -s
    echo
    for a in "${INPUTPATH}"/*."${EXTENSION}"; do
    	MP3INFULL="${a[@]/%${EXTENSION}/mp3}"
    	MP3NAME="$(basename "${MP3INFULL}")"
    	MP3OUTFULL="${OUTPUTPATH}"/"${MP3NAME}"
    	ffmpeg -i "${a}" -ar 44100 -ac 2 -aq 0 -f mp3 "${MP3OUTFULL}"
    done
    

    • 0
      Спасибо большое. Перегнал все stand-up шоу в mp3 чтобы слушать в автомобиле.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.