diff options
-rwxr-xr-x | localvideowebencode | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/localvideowebencode b/localvideowebencode index 7cb3c43..64c59c6 100755 --- a/localvideowebencode +++ b/localvideowebencode @@ -46,6 +46,8 @@ html favoring open formats with optional non-JavaScript Flash fallback. (default: medium) --webmpreset WebM target preset: 360p 720p 720p50_60 etc. (default: profile-related or none) + --audio Audio style: music speech silence + (default: none - use input channel count) --stem Stem of output filenames, optionally with path (default: basename of last input file) -t, --title Title used in html fallback graphics @@ -91,7 +93,7 @@ rate=25 h264profile=baseline # parse cmdline options -TEMP="`getopt -s sh -o hp:s:a:r:b:t: -l help,profile:,size:,aspect:,rate:,bitrate:,h264profile:,h264preset:,webmpreset:,stem:,title:,filter:,sample:: -n "$PRG" -- "$@"`" || exit1 "Internal getopt error." +TEMP="`getopt -s sh -o hp:s:a:r:b:t: -l help,profile:,size:,aspect:,rate:,bitrate:,h264profile:,h264preset:,webmpreset:,audio:,stem:,title:,filter:,sample:: -n "$PRG" -- "$@"`" || exit1 "Internal getopt error." eval set -- "$TEMP" while true ; do case "$1" in @@ -104,6 +106,7 @@ while true ; do --h264profile) h264profile="$2"; shift 2;; --h264preset) h264preset="$2"; shift 2;; --webmpreset) webmpreset="$2"; shift 2;; + --audio) audio="$2"; shift 2;; --stem) stem="$2"; shift 2;; -t|--title) title="$2"; shift 2;; --filter) filters="${filters:+$filters }-filter $2"; shift 2 @@ -216,20 +219,44 @@ case "$h264profile" in *) exit1 "Unknown MPEG-4 AVC profile \"$h264profile\".";; esac +case "$audio" in + music) + channels=2 + bitrate_vorbis=64 + bitrate_aac=96 + ;; + speech) + channels=1 + bitrate_vorbis=48 + bitrate_aac=64 + ;; + silence) + channels=0 + ;; + '') + channels=$(avprobe -v warning -show_streams "$infile" | perl -ne 's/channels=// and print $_') + ;; + *) exit1 "Unknown audio style \"$audio\".";; +esac +[ $channels -le 2 ] || channels=2 +[ $channels -gt 0 ] || channels= + # TODO: Check and fail if all needed tools are not available # TODO: When verified beneficial, add option real_time=-2 _melt_in="${_melt_in:+$_melt_in }-progress $sample" _melt="$_melt ${bitrate:+vb=${bitrate}} ${size:+s=$size} ${aspect:+aspect=$aspect}" -_melt_audio="ab=96k" _melt_webm="${webmpreset:+-vpre=libvpx-$webmpreset}" +_melt_audio="${channels:+ac=$channels}" +_melt_vorbis="$_melt_audio acodec=libvorbis ab=$(($channels*$bitrate_vorbis))k" +_melt_aac="$_melt_audio acodec=libvorbis ab=$(($channels*$bitrate_aac))k" ## Theora/Vorbis/Ogg -melt -group $_melt_in $infiles -group $filters -consumer avformat:"$stem.ogv" f=ogg vcodec=libtheora $_melt acodec=libvorbis $_melt_audio $_melt_out +melt -group $_melt_in $infiles -group $filters -consumer avformat:"$stem.ogv" f=ogg vcodec=libtheora $_melt $_melt_vorbis $_melt_out ## H.264/AAC/MP4 [ -z "$bitrate" ] || melt -group $_melt_in $infiles -group $filters -consumer avformat:/dev/null properties=x264-medium-pass1 $_melt_h264 $_melt $_melt_out -melt -group $_melt_in $infiles -group $filters -consumer avformat:"$stem.mp4" ${bitrate:+pass=2} $_melt_h264 $_melt acodec=aac $_melt_audio $_melt_out +melt -group $_melt_in $infiles -group $filters -consumer avformat:"$stem.mp4" ${bitrate:+pass=2} $_melt_h264 $_melt $_melt_aac $_melt_out # TODO: drop qt-faststart when melt 0.9.2 is stable mv "$stem.mp4" "$stem.mp4"~ qt-faststart "$stem.mp4"~ "$stem.mp4" @@ -237,7 +264,7 @@ qt-faststart "$stem.mp4"~ "$stem.mp4" ## VP8/Vorbis/WebM # TODO: use two-pass when supported by melt -melt -group $_melt_in $infiles -group $filters -consumer avformat:"$stem.webm" properties=webm $_melt_webm $_melt $_melt_audio $_melt_out +melt -group $_melt_in $infiles -group $filters -consumer avformat:"$stem.webm" properties=webm $_melt_webm $_melt $_melt_vorbis $_melt_out ## JPEG preview ffmpegthumbnailer -s0 -i "$stem.mp4" -o "$stem.jpg" |