web-dev-qa-db-fra.com

Conversion d'un fichier vidéo au format de fichier arbitraire au format MPEG4 / H.264?

Je souhaite convertir un grand nombre de fichiers vidéo de divers formats en fichiers .mp4 (conteneur MPEG-4, codec H.264). Je souhaite le faire sur une machine Ubuntu, en utilisant uniquement des outils de ligne de commande et je souhaite installer des packages à partir de main, restricted, universe et multiverse.

Idéalement, j'aimerais pouvoir faire ...

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

... et tous mes fichiers vidéo au format .mp4 avec le conteneur MPEG-4 et le codec H.264.

Comment aborderiez-vous ce problème sur une machine Ubuntu? Quels paquets dois-je installer?

6
knorv

Vous devrez installer ceux-ci:

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

Dans Karmic, Lucid et Maverick, vous devriez remplacer "unstripped" par "extra", mais comme il existe des paquets de transition, cela fonctionne aussi.

Et ensuite, vous pouvez utiliser un script avec:

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

Et vous pouvez utiliser des options telles que celles-ci pour configurer la résolution, le codec vidéo, le codec audio et la qualité audio:

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

Pour Ubuntu 14.04 et plus récent

Vous aurez besoin de avconv de libav-tools et d'ubuntu-restricted-extras. Vous pouvez les installer si vous ne les avez pas déjà avec la commande:

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

Ce script devrait faire l'affaire, mais l'hypothèse est qu'il n'y a que des fichiers vidéo dans le dossier en question, sinon des conséquences inattendues pourraient en résulter.

#!/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
Elder Geek