понедельник, 23 декабря 2013 г.

Извлечение аудио из видео-файла в Ubuntu

Часто в фильмах звучат замечательные музыкальные произведения, которые не всегда удается найти отдельно. Единственный выход в этом случае - извлечь звук самостоятельно. Те, кто предпочитает работать через графический интерфейс, могут попробовать использовать для этого программу avidemux. Мне же показалось, что гораздо проще работать через командную строку. Для этого используем ffmpeg:
ffmpeg -i input.mkv -map 0:2 -vn -ss 00:24:13 -t 00:00:39 -acodec libmp3lame -ab 320k -ac 2 output.mp3

Здесь
  • input.mkv - видео файл из которого извлекается звуковая дорожка;
  • -map 0:2 - указывает на номер аудио-трека, если в видео-файле только одна звуковая дорожка, то этот параметр можно опустить, в случае, когда в файле несколько звуковых дорожек, вы можете посмотреть номера дорожек с помощью команды:
  • ffmpeg -i input.mkv
    и вот пример вывода этой команды (номера дорожек выделены жирным шрифтом):
    Stream #0:1(rus): Audio: ac3, 48000 Hz, 5.1(side), s16, 448 kb/s (default)
    Metadata:
    title : AC3 5.1 @ 448 kbps - DUB, Blu-ray
    Stream #0:2(ukr): Audio: ac3, 48000 Hz, 5.1(side), s16, 448 kb/s
    Metadata:
    title : AC3 5.1 @ 448 kbps - DUB, Blu-ray
    Stream #0:3(rus): Audio: dts (DTS), 48000 Hz, 5.1(side), s16, 1536 kb/s
    Metadata:
    title : DTS 5.1 @ 1536 kbps - AVO, Y.Serbin
    Stream #0:4(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), s16, 1536 kb/s
    Metadata:
    title : DTS 5.1 @ 1536 kbps

  • -vn означает, что видео извлекать не нужно;

  • -ss 00:24:13 указывает начальный момент времени, а параметр -t 00:00:39 - длительность;

  • -acodec libmp3lame определяет используемы аудокодек;

  • -ab 320k - битрейт;

  • -ac 2 - число каналв (1 - моно, 2 - стерео);

  • output.mp3 - имя полученного аудио-файла.

понедельник, 16 декабря 2013 г.

Как вырезать отрывок из видео в Ubuntu

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

ffmpeg -i input.mkv -vcodec copy -acodec copy -ss 00:59:03 -t 00:01:45 output.avi

Но он почему-то не сработал, а именно наблюдалась сильная рассинхронизация звука и видео, возможно потому, что исходное видео находилось в контейнере mkv и для правильного перекодирования в avi нужно было в явном виде указывать параметры перекодирования. Не получилось перекодировать на в mpg ни в mp4. К счастью, нашлась заготовка с настройками правильного перекодирования в mp4:

ffmpeg -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy output.mp4

Я добавил параметры, указывающие с какого момента времени нужно вырезать видео: -ss 00:59:13, а так же длительность отрезка: -t 00:03:47 и клип получился как надо.

ffmpeg -ss 00:59:13 -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy -t 00:03:47 output.mp4

Кстати, обратите внимание, что параметр -ss 00:59:13 указан перед флагом -i. В этом случае, ffmpeg не декодирует видео до нужного участка, а просто перематывает, поэтому в этом случае вся операция занимает гораздо меньше времени. Однако, при этом могут возникнуть ошибки с позиционированием и в этом случае можно попробовать поставить параметр -ss после -i, например вот так:

ffmpeg -i input.mkv -c:v libx264 -preset slow -crf 22 -c:a copy -ss 00:59:13 -t 00:03:47 output.mp4

Однако в моем случае это делать не понадобилось. Неудобно только, что нельзя сразу указать момент времени окончания отрезка и приходится вручную подсчитывать длительность.

Популярные сообщения