Projects
Multimedia
ffxvid
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 100
View file
ffxvid.changes
Changed
@@ -1,4 +1,16 @@ ------------------------------------------------------------------- +Sun Jan 07 19:30:00 UTC 2024 - neutrino8@opensuse.org + +- Update to version 1.7.6 + * Improved compatibility with the BSDs + * Set the setpts + atempo option as default for + FPS conversion + * Set side/wide audio channels as default + * Support the newly added channels for TrueHD audio + * Bugfix in the video_noise_func() function + * Improved FPS detection code + +------------------------------------------------------------------- Thu Aug 17 03:35:00 UTC 2023 - neutrino8@opensuse.org - Update to version 1.7.5
View file
ffxvid.spec
Changed
@@ -1,7 +1,7 @@ # # spec file for package ffxvid # -# Copyright (c) 2021 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2024 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: ffxvid -Version: 1.7.5 +Version: 1.7.6 Release: %mkrel 1 Summary: A small shell script for encoding to Xvid with FFmpeg License: GPL-2.0+
View file
ffxvid-1.7.5.tar.gz/ChangeLog -> ffxvid-1.7.6.tar.gz/ChangeLog
Changed
@@ -1,3 +1,12 @@ +2024-01-07 - ffxvid 1.7.6 + * Improved compatibility with the BSDs + * Set the setpts + atempo option as default for + FPS conversion + * Set side/wide audio channels as default + * Support the newly added channels for TrueHD audio + * Bugfix in the video_noise_func() function + * Improved FPS detection code + 2023-08-17 - ffxvid 1.7.5 * Fix crop detection for HDR content * Set Lanczos as default scaler option
View file
ffxvid-1.7.5.tar.gz/ffxvid -> ffxvid-1.7.6.tar.gz/ffxvid
Changed
@@ -2,8 +2,8 @@ # # Small script to encode to Xvid video using FFmpeg. # Author: Grozdan "microchip" Nikolov <neutrino8@opensuse.org> -# Version: 1.7.5 -# Date: 2023-08-17 +# Version: 1.7.6 +# Date: 2024-01-07 # # ffx264 is free software ; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ brown() { echo -e "\e0;33m$1\e0;39;49m"; } error() { echo -e "\e1;31m$1\e0;39;49m"; } -version="1.7.5" +version="1.7.6" CFG="$HOME/.ffxvid" cfgversion="15" @@ -408,7 +408,7 @@ fi if -z "$batchmode" ; then - input="$(readlink -e "$input")" + input="$(realpath "$input")" fi if "$SCAN_MULTI_VID_TRACKS" = "y" ; then @@ -452,14 +452,14 @@ error "-> Could not create the output directory!" exit 1 fi - OUTPUT="$(realpath -s "$OUTPUT/\${i%.*}")" + OUTPUT="$(realpath "$OUTPUT/\${i%.*}")" else mkdir -p "$output" 2>/dev/null if $? != 0 ; then error "-> Could not create the output directory!" exit 1 fi - OUTPUT="$(realpath -s "$output/\${i%.*}")" + OUTPUT="$(realpath "$output/\${i%.*}")" fi else printf "Specify a Name for the Output: " @@ -474,9 +474,9 @@ error "-> Could not create the output directory!" exit 1 fi - OUTPUT="$(readlink -m "$output")" + OUTPUT="$(realpath "$output")" else - OUTPUT="$(readlink -m "$OUTDIR/$output")" + OUTPUT="$(realpath "$OUTDIR/$output")" fi fi @@ -512,12 +512,12 @@ fi if ! -z "$batchmode" ; then - if "$(realpath -s "$(dirname "$input")")" = "$(realpath -s "$(dirname "$OUTPUT")")" ; then + if "$(realpath "$(dirname "$input")")" = "$(realpath "$(dirname "$OUTPUT")")" ; then error "-> Input directory matches output directory!" exit 1 fi else - if "$(realpath -s "$input")" = "$(realpath -s "$OUTPUT")" ; then + if "$(realpath "$input")" = "$(realpath "$OUTPUT")" ; then error "-> Input file matches output file!" exit 1 fi @@ -531,7 +531,7 @@ mv -f "$OUTPUT" "$OUTPUT.$$.old" fi else - CHDIR="cd \"$(realpath -s "$(dirname "$input")")\"" + CHDIR="cd \"$(realpath "$(dirname "$input")")\"" FORLOOP_START="for i in *; do" CHKFILE_START="if -f \"\$i\" ; then" CHKFILE_END="fi" @@ -636,7 +636,7 @@ ;; esac case "$CONFMT" in - mkv) MKVCOVER="-attach \"$(readlink -e "$cover")\" -metadata:s:t mimetype=\"image/$img\"" ;; + mkv) MKVCOVER="-attach \"$(realpath "$cover")\" -metadata:s:t mimetype=\"image/$img\"" ;; mp4|m4v|mov) MP4COVER="1" ;; esac fi @@ -751,7 +751,7 @@ printf "Specify the Noise Strength 0-100 - default is 2: " read nvalue test -z "$nvalue" && nval="2" || nval="$nvalue" - noise="noise=alls=$nvalue:allf=t+u," + noise="noise=alls=$nval:allf=t+u," fi } @@ -865,6 +865,7 @@ # Used by mc/bobbing deinterlace and FPS conversion video_fps_func() { GETFPS="$($FFPROBE -i "$input" -v quiet -select_streams v:$vidtrack -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 | tail -1)" + IFPS="$(echo "scale=3; $GETFPS" | $BC -l | sed 's|\.000||')" } # Used by mc/bobbing deinterlace, IVTC and interlace-aware encoding @@ -950,7 +951,7 @@ FPS1="$(echo "$GETFPS" | awk -F/ '{print $1}')" FPS2="$(echo "$GETFPS" | awk -F/ '{print $2}')" OFPS="$(($FPS1*2))/$FPS2" - green "-> Detected $(echo "scale=3; $GETFPS" | $BC -l) FPS" + green "-> Detected $IFPS" green "-> Setting output FPS to: $(echo "scale=3; $OFPS" | $BC -l)" ofps="-r $OFPS" else @@ -1722,7 +1723,7 @@ echo " 1 -> setpts + atempo (converts by PTS + audio speedup/down)" echo " 2 -> framestep (frame rate halving - for options 18-20)" echo - printf "Specify the FPS Conversion Method default is 0: " + printf "Specify the FPS Conversion Method default is 1: " read fcm case "$fcm" in 0|1|2|"") true ;; @@ -1755,127 +1756,127 @@ case "$fpsopt" in 0) case "$fcm" in - 0|"") fps="fps=fps=24," ;; - 1) setpts="setpts=23976/24000*PTS,"; atempo="atempo=1.001001001," ;; + 0) fps="fps=fps=24," ;; + 1|"") setpts="setpts=23976/24000*PTS,"; atempo="atempo=1.001001001," ;; esac ofps="-r 24/1" ;; 1) case "$fcm" in - 0|"") fps="fps=fps=25," ;; - 1) setpts="setpts=23976/25000*PTS,"; atempo="atempo=1.04270937604270937604," ;; + 0) fps="fps=fps=25," ;; + 1|"") setpts="setpts=23976/25000*PTS,"; atempo="atempo=1.04270937604270937604," ;; esac ofps="-r 25/1" ;; 2) case "$fcm" in - 0|"") fps="fps=fps=30000/1001," ;; - 1) setpts="setpts=23976/29970*PTS,"; atempo="atempo=1.25," ;; + 0) fps="fps=fps=30000/1001," ;; + 1|"") setpts="setpts=23976/29970*PTS,"; atempo="atempo=1.25," ;; esac ofps="-r 30000/1001" ;; 3) case "$fcm" in - 0|"") fps="fps=fps=24000/1001," ;; - 1) setpts="setpts=24000/23976*PTS,"; atempo="atempo=0.999," ;; + 0) fps="fps=fps=24000/1001," ;; + 1|"") setpts="setpts=24000/23976*PTS,"; atempo="atempo=0.999," ;; esac ofps="-r 24000/1001" ;; 4) case "$fcm" in - 0|"") fps="fps=fps=25," ;; - 1) setpts="setpts=24000/25000*PTS,"; atempo="atempo=1.04166666667," ;; + 0) fps="fps=fps=25," ;; + 1|"") setpts="setpts=24000/25000*PTS,"; atempo="atempo=1.04166666667," ;; esac ofps="-r 25/1" ;; 5) case "$fcm" in - 0|"") fps="fps=fps=30000/1001," ;; - 1) setpts="setpts=24000/29970*PTS,"; atempo="atempo=1.24875," ;; + 0) fps="fps=fps=30000/1001," ;; + 1|"") setpts="setpts=24000/29970*PTS,"; atempo="atempo=1.24875," ;; esac ofps="-r 30000/1001" ;; 6) case "$fcm" in - 0|"") fps="fps=fps=24000/1001," ;; - 1) setpts="setpts=25000/23976*PTS,"; atempo="atempo=0.95904," ;; + 0) fps="fps=fps=24000/1001," ;; + 1|"") setpts="setpts=25000/23976*PTS,"; atempo="atempo=0.95904," ;; esac ofps="-r 24000/1001" ;; 7) case "$fcm" in - 0|"") fps="fps=fps=24," ;; - 1) setpts="setpts=25000/24000*PTS,"; atempo="atempo=0.96," ;; + 0) fps="fps=fps=24," ;; + 1|"") setpts="setpts=25000/24000*PTS,"; atempo="atempo=0.96," ;; esac ofps="-r 24/1" ;; 8) case "$fcm" in - 0|"") fps="fps=fps=30000/1001," ;; - 1) setpts="setpts=25000/29970*PTS,"; atempo="atempo=1.1988," ;; + 0) fps="fps=fps=30000/1001," ;; + 1|"") setpts="setpts=25000/29970*PTS,"; atempo="atempo=1.1988," ;; esac ofps="-r 30000/1001" ;; 9) case "$fcm" in - 0|"") fps="fps=fps=24000/1001," ;; - 1) setpts="setpts=29970/23976*PTS,"; atempo="atempo=0.8," ;; + 0) fps="fps=fps=24000/1001," ;; + 1|"") setpts="setpts=29970/23976*PTS,"; atempo="atempo=0.8," ;; esac ofps="-r 24000/1001" ;; 10) case "$fcm" in - 0|"") fps="fps=fps=24," ;; - 1) setpts="setpts=29970/24000*PTS,"; atempo="atempo=0.800800800801," ;; + 0) fps="fps=fps=24," ;; + 1|"") setpts="setpts=29970/24000*PTS,"; atempo="atempo=0.800800800801," ;; esac ofps="-r 24/1" ;; 11) case "$fcm" in - 0|"") fps="fps=fps=25," ;; - 1) setpts="setpts=29970/25000*PTS,"; atempo="atempo=0.83416750083416750083," ;; + 0) fps="fps=fps=25," ;; + 1|"") setpts="setpts=29970/25000*PTS,"; atempo="atempo=0.83416750083416750083," ;; esac ofps="-r 25/1" ;; 12) case "$fcm" in - 0|"") fps="fps=fps=60000/1001," ;; - 1) setpts="setpts=50000/59940*PTS,"; atempo="atempo=1.1988," ;; + 0) fps="fps=fps=60000/1001," ;; + 1|"") setpts="setpts=50000/59940*PTS,"; atempo="atempo=1.1988," ;; esac ofps="-r 60000/1001" ;; 13) case "$fcm" in - 0|"") fps="fps=fps=60," ;; - 1) setpts="setpts=50000/60000*PTS,"; atempo="atempo=1.2," ;; + 0) fps="fps=fps=60," ;; + 1|"") setpts="setpts=50000/60000*PTS,"; atempo="atempo=1.2," ;; esac ofps="-r 60/1" ;; 14) case "$fcm" in - 0|"") fps="fps=fps=50," ;; - 1) setpts="setpts=59940/50000*PTS,"; atempo="atempo=0.83416750083416750083," ;; + 0) fps="fps=fps=50," ;; + 1|"") setpts="setpts=59940/50000*PTS,"; atempo="atempo=0.83416750083416750083," ;; esac ofps="-r 50/1" ;; 15) case "$fcm" in - 0|"") fps="fps=fps=60," ;; - 1) setpts="setpts=59940/60000*PTS,"; atempo="atempo=1.00100100100100100100," ;; + 0) fps="fps=fps=60," ;; + 1|"") setpts="setpts=59940/60000*PTS,"; atempo="atempo=1.00100100100100100100," ;; esac ofps="-r 60/1" ;; 16) case "$fcm" in - 0|"") fps="fps=fps=50," ;; - 1) setpts="setpts=60000/50000*PTS,"; atempo="atempo=0.83333333333333333333," ;; + 0) fps="fps=fps=50," ;; + 1|"") setpts="setpts=60000/50000*PTS,"; atempo="atempo=0.83333333333333333333," ;; esac ofps="-r 50/1" ;; 17) case "$fcm" in - 0|"") fps="fps=fps=60000/1001," ;; - 1) setpts="setpts=60000/59940*PTS,"; atempo="atempo=0.999," ;; + 0) fps="fps=fps=60000/1001," ;; + 1|"") setpts="setpts=60000/59940*PTS,"; atempo="atempo=0.999," ;; esac ofps="-r 60000/1001" ;; @@ -2070,7 +2071,7 @@ mp4|m4v|mov) submuxer_ext="mov_text" ;; *) submuxer_ext="copy" ;; esac - EXTSUBSi="-i \"$(readlink -e "${subfilei}")\"" + EXTSUBSi="-i \"$(realpath "${subfilei}")\"" subcpyi="-map $i:0 -c:s:${subidxi} $submuxer_ext ${sublngi} -disposition:s:${subidxi} $sdispo" fi done @@ -2595,9 +2596,9 @@ ;; *) case "${achi}" in - 2|5|6) true ;; + 2|3|4|5|6) true ;; *) - error "-> TrueHD encoder in ffmpeg supports only 2, 5 and 6 channels!" + error "-> TrueHD encoder in ffmpeg supports only 2, 3, 4, 5 and 6 channels!" exit 1 ;; esac @@ -2661,7 +2662,7 @@ echo " 2 -> 3.0 6 -> 4.0 10 -> 5.1" echo " 3 -> 3.0(back) 7 -> 4.1 11 -> 5.1(side)" echo - printf "Track $i: Specify the Audio Channel Layout default is 10: " + printf "Track $i: Specify the Audio Channel Layout default is 11: " read achanlayouti case "${achanlayouti}" in 0) achlayouti="mono"; achmetai=" Mono" ;; @@ -2674,8 +2675,8 @@ 7) achlayouti="4.1"; achmetai=" 4.1" ;; 8) achlayouti="5.0"; achmetai=" 5.0" ;; 9) achlayouti="5.0(side)"; achmetai=" 5.0(side)" ;; - 10|"") achlayouti="5.1"; achmetai=" 5.1" ;; - 11) achlayouti="5.1(side)"; achmetai=" 5.1(side)" ;; + 10) achlayouti="5.1"; achmetai=" 5.1" ;; + 11|"") achlayouti="5.1(side)"; achmetai=" 5.1(side)" ;; *) error "-> Invalid option!" exit 1 @@ -2707,7 +2708,7 @@ echo " 2 -> 3.0 6 -> Quad(side) 10 -> 5.1(side)" echo " 3 -> 3.0(back) 7 -> 5.0 11 -> 7.1" echo - printf "Track $i: Specify the Audio Channel Layout default is 11: " + printf "Track $i: Specify the Audio Channel Layout default is 12: " read achanlayouti case "${achanlayouti}" in 0) achlayouti="mono"; achmetai=" Mono" ;; @@ -2721,8 +2722,8 @@ 8) achlayouti="5.0(side)"; achmetai=" 5.0(side)" ;; 9) achlayouti="5.1"; achmetai=" 5.1" ;; 10) achlayouti="5.1(side)"; achmetai=" 5.1(side)" ;; - 11|"") achlayouti="7.1"; achmetai=" 7.1" ;; - 12) achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; + 11) achlayouti="7.1"; achmetai=" 7.1" ;; + 12|"") achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; 13) achlayouti="7.1(wide-side)"; achmetai=" 7.1(wide-side)" ;; *) error "-> Invalid option!" @@ -2739,7 +2740,7 @@ echo " 2 -> 3.0 6 -> 7.1" echo " 3 -> 4.0 7 -> 7.1(wide)" echo - printf "Track $i: Specify the Audio Channel Layout default is 6: " + printf "Track $i: Specify the Audio Channel Layout default is 7: " read achanlayouti case "${achanlayouti}" in 0) achlayouti="mono"; achmetai=" Mono" ;; @@ -2748,8 +2749,8 @@ 3) achlayouti="4.0"; achmetai=" 4.0" ;; 4) achlayouti="5.0"; achmetai=" 5.0" ;; 5) achlayouti="5.1"; achmetai=" 5.1" ;; - 6|"") achlayouti="7.1"; achmetai=" 7.1" ;; - 7) achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; + 6) achlayouti="7.1"; achmetai=" 7.1" ;; + 7|"") achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; *) error "-> Invalid option!" exit 1 @@ -2824,16 +2825,21 @@ esac ;; truehd) - echo " 0 -> Stereo" - echo " 1 -> 5.0" - echo " 2 -> 5.1" + echo " 0 -> Stereo 4 -> 4.1" + echo " 1 -> 3.0 5 -> 5.0(side)" + echo " 2 -> 3.1 6 -> 5.1(side)" + echo " 3 -> 4.0" echo - printf "Track $i: Specify the Audio Channel Layout default is 2: " + printf "Track $i: Specify the Audio Channel Layout default is 6: " read achanlayouti case "${achanlayouti}" in 0) achlayouti="stereo"; achmetai=" Stereo" ;; - 1) achlayouti="5.0"; achmetai=" 5.0" ;; - 2|"") achlayouti="5.1"; achmetai=" 5.1" ;; + 1) achlayouti="3.0"; achmetai="3.0" ;; + 2) achlayouti="3.1"; achmetai="3.1" ;; + 3) achlayouti="quad"; achmetai="Quad" ;; + 4) achlayouti="4.1"; achmetai="4.1" ;; + 5) achlayouti="5.0(side)"; achmetai=" 5.0(side)" ;; + 6|"") achlayouti="5.1(side)"; achmetai=" 5.1(side)" ;; *) error "-> Invalid option!" exit 1 @@ -2846,7 +2852,7 @@ echo " 2 -> 3.0 6 -> 5.0(side) 10 -> 6.1(front) 14 -> 7.1" echo " 3 -> Quad 7 -> 5.1 11 -> 6.1(back) 15 -> 7.1(wide)" echo - printf "Track $i: Specify the Audio Channel Layout default is 14: " + printf "Track $i: Specify the Audio Channel Layout default is 15: " read achanlayouti case "${achanlayouti}" in 0) achlayouti="mono"; achmetai=" Mono" ;; @@ -2863,8 +2869,8 @@ 11) achlayouti="6.1(back)"; achmetai=" 6.1(back)" ;; 12) achlayouti="7.0"; achmetai=" 7.0" ;; 13) achlayouti="7.0(front)"; achmetai=" 7.0(front)" ;; - 14|"") achlayouti="7.1"; achmetai=" 7.1" ;; - 15) achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; + 14) achlayouti="7.1"; achmetai=" 7.1" ;; + 15|"") achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; 16) achlayouti="7.1(wide-side)"; achmetai=" 7.1(wide-side)" ;; *) error "-> Invalid option!" @@ -2901,7 +2907,7 @@ echo " 2 -> 2.1 6 -> 5.0 10 -> 6.0 14 -> 6.1(back) 18 -> 7.1(wide)" echo " 3 -> 3.0 7 -> 5.0(side) 11 -> 6.0(front) 15 -> 7.0 19 -> 7.1(wide-side)" echo - printf "Track $i: Specify the Audio Channel Layout default is 17: " + printf "Track $i: Specify the Audio Channel Layout default is 18: " read achanlayouti case "${achanlayouti}" in 0) achlayouti="mono"; achmetai=" Mono" ;; @@ -2921,8 +2927,8 @@ 14) achlayouti="6.1(back)"; achmetai=" 6.1(back)" ;; 15) achlayouti="7.0"; achmetai=" 7.0" ;; 16) achlayouti="7.0(front)"; achmetai=" 7.0(front)" ;; - 17|"") achlayouti="7.1"; achmetai=" 7.1" ;; - 18) achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; + 17) achlayouti="7.1"; achmetai=" 7.1" ;; + 18|"") achlayouti="7.1(wide)"; achmetai=" 7.1(wide)" ;; 19) achlayouti="7.1(wide-side)"; achmetai=" 7.1(wide-side)" ;; *) error "-> Invalid option!" @@ -3482,7 +3488,7 @@ vflags="" color="" if ! -z "$MP4COVER" ; then - MKVCOVER2="-attach \"$(readlink -e "$cover")\" -metadata:s:t mimetype=\"image/$img\"" + MKVCOVER2="-attach \"$(realpath "$cover")\" -metadata:s:t mimetype=\"image/$img\"" fi ;; *) vflags=""; color=""; MKVCOVER2="" ;; @@ -3507,7 +3513,7 @@ echo "" >> "$OUTFILE" echo "echo" >> "$OUTFILE" echo "green \"-> Adding cover image to $i...\"" >> "$OUTFILE" - echo "$MP4BOX -add \"${OUTPUT%.*}.$i\"$color -itags cover=\"$(readlink -e "$cover")\":name=\"$(basename "${OUTPUT%.*}")\":genre=\"$genre\":created=\"$year\":composer=\"$director\":artist=\"$cast\":comment=\"$COMMENT\" -tmp \"$(dirname "$OUTPUT")\" -mpeg4 -new \"${OUTPUT%.*}_COVER_$$.$i\" >/dev/null 2>&1" >> "$OUTFILE" + echo "$MP4BOX -add \"${OUTPUT%.*}.$i\"$color -itags cover=\"$(realpath "$cover")\":name=\"$(basename "${OUTPUT%.*}")\":genre=\"$genre\":created=\"$year\":composer=\"$director\":artist=\"$cast\":comment=\"$COMMENT\" -tmp \"$(dirname "$OUTPUT")\" -mpeg4 -new \"${OUTPUT%.*}_COVER_$$.$i\" >/dev/null 2>&1" >> "$OUTFILE" echo "RET=\$?" >> "$OUTFILE" echo "test \"\$RET\" = \"0\" && green \"-> Done\" || red \"-> Failed!\"" >> "$OUTFILE" echo "if \"\$RET\" = \"0\" ; then" >> "$OUTFILE" @@ -3527,7 +3533,7 @@ esac echo "echo" >> "$OUTFILE" echo "green \"-> Adding cover image to $CONFMT...\"" >> "$OUTFILE" - echo "$MP4BOX -add \"$OUTPUT\"$color -itags cover=\"$(readlink -e "$cover")\":name=\"$(basename "${OUTPUT%.*}")\":genre=\"$genre\":created=\"$year\":composer=\"$director\":artist=\"$cast\":comment=\"$COMMENT\" -tmp \"$(dirname "$OUTPUT")\" -mpeg4 -new \"${OUTPUT%.*}_COVER_$$.$CONFMT\" >/dev/null 2>&1" >> "$OUTFILE" + echo "$MP4BOX -add \"$OUTPUT\"$color -itags cover=\"$(realpath "$cover")\":name=\"$(basename "${OUTPUT%.*}")\":genre=\"$genre\":created=\"$year\":composer=\"$director\":artist=\"$cast\":comment=\"$COMMENT\" -tmp \"$(dirname "$OUTPUT")\" -mpeg4 -new \"${OUTPUT%.*}_COVER_$$.$CONFMT\" >/dev/null 2>&1" >> "$OUTFILE" echo "RET=\$?" >> "$OUTFILE" echo "test \"\$RET\" = \"0\" && green \"-> Done\" || red \"-> Failed!\"" >> "$OUTFILE" echo "if \"\$RET\" = \"0\" ; then" >> "$OUTFILE"
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
.