Question

Je cherche un utilitaire scriptable pour convertir un tas de PGB et un fichier WAV dans une vidéo. XviD doit être le format de sortie. Je voudrais que cela fonctionne sur Linux (Ubuntu) si possible. Une ligne de commande utilitaire serait génial, comme je l'ai 36 vidéos pour créer de cette façon. Un script bash (ou [insérer le langage de script préféré]) serait formidable pour cela. (Je dois aussi jouer avec les dimensions vidéo différentes, mais je peux utiliser d'autres programmes pour redimensionner.)

Je l'ai joué avec VirtualDub (pour Windows XP), mais il ne semble pas répondre à ces besoins. Je pourrais toutefois avoir tord. Tous les pointeurs vers des exemples seraient grands.

Je suis aussi jouer avec ffmpeg. Il semble correspondre à la facture parfaitement, mais je ne peux pas sembler l'obtenir pour tirer ensemble PGB dans une vidéo. Voici ce que je suis en train:

for directory in $BMP_DIRECTORY_PATH/*
do
    ffmpeg \
        -f image2 \
        -i "$directory/Sequence %d%d%d%d%d%d.bmp" \
        -r 29.97 \
        -vcodec mpeg4 \
        -vtag xvid \
        \
        -i "$file/audio.wav" \
        -acodec libmp3lame \
        \
        $(basename $directory.avi)
done

Et voici ce qu'il dit de retour:

[...]

FFmpeg version 0.5-svn17737+3:0.svn20090303-1ubuntu6, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --extra-version=svn17737+3:0.svn20090303-1ubuntu6 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --disable-stripping --disable-vhook --enable-libdc1394 --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-armvfp --disable-neon --disable-altivec --disable-vis --enable-shared --disable-static
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.20. 0 / 52.20. 0
  libavformat   52.31. 0 / 52.31. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Apr 10 2009 23:18:41, gcc: 4.3.3
[image2 @ 0x97e5ac0]Could not find codec parameters (Video: bmp)
/home/ben/Pending/1080p_export/6/Sequence %d%d%d%d%d%d.bmp: could not find codec parameters

J'ai vu liste de diffusion après à ce sujet, mais ce qui est suggéré ne semble pas fonctionner ici.

UPDATE

Voici le script mis à jour avec plusieurs étapes:

#!/usr/bin/env bash

# bmp+wav2xvid+mp3
# 
# Although it has a cryptic name, it's pretty descriptive.  This script consumes BMPs (Windows bitmaps) and WAVs (Microsoft AD-PCM Waveforms) to make an XviD (MPEG-4 video) movie.
# 
# By convention, you pass it a directory with one or more directories that contain:
#
#     * Frames named "frame_001.bmp", "frame_002.bmp", etc.
#     * Audio named "audio.wav"
# 
# Author: Benjamin Oakes

# FIXME: The audio doesn't get muxed correctly.  The A/V sync is off a little.  At the beginning it looks pretty okay, but by the end the mouths definitely don't match up with the words that are said.

#############################################################
# NOTE: SEE `ffmpeg -formats` for a list of available formats
#############################################################

# BMP_DIRECTORY_PATH="/home/ben/Outbox/ffmpeg.fixture/"
BMP_DIRECTORY_PATH="/media/Archival Data/Video Projects Backup/Video Projects/1080p_export_dual_gray/"

# Output settings
VTAG="xvid"
VCODEC="mpeg4"
ACODEC="libmp3lame"
DIMENSIONS="1000x562"
FPS="35"
CONTAINER="avi"

if [ -d "$BMP_DIRECTORY_PATH" ]; then
  echo "BMP directory exists"

  # for directory in "$BMP_DIRECTORY_PATH"/*
  # do
    directory="/media/Archival Data/Video Projects Backup/Video Projects/1080p_export_dual_gray/1"

    ffmpeg \
      -f image2 \
      -i "$directory/frame_%03d.bmp" \
      -vcodec mpeg1video \
      -sameq \
      \
      -r $FPS \
      "../tmp/$(basename "$directory.mpg")"

    ffmpeg \
      -i "../tmp/$(basename "$directory.mpg")" \
      -vcodec $VCODEC \
      -vtag $VTAG \
      -s $DIMENSIONS \
      -sameq \
      \
      -i "$directory/audio.wav" \
      -acodec $ACODEC \
      -ar 8000 \
      \
      -f $CONTAINER \
      -r $FPS \
      "../tmp/$(basename "$directory")-$VTAG-$VCODEC-$ACODEC-$DIMENSIONS-$FPS.$CONTAINER"
  # done
else
  echo "ERROR: BMP directory does not exist"
fi

MISE À JOUR 2

S'il vous plaît voir ma réponse à ce que je fini par se rendre au travail.

Était-ce utile?

La solution 2

est ce que j'ai fini avec, juste pour la référence des autres.

# bmp+wav2xvid+mp3
# 
# Although it has a cryptic name, it's pretty descriptive.  This script consumes BMPs and WAVs to make an XviD (MPEG-4 video) movie.
# 
# By convention, you pass it a directory with one or more directories that contain:
#
#     * Frames named "frame_001.bmp", "frame_002.bmp", etc.
#     * Audio named "audio.wav"
# 
# Author: Benjamin Oakes

# Output settings
VTAG="xvid"
VCODEC="mpeg4"
ACODEC="libmp3lame"
ABITRATE="128k"
QSCALE="1"
DIMENSIONS="1000x562"
FPS="24000/1001"
CONTAINER="avi"

if [ -d "$BMP_DIRECTORY_PATH" ]; then
  echo "BMP directory exists"

  for directory in "$BMP_DIRECTORY_PATH"
  do
    ffmpeg \
      -f image2 \
      -r 24000/1001 \
      -i "$directory/frame_%03d.bmp" \
      \
      \
      -i "$directory/audio.wav" \
      \
      \
      -vcodec $VCODEC \
      -vtag $VTAG \
      -qscale $QSCALE \
      -s $DIMENSIONS \
      -r $FPS \
      \
      -acodec $ACODEC \
      -ab $ABITRATE \
      \
      "../tmp/$(basename "$directory").avi"
  done
else
  echo "ERROR: BMP directory does not exist"
fi

Autres conseils

Je pense que vous essayez de faire trop à la fois. Essayez briser la tâche en trois actions distinctes:

  • créer une vidéo à partir d'images bmp
  • MUX dans l'audio
  • encode au format cible

À cette fin, je suggère d'utiliser MPEG1 comme format vidéo intermédiaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top