Convertendo um arquivo de vídeo em formato de arquivo arbitrário em MPEG4 / H.264?

6

Eu quero converter um grande número de arquivos de vídeo em vários formatos em .mp4 files (contêiner MPEG-4, codec H.264). Eu quero fazer isso em uma máquina Ubuntu, usando apenas ferramentas de linha de comando e estou disposto a instalar pacotes de main , restricted , universe e multiverse .

Idealmente, eu gostaria de poder fazer ...

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

... e tenho todos os meus arquivos de vídeo em .mp4 format com contêiner MPEG-4 e codec H.264.

Como você resolveria esse problema em uma máquina Ubuntu? Quais pacotes eu preciso instalar?

    
por knorv 17.10.2010 / 23:41

2 respostas

7

Você precisará instalar estes:

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

Em Karmic, Lucid e Maverick, você deve substituir "unstripped" por "extra", mas como existem pacotes transitórios, este trabalho também.

E então você pode usar um script com:

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

E você pode usar opções como essas para configurar a resolução, codec de vídeo, codec de áudio e qualidade de áudio:

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
    
por Nyamiou The Galeanthrope 18.10.2010 / 00:02
0

Para o Ubuntu 14.04 e mais recentes

Você precisará do avconv do libav-tools e do ubuntu-restricted-extras. Você pode instalá-los se você não os tiver com o comando:

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

Este script deve fazer o truque, no entanto, a suposição é que existem apenas arquivos de vídeo na pasta em questão, caso contrário, consequências não intencionais podem ocorrer.

#!/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
    
por Elder Geek 04.02.2016 / 00:00