Changes of Revision 154
ffhevc.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Sat Oct 19 07:16:00 UTC 2019 - neutrino8@opensuse.org
4
+
5
+- Update to version 3.9.1
6
+* Use atomicparsley to add cover art for the mp4/m4v
7
+ containers. This removes dependence on MP4Box and
8
+ makes it possible to copy over metadata info in
9
+ an easy way
10
+* Add +frag_keyframe to the -movflags option when
11
+ output is mp4
12
+* Renamed variable METACOVER to MKVCOVER
13
+* Updated the man page
14
+
15
+-------------------------------------------------------------------
16
Fri Oct 18 04:56:00 UTC 2019 - neutrino8@opensuse.org
17
18
- Update to version 3.9.0
19
ffhevc.spec
Changed
19
1
2
3
4
Name: ffhevc
5
-Version: 3.9.0
6
+Version: 3.9.1
7
Release: 0
8
Summary: A small shell script for encoding to H.265/HEVC with ffmpeg
9
License: GPL-2.0+
10
11
Requires: ffmpeg
12
Requires: bc
13
Requires: MPlayer
14
-Requires: gpac
15
+Requires: AtomicParsley
16
BuildRoot: %{_tmppath}/%{name}-%{version}-build
17
BuildArch: noarch
18
19
ffhevc-3.9.0.tar.gz/ChangeLog -> ffhevc-3.9.1.tar.gz/ChangeLog
Changed
15
1
2
+----------- - ffhevc 3.9.1
3
+ * Use atomicparsley to add cover art for the mp4/m4v
4
+ containers. This removes dependence on MP4Box and
5
+ makes it possible to copy over metadata info in
6
+ an easy way
7
+ * Add +frag_keyframe to the -movflags option when
8
+ output is mp4
9
+ * Renamed variable METACOVER to MKVCOVER
10
+ * Updated the man page
11
+
12
2019-10-18 - ffhevc 3.9.0
13
* Bugfix: use correct video track for crop
14
preview with MPlayer
15
ffhevc-3.9.0.tar.gz/ffhevc -> ffhevc-3.9.1.tar.gz/ffhevc
Changed
176
1
2
#
3
# Small script to encode to H.265/HEVC video using FFmpeg and libx265.
4
# Author: Grozdan "microchip" Nikolov <neutrino8@opensuse.org>
5
-# Version: 3.9.0
6
-# Date: 2019-10-18
7
+# Version: 3.9.1
8
+# Date: 2019-10-19
9
#
10
# ffhevc is free software ; you can redistribute it and/or modify
11
# it under the terms of the GNU General Public License as published by
12
13
brown() { echo -e "\e[0;33m$1\e[0;39;49m"; }
14
error() { echo -e "\e[1;31m$1\e[0;39;49m"; }
15
16
-version="3.9.0"
17
+version="3.9.1"
18
19
CFG="$HOME/.ffhevc"
20
-cfgversion="47"
21
+cfgversion="48"
22
23
genconfig_func() {
24
cat<<EOF>>"$CFG"
25
26
FFMPEG=""
27
FFPROBE=""
28
MPLAYER=""
29
-MP4BOX=""
30
+ATOMICPARSLEY=""
31
32
# Add a custom comment to your encodes
33
# Leave empty to disable/ask each time
34
35
fi
36
fi
37
38
-if [ ! -z "$MP4BOX" ]; then
39
- if [ ! -x "$MP4BOX" ]; then
40
- error "-> MP4Box is missing from your system!"
41
+if [ ! -z "$ATOMICPARSLEY" ]; then
42
+ if [ ! -x "$ATOMICPARSLEY" ]; then
43
+ error "-> atomicparsley is missing from your system!"
44
error "-> Check the config in '$CFG'"
45
echo
46
exit 1
47
fi
48
else
49
- MP4BOX="$(which MP4Box 2>/dev/null)"
50
- if [ ! -x "$MP4BOX" ]; then
51
- error "-> MP4Box is missing from your system!"
52
+ ATOMICPARSLEY="$(which atomicparsley 2>/dev/null)"
53
+ if [ ! -x "$ATOMICPARSLEY" ]; then
54
+ error "-> atomicparsley is missing from your system!"
55
echo
56
exit 1
57
fi
58
59
CONFMT="$(echo "$CONFMT" | tr '[:upper:]' '[:lower:]')"
60
if [ ! -z "$CONFMT" ]; then
61
case "$CONFMT" in
62
- mp4|mov) movflags="-movflags +faststart" ;;
63
+ mp4|mov) movflags="-movflags +faststart+frag_keyframe" ;;
64
mkv|m2ts|mts|ts) true ;;
65
*)
66
error "-> HEVC video not supported by the chosen container!"
67
68
fi
69
70
case "$CONFMT" in
71
- mkv|mp4|mov)
72
+ mkv|mp4|m4v)
73
printf "Specify a Cover Image in JPG/PNG format [press 'Enter' to skip]: "
74
read -e cover
75
if [ ! -z "$cover" ]; then
76
77
;;
78
esac
79
case "$CONFMT" in
80
- mkv) METACOVER="-attach \"$(readlink -e "$cover")\" -metadata:s:t mimetype=\"image/$img\"" ;;
81
- *) MP4COVER="-itags cover=\"$(readlink -e "$cover")\"" ;;
82
+ mkv) MKVCOVER="-attach \"$(readlink -e "$cover")\" -metadata:s:t mimetype=\"image/$img\"" ;;
83
+ mp4|m4v) MP4COVER="1" ;;
84
esac
85
- if [ ! -z "$remuxcon" ]; then
86
- for i in $remuxcon; do
87
- case "$i" in
88
- mp4|mov) MP4COVER2="-itags cover=\"$(readlink -e "$cover")\"" ;;
89
- esac
90
- done
91
- fi
92
fi
93
fi
94
;;
95
96
case "$1" in
97
1p|crf)
98
test "$encmode" = "1p" && passone="bitrate=$vbitrate" || passone="crf=$CRF"
99
- OPTS1="${audparams[*]} $subparams $strict $movflags $METACOVER \"$OUTPUT\""
100
+ OPTS1="${audparams[*]} $subparams $strict $movflags $MKVCOVER \"$OUTPUT\""
101
;;
102
2p)
103
passone="stats=\"${OUTFILE%.*}.log\":pass=1:bitrate=$vbitrate"
104
passtwo="stats=\"${OUTFILE%.*}.log\":pass=2:bitrate=$vbitrate"
105
OPTS1="-an -f null -y /dev/null"
106
- OPTS2="${audparams[*]} $subparams $strict $movflags $METACOVER \"$OUTPUT\""
107
+ OPTS2="${audparams[*]} $subparams $strict $movflags $MKVCOVER \"$OUTPUT\""
108
;;
109
3p)
110
passone="stats=\"${OUTFILE%.*}.log\":pass=1:bitrate=$vbitrate"
111
passtwo="stats=\"${OUTFILE%.*}.log\":pass=3:bitrate=$vbitrate"
112
OPTS1="-an -f null -y /dev/null"
113
OPTS2="-an -f null -y /dev/null"
114
- OPTS3="${audparams[*]} $subparams $strict $movflags $METACOVER \"$OUTPUT\""
115
+ OPTS3="${audparams[*]} $subparams $strict $movflags $MKVCOVER \"$OUTPUT\""
116
;;
117
esac
118
echo "nice -n $NICE $FFMPEG -i \"$input\" $VIDOPTS -c:v libx265 -x265-params $passone$X265PARAMS $OPTS1"
119
120
encoder_func $encmode >> "$OUTFILE"
121
echo "" >> "$OUTFILE"
122
case "$CONFMT" in
123
- mp4|mov)
124
+ mp4|m4v)
125
if [ ! -z "$MP4COVER" ]; then
126
- case "$CONFMT" in
127
- mp4) hint="-hint" ;;
128
- esac
129
- echo "$MP4BOX -add \"$OUTPUT\" $MP4COVER -mpeg4 $hint -new \"${OUTPUT%.*}_tmp$$.$CONFMT\" >/dev/null 2>&1" >> "$OUTFILE"
130
- echo "rm -f \"$OUTPUT\"" >> "$OUTFILE"
131
- echo "mv -f \"${OUTPUT%.*}_tmp$$.$CONFMT\" \"$OUTPUT\"" >> "$OUTFILE"
132
+ echo "echo" >> "$OUTFILE"
133
+ echo "green \"-> Adding cover image...\"" >> "$OUTFILE"
134
+ echo "$ATOMICPARSLEY \"$OUTPUT\" --artwork \"$(readlink -e "$cover")\" --overWrite >/dev/null 2>&1" >> "$OUTFILE"
135
+ echo "test \"\$?\" = \"0\" && green \"-> Done\" || red \"-> Failed!\"" >> "$OUTFILE"
136
+ echo "echo" >> "$OUTFILE"
137
+ echo "" >> "$OUTFILE"
138
fi
139
;;
140
esac
141
142
echo "" >> "$OUTFILE"
143
echo "echo" >> "$OUTFILE"
144
echo "green \"-> Remuxing to $i...\"" >> "$OUTFILE"
145
- echo "" >> "$OUTFILE"
146
- echo "$FFMPEG -i \"$OUTPUT\" -map 0 -c copy $strict \"${OUTPUT%.*}.$i\" >/dev/null 2>&1" >> "$OUTFILE"
147
+ case "$i" in
148
+ mkv)
149
+ if [ ! -z "$MP4COVER" ]; then
150
+ MKVCOVER2="-attach \"$(readlink -e "$cover")\" -metadata:s:t mimetype=\"image/$img\""
151
+ fi
152
+ ;;
153
+ *) MKVCOVER2="" ;;
154
+ esac
155
+ echo "$FFMPEG -i \"$OUTPUT\" -map 0 -c copy $strict $MKVCOVER2 $METATITLE $METAGENRE $METAYEAR $METACOMMENT ${audmeta[*]} ${audlang[*]} ${sublang[*]} ${sublng[*]} \"${OUTPUT%.*}.$i\" >/dev/null 2>&1" >> "$OUTFILE"
156
echo "test \"\$?\" = \"0\" && green \"-> Done\" || red \"-> Failed!\"" >> "$OUTFILE"
157
case "$i" in
158
- mp4|mov)
159
- if [ ! -z "$MP4COVER2" ]; then
160
- case "$i" in
161
- mp4) hint2="-hint" ;;
162
- esac
163
+ mp4|m4v)
164
+ if [ ! -z "$MKVCOVER" ]; then
165
echo "" >> "$OUTFILE"
166
- echo "$MP4BOX -add \"${OUTPUT%.*}.$i\" $MP4COVER2 -mpeg4 $hint2 -new \"${OUTPUT%.*}_tmp$$.$i\" >/dev/null 2>&1" >> "$OUTFILE"
167
- echo "rm -f \"${OUTPUT%.*}.$i\"" >> "$OUTFILE"
168
- echo "mv -f \"${OUTPUT%.*}_tmp$$.$i\" \"${OUTPUT%.*}.$i\"" >> "$OUTFILE"
169
+ echo "echo" >> "$OUTFILE"
170
+ echo "green \"-> Adding cover image...\"" >> "$OUTFILE"
171
+ echo "$ATOMICPARSLEY \"${OUTPUT%.*}.$i\" --artwork \"$(readlink -e "$cover")\" --overWrite >/dev/null 2>&1" >> "$OUTFILE"
172
+ echo "test \"\$?\" = \"0\" && green \"-> Done\" || red \"-> Failed!\"" >> "$OUTFILE"
173
fi
174
;;
175
esac
176
ffhevc-3.9.0.tar.gz/ffhevc.1 -> ffhevc-3.9.1.tar.gz/ffhevc.1
Changed
19
1
2
.de IPs
3
.IP "\\$1"
4
..
5
-.TH ffhevc 1 "Oct 18, 2019"
6
+.TH ffhevc 1 "Oct 19, 2019"
7
.SH NAME
8
ffhevc
9
10
11
.br
12
- MPlayer (for crop preview only)
13
.br
14
-- MP4Box from GPAC (for mp4/mov cover art only)
15
+- atomicparsley, version 0.9.2 or higher (for mp4 cover art only)
16
.br
17
- bc
18
19