Преобразование видеофайла в произвольном формате в MPEG4 / H.264?

Я хочу конвертировать большое количество видеофайлов в различных форматах в файлы .mp4 (контейнер MPEG-4, кодек H.264). Я хочу сделать это на компьютере с Ubuntu, используя только инструменты командной строки, и я готов установить пакеты из main, restricted, universe и multiverse.

В идеале, я бы хотел иметь возможность ...

for VIDEO_FILE in *; do
  some_conversion_program $VIDEO_FILE $VIDEO_FILE.mp4
done

... и все мои видеофайлы в формате .mp4 с контейнером MPEG-4 и кодеком H.264.

Как бы вы решили эту проблему на машине с Ubuntu? Какие пакеты мне нужно установить?

6
задан 31 December 2010 в 11:48

2 ответа

Вам нужно будет установить их:

sudo apt-get install ffmpeg libavcodec-unstripped-52 libavdevice-unstripped-52 libavformat-unstripped-52 libavutil-unstripped-50 libpostproc-unstripped-51 libswsclale-unstripped-0 x264

В Karmic, Lucid и Maverick вы должны заменить «unstripped» на «extra», но так как есть переходные пакеты, эта работа тоже.

И затем вы можете использовать скрипт с:

for i in *.avi; do ffmpeg -i "$i" -f mp4 "`basename "$i" .avi`.mp4";done

И вы можете использовать такие параметры, чтобы установить разрешение, видеокодек и аудиокодек и качество звука:

for i in *.avi; do ffmpeg -i "$i" -s 352x288 -vcodec libx264 -vpre default -acodec libmp3lame -ab 192k -ac 2 -ar 44100 -f mp4 "`basename "$i" .avi`.mp4";done
0
ответ дан 31 December 2010 в 11:48

Для Ubuntu 14.04 и новее

Вам понадобится avconv из libav-tools и ubuntu-limited-extras. Вы можете установить их, если у вас их еще нет, с помощью команды:

sudo apt-get install libav-tools ubuntu-restricted-extras

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

#!/bin/bash
echo "This script will attempt to encode by re-encoding the video stream and copying the audio stream placing all files in the current directory into a mp4 video container of the same name as the sources. The new filename will be derived from a basename (everything before the source file last '.') and an extension (everything after the source file last '.'). Target names will be 'basename'.mp4. Sources matching the target name will be renamed with a .bak extension prior to processing for safety. a CRF of 25 is harcoded in by preference but feel free to adjust as you desire."
echo 
echo "You must choose the preset of your choice with a tradeoff of speed vs. quality"
echo  "(veryfast recommended for decent speed and decent quality)"
echo "type  a preset and press enter or bail and enter to quit now. Preset choices are:"
echo "ultrafast superfast veryfast faster fast medium slow slower slowest"
read preset
echo "you chose $preset"
if [ "$preset" != "bail" ]
then
for f in *.* 
    do
    name=$(echo "$f" | sed 's/\.[^\.]*$//')
    ext=$(echo "$f" | sed 's/^.*\.//')
    target="$name.mp4"
    echo target = $target
        if  [ "$f" = "$target" ];
        then
            echo "$f=$target so moving source to backup file"
            mv "$f" "$f.bak";
            if [ "$?" != "0" ]; then echo "error renaming $f" && exit
            fi 
            avconv -i "$f.bak" -c:a copy -c:v libx264 -preset "$preset" -crf 25 "$target"
            if [ "$?" != "0" ]; then echo "error processing $f.bak" && exit
            fi 
        else 
            avconv -i "$f" -c:a copy -c:v libx264 -preset "$preset" -crf 25 "$target"
            if [ "$?" != "0" ]; then echo "error processing $f" && exit
            fi 
        fi
    done
fi
0
ответ дан 31 December 2010 в 11:48

Другие вопросы по тегам:

Похожие вопросы: