Projects
Multimedia
ffhevc
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 15
View file
ffhevc.changes
Changed
@@ -1,4 +1,17 @@ ------------------------------------------------------------------- +Sat Nov 12 10:48:00 UTC 2016 - neutrino8@opensuse.org + +- Update to version 2.9.9 + * Added support for importing external srt/ssa subtitles for the + mkv, m2ts, mts and ts containers + * Moved the subtitle code into its own video_subtitles_func() + function + * Added support for simultaneously copying subtitles from the + input file and copying external ones + * Renamed variable SUBT to SUBNR for clarity + * Updated the README file and man page + +------------------------------------------------------------------- Thu Nov 10 21:15:00 UTC 2016 - neutrino8@opensuse.org - Update to version 2.9.8
View file
ffhevc.spec
Changed
@@ -17,12 +17,12 @@ Name: ffhevc -Version: 2.9.8 +Version: 2.9.9 Release: 0 Summary: A small shell script for encoding to H.265/HEVC with ffmpeg License: GPL-2.0+ Group: Productivity/Multimedia/Video/Editors and Convertors -Url: https://sourceforge.net/projects/ffhevc +Url: https://ffhevc.teambelgium.net Source0: %{name}-%{version}.tar.gz Requires: ffmpeg BuildRoot: %{_tmppath}/%{name}-%{version}-build
View file
ffhevc-2.9.8.tar.gz/ChangeLog -> ffhevc-2.9.9.tar.gz/ChangeLog
Changed
@@ -1,3 +1,13 @@ +2016-11-12 - ffhevc 2.9.9 + * Added support for importing external srt/ssa subtitles for the + mkv, m2ts, mts and ts containers + * Moved the subtitle code into its own video_subtitles_func() + function + * Added support for simultaneously copying subtitles from the + input file and copying external ones + * Renamed variable SUBT to SUBNR for clarity + * Updated the README file and man page + 2016-11-10 - ffhevc 2.9.8 * Check if name of input file matches that of output file and warn and exit. Requires the realpath utility
View file
ffhevc-2.9.8.tar.gz/README -> ffhevc-2.9.9.tar.gz/README
Changed
@@ -3,31 +3,12 @@ as there are some cases where my h264enc script has issues encoding some Blu-ray remuxes. -ffhevc can do the following: +Features: -- it supports only video files as input. -- it support encoding in CRF, 1- and 2-pass mode. -- it has a configuration file in $HOME/.ffhevc to set things up. -- it does auto-cropping. -- it supports three video denoise filters. -- it supports four video deblock filters. -- it supports one audio volume filter. -- it supports one audio volume normalizing filter. -- it supports audio resampling. -- it supports copying virtually an unlimited amount of subtitles. -- it creates the final output directory if user provides a path in addition to the output name. -- it supports virtually an unlimited amount of audio tracks. -- it supports encoding audio to AC-3, E-AC-3, TrueHD, DTS, MP3, Vorbis, Opus, FLAC, PCM or AAC or copying an audio track. -- it supports setting the nice value in the config file. -- it supports a limited amount of user-provided metadata. -- it optionally scales the video. -- it optionally deinterlaces the input file. -- it supports interlace-aware encoding. -- it supports FPS conversion. -- it supports cover art for the MKV container. -- it supports the x265 presets and tune profiles. -- it supports custom written preset files. -- it can output to more than one container format. +An up-to-date list of the supported features is available on the +website of ffhevc + +https://ffhevc.teambelgium.net Parameters:
View file
ffhevc-2.9.8.tar.gz/ffhevc -> ffhevc-2.9.9.tar.gz/ffhevc
Changed
@@ -2,8 +2,8 @@ # # Small script to encode to H.265/HEVC video using FFmpeg and libx265. # Author: Grozdan "microchip" Nikolov <neutrino8@opensuse.org> -# Version: 2.9.8 -# Date: 2016-11-10 +# Version: 2.9.9 +# Date: 2016-11-12 # # ffhevc is free software ; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ brown() { echo -e "\e[0;33m$1\e[0;39;49m"; } error() { echo -e "\e[1;31m$1\e[0;39;49m"; } -version="2.9.8" +version="2.9.9" CFG="$HOME/.ffhevc" cfgversion="29" @@ -105,7 +105,7 @@ # Any non-zero value will do. Set it # to "auto" to ask for as many as # detected subtitles -MAX_SUBS="2" +MAX_SUBS="1" # Copy original metadata from input? METADATA="n" @@ -981,46 +981,143 @@ ################ Subs stuff ################# +video_subtitles_func() { + case "$1" in + infile) + if [ "$MAX_SUBS" = "auto" ]; then + test "$SUBNR" = "0" && MAX_SUBS="1" || MAX_SUBS="$SUBNR" + fi + for i in $(eval echo "{1..$MAX_SUBS}"); do + submapval[i]="$(($i-1))" + printf "Sub $i: Specify a Subtitle to Copy [example: 0:2]: " + read subnr[i] + if [ ! -z "${subnr[i]}" ]; then + printf "Sub $i: Specify the 3-letter Language Code for Metadata [press 'Enter' to skip]: " + read slang[i] + if [ ! -z "${slang[i]}" ]; then + sublang[i]="-metadata:s:s:${submapval[i]} language=${slang[i]}" + fi + subcopy[i]="-map ${subnr[i]} -c:s:${submapval[i]} copy ${sublang[i]}" + # Workaround for an ffmpeg disposition issue + # where in some cases it sets subsequent tracks + # as default. + test "$i" = "1" && sdis="default" || sdis="none" + subdis[i]="-disposition:s:${submapval[i]} $sdis" + else + error "-> No value given!" + exit 1 + fi + done + test "$subopt" = "2" && echo + ;; + ext) + case "$CONFMT" in + mkv|m2ts|mts|ts) true ;; + *) + error "-> The $CONFMT container doesn't support srt/ssa subtitles!" + error "-> Supported containers are: mkv, m2ts, mts and ts" + exit 1 + ;; + esac + if [ ! -z "$extracon" ]; then + for i in $extracon; do + case "$i" in + mkv|m2ts|mts|ts) true ;; + *) + echo + error "-> Warning: One or more chosen additional container" + error " doesn't support srt/ssa subtitles!" + error "-> Remuxing will most likely fail!" + echo + break + ;; + esac + done + fi + printf "How many External Subtitles to Add?: " + read subamount + case "$subamount" in + [1-9]*) MAX_SUBS="$subamount" ;; + ""|*) + error "-> Invalid value!" + exit 1 + ;; + esac + for i in $(eval echo "{1..$MAX_SUBS}"); do + test ! -z "${submapval[*]}" && submap[i]="$((${submapval[-1]}+$i))" || submap[i]="$(($i-1))" + printf "Sub $i: Specify the Subtitle File: " + read -e sub[i] + if [ ! -f "${sub[i]}" ]; then + error "-> No such file!" + exit 1 + else + printf "Sub $i: Specify the 3-letter Language Code for Metadata [press 'Enter' to skip]: " + read slng[i] + if [ ! -z "${slng[i]}" ]; then + sublng[i]="-metadata:s:s:${submap[i]} language=${slng[i]}" + fi + EXTSUBS[i]="-i \"${sub[i]}\"" + if [ ! -z "${submapval[*]}" ]; then + sdispo="none" + else + test "$i" = "1" && sdispo="default" || sdispo="none" + fi + subdispo[i]="-disposition:s:${submap[i]} $sdispo" + subcpy[i]="-map $i:0 -c:s:${submap[i]} copy ${sublng[i]}" + fi + done + ;; + esac +} + if [ "$SUBS" = "y" ]; then echo green "-> Detecting subtitles..." sleep 1 SUBSDETECT="$($FFPROBE -i "$input" 2>&1 | grep 'Stream #' | grep 'Subtitle' | sed 's| ||g')" if [ ! -z "$SUBSDETECT" ]; then - SUBT="$(echo "$SUBSDETECT" | wc -l)" + SUBNR="$(echo "$SUBSDETECT" | wc -l)" echo green "$SUBSDETECT" echo error "-> Note: not all containers support all types of subs!" else error "-> Could not detect any subtitles!" - SUBT="0" + SUBNR="0" fi echo if [ "$MAX_SUBS" = "auto" ]; then - test "$SUBT" = "0" && MAX_SUBS="1" || MAX_SUBS="$SUBT" + error "-> Note: MAX_SUBS variable is set to \"auto\" in the config file!" + error "-> This means it will ask for as many as detected subtitle tracks" + error " and you cannot skip them!" + echo fi - for i in $(eval echo "{1..$MAX_SUBS}"); do - submapval[i]="$(($i-1))" - printf "Sub $i: Specify a Subtitle to Copy (example: 0:2) [press 'Enter' to skip]: " - read subnr[i] - if [ ! -z "${subnr[i]}" ]; then - printf "Sub $i: Specify the 3-letter Language Code for Metadata [press 'Enter' to skip]: " - read slang[i] - if [ ! -z "${slang[i]}" ]; then - sublang[i]="-metadata:s:s:${submapval[i]} language=${slang[i]}" - fi - subcopy[i]="-map ${subnr[i]} -c:s:${submapval[i]} copy ${sublang[i]}" - # Workaround for an ffmpeg disposition issue - # where in some cases it sets subsequent tracks - # as default. - test "$i" = "1" && sdis="default" || sdis="none" - subdis[i]="-disposition:s:${submapval[i]} $sdis" - fi - done + brown " Subtitles" + brown " ~~~~~~~~~" + echo " 0 -> Copy subtitles from the input file" + echo " 1 -> Add external subtitle files (SRT/SSA only!)" + echo " 2 -> Copy subs from input file + add external ones (SRT/SSA only!)" + echo + printf "Sepcify the Subtitle option [press 'Enter' to skip]: " + read subopt + case "$subopt" in + 0) video_subtitles_func infile ;; + 1) video_subtitles_func ext ;; + 2) + video_subtitles_func infile + video_subtitles_func ext + ;; + "") + true + ;; + *) + error "-> Invalid option!" + exit 1 + ;; + esac fi -test -z "${subcopy[*]}" && NOSUBS="-sn" +test -z "${subcopy[*]}" -a -z "${subcpy[*]}" && NOSUBS="-sn" ################ Audio stuff ################ @@ -1477,8 +1574,8 @@ esac ;; flac) - echo " 0 -> 8000 Hz 4 -> 32000 Hz 8 -> 96000 Hz" - echo " 1 -> 16000 Hz 5 -> 44100 Hz 9 -> 176400 Hz" + echo " 0 -> 8000 Hz 4 -> 32000 Hz 8 --> 96000 Hz" + echo " 1 -> 16000 Hz 5 -> 44100 Hz 9 --> 176400 Hz" echo " 2 -> 22050 Hz 6 -> 48000 Hz 10 -> 192000 Hz" echo " 3 -> 24000 Hz 7 -> 88200 Hz" echo @@ -1693,16 +1790,16 @@ case "$1" in 1p|crf) test "$mode" = "1p" && pmode="bitrate=$vbitrate" || pmode="crf=$CRF" - OPTS1="-map 0:0 -disposition:v:0 default $ofps $NOSUBS $MDATA $CHPS $METATITLE $METAGENRE $METAYEAR $METACOMMENT $vfilters $sws" - OPTS2="${audparams[*]} ${auddis[*]} ${subcopy[*]} ${subdis[*]} $strict $movflags $METACOVER \"$OUTPUT\"" + OPTS1="${EXTSUBS[*]} -map 0:0 -disposition:v:0 default $ofps $NOSUBS $MDATA $CHPS $METATITLE $METAGENRE $METAYEAR $METACOMMENT $vfilters $sws" + OPTS2="${audparams[*]} ${auddis[*]} ${subcopy[*]} ${subcpy[*]} ${subdis[*]} ${subdispo[*]} $strict $movflags $METACOVER \"$OUTPUT\"" ;; 2p) passone="stats=\"$OUTFILE.log\":pass=1:bitrate=$vbitrate" passtwo="stats=\"$OUTFILE.log\":pass=2:bitrate=$vbitrate" OPTS1="-map 0:0" OPTS2="-an -f null -y /dev/null" - OPTS3="-map 0:0 -disposition:v:0 default $ofps $NOSUBS $MDATA $CHPS $METATITLE $METAGENRE $METAYEAR $METACOMMENT $vfilters $sws" - OPTS4="${audparams[*]} ${auddis[*]} ${subcopy[*]} ${subdis[*]} $strict $movflags $METACOVER \"$OUTPUT\"" + OPTS3="${EXTSUBS[*]} -map 0:0 -disposition:v:0 default $ofps $NOSUBS $MDATA $CHPS $METATITLE $METAGENRE $METAYEAR $METACOMMENT $vfilters $sws" + OPTS4="${audparams[*]} ${auddis[*]} ${subcopy[*]} ${subcpy[*]} ${subdis[*]} ${subdispo[*]} $strict $movflags $METACOVER \"$OUTPUT\"" ;; esac echo "nice -n $NICE $FFMPEG -i \"$input\" $OPTS1 -c:v libx265 -x265-params $pmode$passone$X265PARAMS $vtune $OPTS2"
View file
ffhevc-2.9.8.tar.gz/ffhevc.1 -> ffhevc-2.9.9.tar.gz/ffhevc.1
Changed
@@ -3,7 +3,7 @@ .de IPs .IP "\\$1" .. -.TH ffhevc 1 "Nov 07, 2016" +.TH ffhevc 1 "Nov 12, 2016" .SH NAME ffhevc @@ -111,3 +111,6 @@ .SH BUG REPORTS Please send all bug reports and/or questions/suggestions/donations to <neutrino8@gmail.com> + +.SH WWW +https://ffhevc.teambelgium.net
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.