Как программно преобразовать видеофайлы FLV в MP4, используя сценарий оболочки в OS X? - PullRequest
9 голосов
/ 20 августа 2010

Я хочу выполнить пакетное преобразование каталога, содержащего сотни файлов FLV, чтобы каждый файл имел эквивалент MP4.Я пытаюсь автоматизировать этот процесс, написав сценарий оболочки и запустив его из терминала.Как мне это сделать?Большинство доступных инструкций для Linux, использующего ffmpeg, но я думаю, что в OS X его нет.Спасибо.

Ответы [ 5 ]

15 голосов
/ 20 августа 2010

Вы можете установить ffmpeg через Homebrew или MacPorts .Команда для установки ffmpeg с Homebrew - brew install ffmpeg;аналогично, команда для установки ffmpeg с MacPorts - sudo port install ffmpeg.После того, как вы установили ffmpeg, вот простой (и несколько наивный) скрипт для конвертации файлов.Вам может потребоваться добавить дополнительные флаги, в зависимости от ваших желаемых опций.

#! /bin/bash
function convert_all_to_mp4() {
  for file in *.flv ; do
    local bname=$(basename "$file" .flv)
    local mp4name="$bname.mp4"
    ffmpeg -i "$file" "$mp4name"
  done
}
convert_all_to_mp4

Просто сделайте любой файл, который вы поместили выше, в исполняемый файл скрипта (например, chmod a+x <i>path/to/convert_all_to_mp4.sh</i>) и вызовите его по полному путиили добавьте каталог, содержащий его, в переменную среды PATH и вызовите сценарий по имени, которое вы ему дали.

10 голосов
/ 12 ноября 2012

Преобразование из FLV в MP4 с использованием ffmpeg

Цель: Преобразование нескольких файлов Adobe Flash Video (FLV) в MP4 с использованием сценария Bash.

Среда: MAC OS X 10.5.8, Terminal v.240.2, Bash v.3.2.17

Язык: bash

Описание: Этот скрипт будет искать все FLV-файлы в указанном месте, перебирать каждый из них, преобразовывать их в эквивалентное видео MP4 и помещать их в подкаталог MP4-yymmdd-HHMMSS .Файлы журнала, созданные во время процесса, помещаются в каталог log в этом подкаталоге.

Предварительные требования:
Загрузите двоичный файл ffmpeg и поместите в /usr/local/bin directory.
Мой код основан на блоге Яна на trick77.com.Подробнее см. «Ссылки».
Загрузите мой bash-скрипт из раздела «Bash Script».

Объяснение моего кода

  • Скопируйте все имеющиеся MP4-файлы
  • Определите тип видеокодека с помощью ffmpeg -i [file].
  • Циклически просматривайте каждое видео и конвертируйте его в соответствии с типом используемого видеокодека.
  • Объединение всех файлов журнала ffmpeg
Ограничения:
Обрабатывает только видео с кодеками FLV1 и H264.


Использование:

convert-flv-to-mp4.sh [folder path]

Пример:

./convert-flv-to-mp4.sh /Users/Shared/Music

Вывод:
mp4 файлов в MP4-yymmdd-ЧЧММСС подкаталог

Журналы:
convert-flv-to-mp4.log.txt - журнал программы
ffmpeg-yyyymmdd-HHMMSS.log.txt - двоичный журнал ffmpegдля каждого преобразованного файла
ffmpeg.log.txt - компиляция всех вышеперечисленных журналов ffmpeg
metadata.csv - метаданные для каждого видеофайла

Обсуждение:
ВВ первую же попытку я не смог преобразовать видео с помощью видеопотока FLV1 с помощью параметра -copy ffmpeg.Вместо этого мне нужно было использовать следующие параметры ffmpeg:

-strict experimental -b:a 64k

Это означает, что преобразование не останавливается при незначительных ошибках и что оно использует преобразование битовой скорости звука 64 КБ.

Использование опции -copy просто смешивает входное видео и, следовательно, быстро.В противном случае, ffmpeg перекодирует файл, что занимает значительно больше времени.Этот скрипт определит, какую опцию использовать.

Фрагмент кода:

ls ${inputdir}/*.flv>$inputlist
for i in $(cat $inputlist); do
    ...
    case $vtype in
        flv1)
            ffmpeg -report -v info -nostdin -fflags discardcorrupt -i $i -strict experimental -c:v mpeg4 -b:a 64k ${outputdir}/${basename}.mp4 
        h264)
            ffmpeg -report -v verbose -nostdin -fflags discardcorrupt -i $i -vcodec copy -acodec copy ${outputdir}/${basename}.mp4
    esac
    ...
done

где:

inputlist - файл, содержащий все FLV-файлы
vtype - тип видеокодека входного файла
i - имя входного FLV-файла

Пример файла журнала:

Example log file


Файл журнала метаданных:
Metadata extracted from video using ffmpeg

Заключение:
Полное решение было успешно протестировано на 73 FLV-файлах, загруженных с YouTube.Для транскодирования 34 файлов и ремуксов 39 файлов потребовалось 8 минут, в среднем размером 11 МБ.

Bash Script:
convert-flv-to-mp4.sh

Ссылки:
Бинарная загрузка FFmpeg
Официальная документация FFmpeg
Какконвертировать .flv Flash видео в .mp4 на Mac

Расширяемость:
Если у вас есть файлы FLV, у которых есть видеопоток, отличный от FLV1 илиH264, например, VP6, FLV4, добавьте комментарий со ссылкой на ваш видеофайл, я обновлю свой код для его обработки.

2 голосов
/ 20 августа 2010
#!/bin/bash

shopt -s nullglob
shopt -s nocaseglob
for file in *.flv
do
  ffmpeg -i "$file" "${file%flv}mp4"
done
1 голос
/ 20 августа 2010

вы можете сделать это с VLC

http://wiki.videolan.org/Transcode#Transcoding_with_the_Command_Prompt

0 голосов
/ 20 февраля 2012

Другой альтернативой является MPEG Streamclip , который имеет действительно хорошую функцию пакетной обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...