summaryrefslogtreecommitdiff
path: root/localvideowebencode
diff options
context:
space:
mode:
authorroot <root@atreju.jones.dk>2014-09-03 16:28:35 +0200
committerroot <root@atreju.jones.dk>2014-09-03 16:28:35 +0200
commit9265cfe66da0933a79e78a7bd77b6379e3e959ad (patch)
treeba48a7b08bad6384d00e573529f9f657d73b2257 /localvideowebencode
parent7424ed13b593c6d3b3cfcdc4c57f95fe11293b47 (diff)
Add option --audio.
Diffstat (limited to 'localvideowebencode')
-rwxr-xr-xlocalvideowebencode37
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"